Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi PageControl -> Tabs selber beschriften -> TabVisible Problem (https://www.delphipraxis.net/110578-pagecontrol-tabs-selber-beschriften-tabvisible-problem.html)

HolgerCW 20. Mär 2008 11:30


PageControl -> Tabs selber beschriften -> TabVisible P
 
Hallo zusammen,

ich beschrifte meine Tabs mit dem Draw-Ereignis selber.

Wenn ich z.B. 3 Tabs auf einem PageControl habe werden diese auch richtig beschriftet.

Würde ich aber jetzt das mittlere Tab Visible = FALSE stellen, beschriftet er mir das dritte Tab mit der Beschriftung des zweiten. Wie kann ich das lösen ?

Gruss

Holger

Die Muhkuh 20. Mär 2008 11:39

Re: PageControl -> Tabs selber beschriften -> TabVisib
 
Hi Holger,

wie sieht Deine Beschriftungsprozedur aus?

HolgerCW 20. Mär 2008 11:50

Re: PageControl -> Tabs selber beschriften -> TabVisib
 
Das ist meine Procedure. Habe nur die relevanten Sachen stehen gelassen:

Delphi-Quellcode:
procedure Berechtigung_Tab_zeichnen(PageControl: TPageControl; Bilder: Boolean;Control: TCustomTabControl; Der_TabIndex: Integer; const Rect: TRect; Active: Boolean);
begin

 //bitte Tabindex in Deklaration mit ATabindex auswechseln,
 //sonst überschneidung mit Pagecontrol.tabindex. Deklaration in
 //Tform nicht vergessen
 //OwnerDraw des PageControls auf true setzen

 with Control as TPageControl do
 begin

   If Berechtigt = TRUE then
   begin

    //Wenn Berechtigt wird normal gezeichnet (Tahoma)
    Canvas.Brush.Style := bssolid;
    Canvas.Font.Color := clbtntext;
    Canvas.TextOut(rect.left+25,rect.top+7,Pages[Der_Tabindex].Caption);
    If Bilder = TRUE then Images.Draw(Canvas,rect.Left+7,rect.Top+2, Der_Tabindex);

   end
   else
   begin

    //Wenn nicht berechtigt wird enabled gezeichnet
    Canvas.Brush.Style := bssolid;
    Canvas.Font.Color := clBtnHighlight;
    Canvas.TextOut(rect.left+25,rect.top+7,Pages[Der_Tabindex].Caption);
   
    //text in anderer Farbe wieder drüberzeichnen (25 Pixel nach links oben versetzt)
    Canvas.Brush.Style := bsclear;
    Canvas.Font.Color := clBtnShadow;
    Canvas.TextOut(rect.left+26,rect.top+8,Pages[Der_Tabindex].Caption);
   
    If Bilder = TRUE then Images.Draw(Canvas,rect.Left+7,rect.Top+2, Der_Tabindex);

   end;

  end;

end;
Was muss ich da ergänzen wenn ich ein Tab Visible = TRUE setze ?

mkinzler 20. Mär 2008 11:51

Re: PageControl -> Tabs selber beschriften -> TabVisib
 
Zitat:

Zitat von Die Muhkuh
Hi Holger,

wie sieht Deine Beschriftungsprozedur aus?

http://www.delphipraxis.net/internal...t.php?t=130914
Du musst abprüfen ob Tabs ausgeblendet sind und dann den Index berechnen

HolgerCW 20. Mär 2008 12:02

Re: PageControl -> Tabs selber beschriften -> TabVisib
 
Hast Du da ein Beispiel wie ich das am besten Abgfrage und den Index neu berechne ?

mkinzler 20. Mär 2008 12:39

Re: PageControl -> Tabs selber beschriften -> TabVisib
 
Du nimmst ja den Laufindex um die X-Position zu berechnen. ich würde eine 2. Variable (z.B.) I2 verwenden welche ich inkrementieren würde wenn der Ite Tab sichtbar ist und dann nur zeichnen.

hoika 20. Mär 2008 12:46

Re: PageControl -> Tabs selber beschriften -> TabVisib
 
Hallo,

warum nimms du überhaupt den Index ?
Geht es nicht auch über die TabSheets direkt?


Heiko

HolgerCW 20. Mär 2008 12:57

Re: PageControl -> Tabs selber beschriften -> TabVisib
 
Irgendwie ist da ein Brett vor dem Kopf.

Wie könnte ich das nun realisieren. Wenn z.B. folgende konstellation besteht:

Tab1(FALSE), Tab2, Tab3, Tab4(FALSE), Tab5

Dann müsste I2 ja global sein, oder ?

Könntest Du mir das mal ein kleinen Codeansatz schreiben. Ich komme da jetzt nciht hinter ? :?

Vielleicht verstehe ich auch noch nciht das Draw Ereignis. wird das Ereignis für jedes Tab neu aufgerufen. Oder wird es einmal aufgerufen und läuft dann in einer Schleife oder ?

hoika 20. Mär 2008 13:02

Re: PageControl -> Tabs selber beschriften -> TabVisib
 
Hallo,

jedes Tabsheet in einem PageControl ist selbst eine Komponente
mit einem Namen.
Das ist wie ein Label auf einem Panel, beide sind getrennt ansprechbar.


Heiko

HolgerCW 20. Mär 2008 13:04

Re: PageControl -> Tabs selber beschriften -> TabVisib
 
aber ich nutze ja das Ereignis onDrawTab von dem PageControl -> kann ich dann in dem Ereignis einfach I:=I+1 rechnen und am Ende habe ich den Count der Tabs ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz