![]() |
TCombobox -> Height verändert sich nach dem Create
Hier ein kleines Testprogramm zu einem Verhalten, welches ich nicht verstehe:
Delphi-Quellcode:
Wenn das Programm gestartet wird, dann steht in der Combobox der Wert 25.
procedure TForm1.FormCreate(Sender: TObject);
begin fCombobox:=TCombobox.create(Self); fCombobox.Parent := self; fCombobox.text := Inttostr(fCombobox.height); end; procedure TForm1.BitBtn1Click(Sender: TObject); begin fCombobox.text := Inttostr(fCombobox.height); end; Wenn ich danach den Button drücke, dann steht in der Combobox der Wert 21. Die Höhe der Combobox hat sich geändert. Warum? Kann das einer nachvollziehen, oder liegt es an meiner Delphi-Version. (Embarcadero® Delphi 10.2 Version 25.0.29039.2004 ) |
AW: TCombobox -> Height verändert sich nach dem Create
Die FontSize der ComboBox ist eine andere als die des Forms?
|
AW: TCombobox -> Height verändert sich nach dem Create
Zitat:
Fontsize habe ich der Combobox gar nicht zugewiesen. Und nach dem Create wird an der Combobox ja nichts mehr geändert. Zumindest nicht von mir. |
AW: TCombobox -> Height verändert sich nach dem Create
An font.size ändert sich übrigens nichts. Habe das Testprogramm mal kurz angepasst
Delphi-Quellcode:
In beiden Fällen wird 8 angezeigt.
procedure TForm1.FormCreate(Sender: TObject);
begin fCombobox:=TCombobox.create(Self); fCombobox.Parent := self; fCombobox.text := Inttostr(fCombobox.font.size); end; procedure TForm1.BitBtn1Click(Sender: TObject); begin fCombobox.text := Inttostr(fCombobox.font.size); end; |
AW: TCombobox -> Height verändert sich nach dem Create
Zitat:
Weil die Combobox eine fixe höhe hat. Wenn du hier also als bsp. 30 nimmst wird sich diese Automatisch auf die höhe von 21 setzen. Das ist nun mal so und nicht falsch. Also nehme die 21 und gut ist! Die höhe ist also abhängig vom gesetzten Font und die kannst du nicht ändern wenn der Fontsize 8 ist gruss |
AW: TCombobox -> Height verändert sich nach dem Create
Ja habs auch grad getestet, kann das Verhalten reproduzieren.
Die nächste Theorie: 25 ist die default Height einer TComboBox. Später wird die Height aufgrund der FontSize berechnet. In deinem FormCreate nachdem du die ComboBox erstellt hast (selbst nach dem Zuweisen des Parents) hat die ComboBox wahrscheinlich noch keine Windows Message erhalten und ist quasi noch nicht 100% initialisiert bzw. wurde noch nie gezeichnet. Nach dem Create kommt die Änderung des Parents durch und die ComboBox passt sich an ihr "Umfeld" an. |
AW: TCombobox -> Height verändert sich nach dem Create
Zitat:
gruss |
AW: TCombobox -> Height verändert sich nach dem Create
Zitat:
Das angegebene Beispiel ist ja nur minimal um den Fehler zu Beschreiben. In meinem tatsächlichen Fall möchte ich mehrere Comboboxen dynamisch erzeugen und untereinander anordnen. Wenn die Anordnung im OnCreate geschieht, habe ich eine andere Anordnung, als wenn ich die Anordnung später durchführe. |
AW: TCombobox -> Height verändert sich nach dem Create
Zitat:
FontName = Tahoma Fontsize = 8 weise der Combo den Font zu und deine Höhe ist 21. Die höhe kannst du NUR durch das setzen des Fonts beeinflussen. gruss |
AW: TCombobox -> Height verändert sich nach dem Create
Zitat:
Zitat:
|
AW: TCombobox -> Height verändert sich nach dem Create
Zitat:
gruss |
AW: TCombobox -> Height verändert sich nach dem Create
Zitat:
Delphi-Quellcode:
Ich habe im OnCreate den Font der Form zugewiesen. es bleibt aber im OnCreate bei 25. Erst wenn der Button gedrückt wird, dann erhalte ich 21. Zweischenzeitlich wird nichts geändert.
procedure TForm1.FormCreate(Sender: TObject);
begin fCombobox:=TCombobox.create(Self); fCombobox.Parent := self; fCombobox.Font := self.Font; fCombobox.text := Inttostr(fCombobox.height); end; procedure TForm1.BitBtn1Click(Sender: TObject); begin fCombobox.text := Inttostr(fCombobox.height); end; |
AW: TCombobox -> Height verändert sich nach dem Create
Zitat:
Einfach eine Form erzeugen. Doppelclick auf OnCreate. Die Zeilen aus meinem Code einfügen. Schalter drauf. Doppelcklick. Eine Zeile aus meinen Beispiel einfügen. Programm starten. In der Combobox steht 25. Schalter drücken. In der Combobox steht 21. Das ist definitiv ein unlogisches Verhalten. |
AW: TCombobox -> Height verändert sich nach dem Create
Habe noch mal weiter getestet. Egal welche Fontgröße ich zuweise, solange ich mich im OnCreate befinde, bleibt die Höhe der Combobox bei 25.
|
AW: TCombobox -> Height verändert sich nach dem Create
Zitat:
Delphi-Quellcode:
siehe shot
procedure TForm1.FormCreate(Sender: TObject);
begin ComboBox1 := TComboBox.Create(Self); ComboBox1.Parent := self; ComboBox1.Top := 10; ComboBox1.Left := 10; ComboBox1.Font := TFont.Create; ComboBox1.Font.Name := 'Tahoma'; ComboBox1.Font.Size := 8; ComboBox1.Height := 21; ComboBox1.Width := 200; ComboBox1.Text := Inttostr(ComboBox1.height); end; PS: Ohne Zuweisung der Höhe! siehe shot ClientRect gruss |
AW: TCombobox -> Height verändert sich nach dem Create
Zitat:
Ich will nicht selber die Höhe im OnCreate setzen. Bringt sowiso nichts, weil die Höhe der Combobox nach dem Create die korrekte Größe "21" besitzt. Warum sollte ich die Höhe selber setzen sollen? Ich will lediglich den korrekten Wert 21 auch im OnCreate auslesen können, damit ich die Comboboxen ordentlich anordnen kann. Wir reden aneinander vorbei. Aber OK. Danke für deine Hilfe. |
AW: TCombobox -> Height verändert sich nach dem Create
Zitat:
Siehe Shot ClientRect. 2 Beiträge höher Hier noch ein shot mit einem Font von 10 logischerweise ist dann die Combo 24 Pixel in der höhe. Man oooh man.. ok bin raus.. weil ich bewiesen habe das es funktioniert! gruss |
AW: TCombobox -> Height verändert sich nach dem Create
Halt. Ich dachte der Code im Anhang ist der gleiche, wie im Text, der als Delphicode angegeben ist.
Zitat:
Habe den Code im Pic mir noch mal angeschaut. Der ist anders. Die Sache mit
Delphi-Quellcode:
Funktioniert.
winapi.windows.GetClientRect(fCombobox.Handle, rc);
Prima. Danke dir für deine Mühe. Edit: Unsere beiden letzten Posts haben sich überschnitten. |
AW: TCombobox -> Height verändert sich nach dem Create
Zitat:
gruss |
AW: TCombobox -> Height verändert sich nach dem Create
Es genügt, wenn das Handle erzeugt wird:
Delphi-Quellcode:
fCombobox:=TCombobox.create(Self);
fCombobox.Parent := self; fCombobox.HandleNeeded; fCombobox.text := Inttostr(fCombobox.Height); |
AW: TCombobox -> Height verändert sich nach dem Create
Delphi-Quellcode:
fCombobox.HandleNeeded;
Gut kannte ich nicht ;) Arbeite ja auch nicht mit der VCL im Normalfall. :) Wenn es funktioniert warum nicht ;) gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz