Autor Beitrag
mb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 185



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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.
ausblenden 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 185



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 185



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 185



BeitragVerfasst: 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