![]() |
TabVisible -> Bei selber zeichnen
Hallo zusammen,
ich starte hier noch einmal einen Versuch ... Hier schonmal mein Code: (Diese Procedure wird mit dem OnDrawTab-Ereignis von einem TPageControl aufgerufen)
Delphi-Quellcode:
Wie bekomme ich es nun hin, wenn ein Tab von dem PageControl TabVisible = FALSE ist, dass die Tabgrössen (Rect) und die Beschriftungen für die restlichen Tabs richtig bzw. an der richtigen Stelle gezeichnet werden ?
procedure Berechtigung_Tab_zeichnen(PageControl: TPageControl; Berechtigt: Boolean;Control: TCustomTabControl; Der_TabIndex: Integer; const Rect: TRect; Active: Boolean);
var Beschriftung: String; begin with Control as TPageControl do begin Beschriftung := Pages[Der_Tabindex].Caption; If Berechtigt = TRUE then begin //Wenn Berechtigt wird normal gezeichnet Canvas.Brush.Style := bssolid; If Alarm_rot_zeichnen(Pages[Der_TabIndex].Name) = TRUE then Canvas.Brush.Color := clRed; Canvas.Font.Color := clbtntext; Canvas.TextOut(rect.left,rect.top,Beschriftung); end else begin //Wenn nicht berechtigt wird enabled gezeichnet Canvas.Brush.Style := bssolid; Canvas.Font.Color := clbtntext; DrawState(Canvas.Handle, Canvas.Brush.Handle, nil, Integer(Beschriftung), 0, rect.left,rect.top,0,0,DST_TEXT or DSS_DISABLED); end; end; end; Gruss Holger |
Re: TabVisible -> Bei selber zeichnen
man sollte so weit wie möglich auf globale Variablen verzichten.
Wie berechnest du X1, Y1? |
Re: TabVisible -> Bei selber zeichnen
X1, Y1 war nur zur Anpassung der Postition fest vorgegeben.
Ich denke es geht genau um diese Berechnung, oder ? Aber wie mache ich die ? Oder kann ich auch über den TabIndex irgendwie gehen ? |
Re: TabVisible -> Bei selber zeichnen
Brauchst su so gar nicht, denn Rect liefert dir die Eck-Koordinaten des Tabs
|
Re: TabVisible -> Bei selber zeichnen
Ja, aber wie mache ich das denn nun ?
Komme da nicht weiter ... |
Re: TabVisible -> Bei selber zeichnen
Wenn ich dieses am Anfang der Procedure mache:
Delphi-Quellcode:
... funktioniert das auch wenn ich ein Tab Visible = FALSE setze. Bei zwei oder mehr Tabs aber nicht. Da ist es wieder durcheinander ...
//Unsichtbare Tabs übergehen
Unsichtbar := 0; for I := 0 to Der_TabIndex do begin If PageControl.Pages[I].TabVisible = FALSE then begin Unsichtbar := Unsichtbar + 1; end; end; Der_TabIndex := Der_TabIndex + Unsichtbar; Vielleicht kann jemand das Konstrukt dort oben dementsprechend anpassen ... |
Re: TabVisible -> Bei selber zeichnen
Hat da keiner eine Lösung ???
|
Re: TabVisible -> Bei selber zeichnen
Für diese Lösung habe ich nun 2 Tage gebraucht :(
Diese kommt an den Anfnag der Procedure, welche am Anfang dieses Themas dargestellt wurde.
Delphi-Quellcode:
Bessere Lösungen gibt es bestimmt. Vielleicht gibt es hier ja welche die Lust am optimieren haben.
var
I, Unsichtbar, Ende, Anpassung: Integer; //Unsichtbare Tabs übergehen Unsichtbar := 0; Ende := 0; Anpassung := 0; //Bis zum aktuellen TabIndex, die unsichtbaren finden for I := 0 to Der_TabIndex do begin if PageControl.Pages[I].TabVisible = FALSE then begin Anpassung := Anpassung + 1; end; end; //Nächsten sichtbaren nach aktuellem Tab (mit Anpassung der unsichtbaren) ermitteln for I := (Der_TabIndex + Anpassung) to PageControl.PageCount - 1 do begin if PageControl.Pages[I].TabVisible = TRUE then begin Ende := I; break; end; end; //Alle unsichtbare in dem Bereich bis zum nächsten sichtbaren ermitteln (Verschiebung nach links) for I := 0 to (Ende - 1) do begin if PageControl.Pages[I].TabVisible = FALSE then begin Unsichtbar := Unsichtbar + 1; end; end; If Unsichtbar > 0 then Der_TabIndex := Der_TabIndex + Unsichtbar; end; Die Lösung dort oben setzt den TabIndex immer an die richtige Stelle, egal welche Tabs ausgeblendet wurden. Gruss Holger |
Re: TabVisible -> Bei selber zeichnen
Hai Holger,
bitte unterlasse es doch deine Beiträge ständig "zu pushen". Du bist lange genug in der Delphi-PRAXiS um unsere Regeln zu kennen und müsstest auch wissen wie Du einen eigenen Beitrag editieren kannst. |
Re: TabVisible -> Bei selber zeichnen
OK, wusste ich jetzt noch nicht. Mein Fehler. Hätte genauer die Regeln lesen sollen.
Wird denn auch ein nacheditierter Beitrag wieder als aktuell in die Liste gestellt ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz