AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TabVisible -> Bei selber zeichnen

Ein Thema von HolgerCW · begonnen am 1. Apr 2008 · letzter Beitrag vom 1. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#1

TabVisible -> Bei selber zeichnen

  Alt 1. Apr 2008, 12:32
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:
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;
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 ?

Gruss

Holger
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TabVisible -> Bei selber zeichnen

  Alt 1. Apr 2008, 12:35
man sollte so weit wie möglich auf globale Variablen verzichten.
Wie berechnest du X1, Y1?
Markus Kinzler
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#3

Re: TabVisible -> Bei selber zeichnen

  Alt 1. Apr 2008, 12:40
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 ?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: TabVisible -> Bei selber zeichnen

  Alt 1. Apr 2008, 12:52
Brauchst su so gar nicht, denn Rect liefert dir die Eck-Koordinaten des Tabs
Markus Kinzler
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#5

Re: TabVisible -> Bei selber zeichnen

  Alt 1. Apr 2008, 12:55
Ja, aber wie mache ich das denn nun ?

Komme da nicht weiter ...
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#6

Re: TabVisible -> Bei selber zeichnen

  Alt 1. Apr 2008, 13:12
Wenn ich dieses am Anfang der Procedure mache:

Delphi-Quellcode:
//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;
... funktioniert das auch wenn ich ein Tab Visible = FALSE setze. Bei zwei oder mehr Tabs aber nicht. Da ist es wieder durcheinander ...

Vielleicht kann jemand das Konstrukt dort oben dementsprechend anpassen ...
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#7

Re: TabVisible -> Bei selber zeichnen

  Alt 1. Apr 2008, 14:12
Hat da keiner eine Lösung ???
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#8

Re: TabVisible -> Bei selber zeichnen

  Alt 1. Apr 2008, 17:25
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:
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;
Bessere Lösungen gibt es bestimmt. Vielleicht gibt es hier ja welche die Lust am optimieren haben.

Die Lösung dort oben setzt den TabIndex immer an die richtige Stelle, egal welche Tabs ausgeblendet wurden.

Gruss

Holger
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#9

Re: TabVisible -> Bei selber zeichnen

  Alt 1. Apr 2008, 17:29
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#10

Re: TabVisible -> Bei selber zeichnen

  Alt 1. Apr 2008, 17:35
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 ?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 Uhr.
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