//
TTabSheets von
TPageControl werden eingefärbt.
// Getestet mit D4 unter WinME
// Variante 1:
Tabs dürfen
nicht ausgeblendet werden,
//
ansonsten geraten die Reiter durcheinander.
const
flaeche: array[0..2] of TColor = (clYellow, clLime, clBlue);
schrift: array[0..2] of TColor = (clRed, clBlack, clwhite);
// Farbige Fläche
procedure TForm1.FormCreate(Sender: TObject);
var
x: integer;
begin
PageControl1.Ownerdraw := true; // nur bei farbigen Reitern
for x := 0 to 2 do
PageControl1.Pages[x].brush.color := flaeche[x];
end;
// Farbige Reiter
procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
r: TRect;
begin
with PageControl1.canvas do begin
brush.color := flaeche[TabIndex];
Font.color := schrift[TabIndex];
r := Rect;
fillrect(r);
Drawtext(handle, Pchar(PageControl1.pages[Tabindex].caption), -1, r,
DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;
end;
//
----------------------------------------------------------------
// Variante 2:
Tabs können
ein- und ausgeblendet werden.
//
Bedingung: Es muss eine eigene Prozedur
("TabShow")
//
dafür benutzt
werden.
...
public
procedure TabShow(TS: TTabSheet; showtab: boolean);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
const
TabMaxZahl = 4;
flaeche: array[0..TabMaxZahl - 1] of TColor = (clYellow, clFuchsia, clBlue, clGreen);
schrift: array[0..TabMaxZahl - 1] of TColor = (clGreen, clBlack, clWhite, clYellow);
hlp: array[0..TabMaxZahl - 1] of integer = (0, 1, 2, 3);
procedure TForm1.FormCreate(Sender: TObject);
var x: integer;
begin
with PageControl1 do begin
Ownerdraw := true;
if PageCount > TabMaxZahl
then begin
showmessage('Falsche Tabzahl');
application.terminate;
exit;
end;
for x := 0 to PageCount - 1 do begin
Pages[x].tag := x;
Pages[x].tabvisible := true;
Pages[x].brush.color := flaeche[x];
end;
end;
end;
procedure TForm1.TabShow(TS: TTabSheet; showtab: boolean);
begin
if TS.tabvisible <> showtab then begin
if showtab then begin
TS.Pagecontrol.ActivePage := TS; // Bugfix
TS.tabvisible := true;
movememory(@hlp[TS.TabIndex + 1], @hlp[TS.TabIndex],
(TabMaxZahl - 1 - TS.TabIndex) * sizeof(integer));
hlp[TS.TabIndex] := TS.tag;
end else begin
movememory(@hlp[TS.TabIndex], @hlp[TS.TabIndex + 1],
(TabMaxZahl - 1 - TS.TabIndex) * sizeof(integer));
TS.tabvisible := false;
end;
end;
end;
// (Doppelklick im Objektinspektor)
procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
r: TRect;
begin
with TPageControl(Control), Canvas do begin
brush.color := flaeche[hlp[TabIndex]];
Font.color := schrift[hlp[TabIndex]];
r := Rect;
fillrect(r);
Drawtext(handle, Pchar(Pages[hlp[TabIndex]].caption), -1, r,
DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;
end;
// --- Beispielaufrufe ---
procedure TForm1.Button1Click(Sender: TObject);
begin
TabShow(TabSheet2, false);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if PageControl1.Pagecount = 0 then exit;
TabShow(PageControl1.Pages[PageControl1.Pagecount - 1],
not PageControl1.Pages[PageControl1.Pagecount - 1].tabvisible);
end;
|