| Autor |
Beitrag |
mb
      
Beiträge: 185
|
Verfasst: So 09.03.03 22:34
Hallo!
Habe ein merkwürdiges Problem, aus dem ich nicht schlau werde:
Auf einer ("vollgepackten") Form ist u.a. ein PageControl mit vielen Labels auf vielen TabPages...
Nach dem Programmstart sind ab und zu einige Labels nicht sichtbar. Dies passiert manchmal auch, wenn ich während einer Programmlauf-Phase die Tabs wechsle... Sie werden dann nicht mehr sichtbar. Dummerweise sind es irgendwie immer unterschiedliche Labels, nicht die gleichen - manchmal wird auch alles korrekt angezeigt.
Unsichtbar werden nur TLabels, keine anderen Komponenten. Das PageControl wird im XP-Design angezeigt, die Labels werden transparent (Hintergrund) gezeichnet, keine sontigen besonderen Einstellungen.
Hat jemand da vielleicht von Euch eine Idee ??
Ich habe folgende, bei der ich auch einen Tipp gebrauchen könnte: Wenn es gar nicht anders geht, müsste ich immer beim wechseln einer Page aus dem PageControl alle Komponenten auf der Page neu zeichnen, oder alle Komponenten auf der Form.
Wie erreiche ich das? Mit Form1.Update oder Form1.Redraw geht es jedenfalls nicht, also muss ich wahrscheinlich in einer for-Schleife alle Komponenten einzeln neu zeichnen, oder? ...oder alle TLabels? ... Wie macht ich das am geschicktesten???
_________________ Gruß,
MB
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 09.03.03 23:28
Zu dem Problem an sich habe ich keine Idee, allerdings habe ich eine Idee zu Deiner Idee!
Um alle Labels mit einer Schleife zu durchlaufen, kannst Du das so machen, wenn Du keine Namen vergeben hast, die irgendwie zusammenhängen.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| VAR i : INTEGER; my_label : TLabel; begin for i:=0 TO Form1.ComponentCount-1 DO if Form1.Components[i] is TLabel then begin my_label:=TLabel(Form1.Components[i]); //hier kannst Du jetzt alles mit dem Label machen, was Du willst end; end; |
Wenn DU aber Namen wie Label1, Label2, usw. hast, dann geht es noch besser mit:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| VAR i,anzahl_labels : INTEGER; my_label : TLabel; begin for i:=1 TO anzahl_labels DO if Form1.FindComponent('label'+IntToStr(i)) is TLabel then begin my_label:=TLabel(Form1.FindComponent('label'+IntToStr(i))); //hier kannst Du jetzt alles mit dem Label machen, was Du willst end; end; |
Hoffe, ich konnte Dir damit ein bisschen helfen, auch wenn ich Dein eigentliches Problem nicht lösen kann.
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
mb 
      
Beiträge: 185
|
Verfasst: So 09.03.03 23:34
Danke erst mal!
Das werd ich mal versuchen. Namen haben die Labels natürlich, allerdings "vernünftige", d.h. nicht alle mit gleichem Präfix, wie "label", o.ä., da ich mir sonst im Code nicht merken könnte, was was ist - sind eben wirklich viele Labels, nicht nur 20, 30, ... 
_________________ Gruß,
MB
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mo 10.03.03 11:02
| mb hat folgendes geschrieben: | | Unsichtbar werden nur TLabels, keine anderen Komponenten. Das PageControl wird im XP-Design angezeigt, die Labels werden transparent (Hintergrund) gezeichnet, keine sontigen besonderen Einstellungen. |
Vielleicht liegt es ja auch daran. Entferne doch mal den Code für das XP-Design und den Code für das Transparente.
Gruß
TINO
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 10.03.03 11:15
| Zitat: | | und den Code für das Transparente. |
Ist das nicht nur eine Eigenschaft von TLabel?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
mb 
      
Beiträge: 185
|
Verfasst: Mo 10.03.03 13:04
| Zitat: | | Ist das nicht nur eine Eigenschaft von TLabel? |
Ja, das ist nur eine Eigenschaft. Und TLabel ist eine ziemlich primitive Standard-Komponente ... gerade daraus werde ich ja auch nicht schlau.
Ich habe es nun auch ohne XP-Design probiert: leider der gleiche Effekt.
Und ich habe noch etwas fest gestellt: Labels, die in einer GroupBox platziert sind, werden nicht / nie unsichtbar, nur solche, die direkt auf der PageControl platziert sind - komisch, wenn ihr mich fragt. Ich habe dazu absolut keine Idee.... 
_________________ Gruß,
MB
|
|
Böser Borstel
      
Beiträge: 154
|
Verfasst: Do 13.03.03 13:14
Titel: neu einfügen
schneide mal alle gewünschten komponenten aus
mit shift kannst du alle markieren
mit string + x ausschneiden
tabsheet anklicken
mit string v einfügen
compilieren
was passiert dann?
|
|
mb 
      
Beiträge: 185
|
Verfasst: Do 13.03.03 18:30
Danke für die Tipps erst mal !
Ich habe nun noch etwas weiter an dem Projekt gearbeitet und dieses Problem zunächst vernachlässigt...
Nun scheint das Problem behoben zu sein. Komisch. Das einzige was ich mir vorstellen kann, ist dass eine kleine visuelle Komponente zuständig ist, die mit OwnerDraw arbeitet und selbst aus einem und über ein Bitmap (aus RES-File) zeichnet. Diese hatte ich wärend meiner Arbeit dann doch verworfen . . . Es scheint, dass das Problem seit dem Entfernen genau dieser Komponente nicht mehr existiert (auch wenn ich mir das nicht genau erklären kann, da diese Komponente nur auf einem TabSheet war und absolut nix mal TLabel zu tun hat.)
Na ja... Problem scheint gelöst bzw besser: beseitigt.
_________________ Gruß,
MB
|
|
|