Neuberechnung TLabel.Height

Rund um die LCL und andere Komponenten
Antworten
Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Neuberechnung TLabel.Height

Beitrag von Eclipticon »

Hi,

ich weise zur Laufzeit einem TLabel (AutoSize := true; WordWrap := true; fixe Breite) eine neue, mehrzeilige Caption zu.

Da ich gerne einige Komponenten aufgrund der Groesse von TLabel gern neu positionieren wuerde, lese ich Height aus ... funktioniert aber nicht, der Wert aendert sich erst nach Form.Show. Ich frage mich daher, zu welchem Zeitpunkt Height neu berechnet wird (interessanterweise werden dabei aber weder TLabel.OnChangeBounds oder TLabel.OnResize aufgerufen) bzw. wie ich eine Neuberechnung gleich nach der Zuweisung der Caption erzwingen kann ...

Danke!

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: Neuberechnung TLabel.Height

Beitrag von DiBo33 »

bzw. wie ich eine Neuberechnung gleich nach der Zuweisung der Caption erzwingen kann
Versuchs mit

Code: Alles auswählen

TLabel.Invalidate;
Edit: oder schieb noch ein

Code: Alles auswählen

Application.ProcessMessages;
dazwischen.

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Neuberechnung TLabel.Height

Beitrag von Eclipticon »

Hi,

nein, leider helfen weder .Invalidate, noch .Update noch Application.ProcessMessages zusammen ... Mittlerweile weiss ich aber, dass es in allen Hauptforms funktioniert, in den selbst erzeugten nicht. Strange.

Andere Frage - wie kann es sein, dass bei folgendem Code

Code: Alles auswählen

procedure TMainForm.SomeButtonClick(Sender: TObject);
var
  ASomeForm: TSomeForm;
begin
  ASomeForm := TSomeForm.Create(self);
  ASomeForm.ShowModal;
  ASomeForm.Free;
end;
TSomeForm.OnShow nie TSomeForm.FormShow aufruft?!? ShowModal gegen Show zu ersetzen aendert nichts daran ...

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Neuberechnung TLabel.Height

Beitrag von MAC »

Wenn du

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
in den QuellCode schreibst und auf Button1 klickst , was passiert dann ?
Richtig, Nichts - Du musst im Objektinspektor das Button1.OnClick mit Button1Click verbinden (beim erstellen über Doppelklick passiert das automatisch... , nicht jedoch wenn du allein den Quellcode reinschreibst).

So, wie weisen wir das nun zu Laufzeit zu ?

Code: Alles auswählen

TSomeForm.OnShow := @TSomeForm.FormShow;
Der Code sieht dann wie folgt aus:

Code: Alles auswählen

procedure TMainForm.SomeButtonClick(Sender: TObject);
var
  ASomeForm: TSomeForm;
begin
  ASomeForm := TSomeForm.Create(self);
  ASomeForm.OnShow := @TSomeForm.FormShow; // Ich bin mir nicht ganz sicher ob es TSomeForm oder ASomeForm ist. notfalls ausprobieren...
  ASomeForm.ShowModal;
  ASomeForm.Free;
end;

Code: Alles auswählen

Signatur := nil;

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Neuberechnung TLabel.Height

Beitrag von Eclipticon »

Hi MAC,
MAC hat geschrieben:was passiert dann ?
Richtig, Nichts - Du musst im Objektinspektor das Button1.OnClick mit Button1Click verbinden (beim erstellen über Doppelklick passiert das automatisch... , nicht jedoch wenn du allein den Quellcode reinschreibst).
natuerlich is TSomeForm.OnShow im Objektinspektor mit FormShow verbunden ... ich hab mindestens schon 300 mal nachgesehen, und es steht noch immer da.
MAC hat geschrieben: So, wie weisen wir das nun zu Laufzeit zu ?

Code: Alles auswählen

TSomeForm.OnShow := @TSomeForm.FormShow;
Das hat mich aber auf die Idee gebracht, es mal mit einer Zuweisung zur Laufzeit auszuprobieren ... und siehe da, es funktioniert (mit der Adresse der Instanz).

Kann mir das bitte irgendjemand erklaeren!??

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Neuberechnung TLabel.Height

Beitrag von Socke »

MAC hat geschrieben: So, wie weisen wir das nun zu Laufzeit zu ?

Code: Alles auswählen

TSomeForm.OnShow := @TSomeForm.FormShow;
Knallts da nicht schon im Compiler? @TSomeForm.FormShow hat keinen gültige Instanz-Zeiger/bzw. ist im Allgemeinen eine Methode einer Klasse und nicht eines Objekts.

Code: Alles auswählen

ASomeForm.OnShow := @ASomeForm.FormShow;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Neuberechnung TLabel.Height

Beitrag von Eclipticon »

Socke hat geschrieben:Knallts da nicht schon im Compiler? @TSomeForm.FormShow hat keinen gültige Instanz-Zeiger/bzw. ist im Allgemeinen eine Methode einer Klasse und nicht eines Objekts.
Ja, da knallts schon beim Compilieren. Wie MAC geschrieben hat ... er ist sich nicht ganz sicher ob es TSomeForm oder ASomeForm ist.

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Neuberechnung TLabel.Height

Beitrag von Eclipticon »

Eclipticon hat geschrieben:Kann mir das bitte irgendjemand erklaeren!??
Nachtrag hierzu: Ich hatte bei dieser Form noch mehrere Probleme (z.B. Laufzeitfehler, dass OnClick etwas falsches zugewiesen wurde, wobei OnClick aber definitiv leer war). Daraufhin habe ich saemtliche *ppu, *o und *lrs geloescht ... und ploetzlich funktioniert alles wieder, auch FormShow wird wie erwartet aufgerufen.

Gibt's dafuer IRGENDEINE Erklaerung? Wird mir das oefter passieren?

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Neuberechnung TLabel.Height

Beitrag von Maik81ftl »

Eclipticon hat geschrieben:
Eclipticon hat geschrieben:Kann mir das bitte irgendjemand erklaeren!??
Nachtrag hierzu: Ich hatte bei dieser Form noch mehrere Probleme (z.B. Laufzeitfehler, dass OnClick etwas falsches zugewiesen wurde, wobei OnClick aber definitiv leer war). Daraufhin habe ich saemtliche *ppu, *o und *lrs geloescht ... und ploetzlich funktioniert alles wieder, auch FormShow wird wie erwartet aufgerufen.

Gibt's dafuer IRGENDEINE Erklaerung? Wird mir das oefter passieren?
Kenn ich zu genüge dieses Problem, Unter WIndows via Delphi und lazarus als auch unter OS 10.3 und Ubuntu. daher werd i mich als nächten daran machen, um diese Daten beim Systemstart zu killen...

wenn's läuft, post i des hier mal rein...
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Antworten