// 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;

 


Zugriffe seit 6.9.2001 auf Delphi-Ecke