yehiaeg
asked on
Add Close button to Each Tab
HELLO,
i need to add a close button to each tab (TPageControl ot TTabControl) so i used the drawtab event
// i is an imagelist
i.Draw(tabcontrol1.Canvas, Rect.Right -20,Rect.Top +2,0);
but this seems to remove all the 3d and xp style painting, anyway to make the
control continue the default painting after this line?
Thanks
Yehia
i need to add a close button to each tab (TPageControl ot TTabControl) so i used the drawtab event
// i is an imagelist
i.Draw(tabcontrol1.Canvas,
but this seems to remove all the 3d and xp style painting, anyway to make the
control continue the default painting after this line?
Thanks
Yehia
ASKER
na, didn't work, did u try it?
ASKER
still add the image but the xp style and default painting are gone
You can use TMS TAdvPageControl v.1.2 from TMS Software, that has a built-in close button property for each tab.
It's fully functional, however, without source. See:
- http://torry.net/pages.php?id=164
- http://www.tmssoftware.com/
It's fully functional, however, without source. See:
- http://torry.net/pages.php?id=164
- http://www.tmssoftware.com/
ASKER
don't really want to use 3rd parties product, anyother solution?
You could add an imagelist containing the image of a button, set the imagelist property of the pagecontrol to the imagelist and set the imageindex of each tab to the button's index. This approach ensures that you get the default drawing behaviour and reserves space for the "buttons".
Whether you use an imagelist or draw the button yourself, you'll need to determine when the "button" is clicked. The mousedown of the pagecontrol will see clicks within the tabs and give you a and y coordinates, but you'l need to determine if the mouseclick corresponds to the position of a "button". If the position of the tabs stays contant (no scrolling or multirow), you could store the limits for each button in your code.
Whether you use an imagelist or draw the button yourself, you'll need to determine when the "button" is clicked. The mousedown of the pagecontrol will see clicks within the tabs and give you a and y coordinates, but you'l need to determine if the mouseclick corresponds to the position of a "button". If the position of the tabs stays contant (no scrolling or multirow), you could store the limits for each button in your code.
>> na, didn't work, did u try it?
on Windows 2000, I don't have XP installed. :}
on Windows 2000, I don't have XP installed. :}
ASKER
i added the imagelist and it worked ok, but is there anyway to put the image after the text and not before it?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Maybe i read the question wrong but.....
why not create buttons and assign the parent of them to the PageControl? That way you'd have all of the events, properties of the buttons - and could set the Onclick event to the same procedure for all of the buttons.
why not create buttons and assign the parent of them to the PageControl? That way you'd have all of the events, properties of the buttons - and could set the Onclick event to the same procedure for all of the buttons.
{pas}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure PageControl1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender : TObject);
begin
Close;
end;
procedure TForm1.PageControl1Change( Sender: TObject);
begin
Button1.Parent:=PageContro l1.ActiveP age;
end;
end.
{dfm}
object Form1: TForm1
Left = 244
Top = 176
Width = 870
Height = 640
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object PageControl1: TPageControl
Left = 0
Top = 0
Width = 862
Height = 613
ActivePage = TabSheet1
Align = alClient
TabOrder = 0
OnChange = PageControl1Change
object TabSheet1: TTabSheet
Caption = 'TabSheet1'
object Button1: TButton
Left = 760
Top = 544
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
end
object TabSheet2: TTabSheet
Caption = 'TabSheet2'
ImageIndex = 1
end
object TabSheet3: TTabSheet
Caption = 'TabSheet3'
ImageIndex = 2
end
end
end
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure PageControl1Change(Sender:
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender
begin
Close;
end;
procedure TForm1.PageControl1Change(
begin
Button1.Parent:=PageContro
end;
end.
{dfm}
object Form1: TForm1
Left = 244
Top = 176
Width = 870
Height = 640
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object PageControl1: TPageControl
Left = 0
Top = 0
Width = 862
Height = 613
ActivePage = TabSheet1
Align = alClient
TabOrder = 0
OnChange = PageControl1Change
object TabSheet1: TTabSheet
Caption = 'TabSheet1'
object Button1: TButton
Left = 760
Top = 544
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
end
object TabSheet2: TTabSheet
Caption = 'TabSheet2'
ImageIndex = 1
end
object TabSheet3: TTabSheet
Caption = 'TabSheet3'
ImageIndex = 2
end
end
end
TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
Icon : TIcon;
begin
inherited;
Icon := TIcon.Create;
with Control.Canvas do
begin
Pen.Color := clBlue;
ImageList1.GetIcon(0, Icon);
Draw(Rect.Right - 20, Rect.Top + 2, Icon);
end;
end;