Neuberechnung TLabel.Height
-
- 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
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!
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!
Re: Neuberechnung TLabel.Height
Versuchs mitbzw. wie ich eine Neuberechnung gleich nach der Zuweisung der Caption erzwingen kann
Code: Alles auswählen
TLabel.Invalidate;
Code: Alles auswählen
Application.ProcessMessages;
-
- 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
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
TSomeForm.OnShow nie TSomeForm.FormShow aufruft?!? ShowModal gegen Show zu ersetzen aendert nichts daran ...
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;
-
- 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
Wenn du
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 ?
Der Code sieht dann wie folgt aus:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
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;
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;
-
- 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
Hi MAC,
Kann mir das bitte irgendjemand erklaeren!??
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: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).
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).MAC hat geschrieben: So, wie weisen wir das nun zu Laufzeit zu ?
Code: Alles auswählen
TSomeForm.OnShow := @TSomeForm.FormShow;
Kann mir das bitte irgendjemand erklaeren!??
-
- 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
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.MAC hat geschrieben: So, wie weisen wir das nun zu Laufzeit zu ?
Code: Alles auswählen
TSomeForm.OnShow := @TSomeForm.FormShow;
Code: Alles auswählen
ASomeForm.OnShow := @ASomeForm.FormShow;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- 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
Ja, da knallts schon beim Compilieren. Wie MAC geschrieben hat ... er ist sich nicht ganz sicher ob es TSomeForm oder ASomeForm ist.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.
-
- 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
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.Eclipticon hat geschrieben:Kann mir das bitte irgendjemand erklaeren!??
Gibt's dafuer IRGENDEINE Erklaerung? Wird mir das oefter passieren?
-
- 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
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...Eclipticon hat geschrieben: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.Eclipticon hat geschrieben:Kann mir das bitte irgendjemand erklaeren!??
Gibt's dafuer IRGENDEINE Erklaerung? Wird mir das oefter passieren?
wenn's läuft, post i des hier mal rein...
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 

