Weiß nicht genau ... frühestens im 10.2 oder vielleicht erst 11.0.
irgendwo zwischen XE und 10.4
In
DFM wird ja "inzwischen" normal ClientWidth/ClientHeight gespeichert,
aber abhängig von anderen Property wird stattdessen Width/Height gespeichert (was ich teilweise für total schwachsinnig halte).
Auch andere Property haben solche abweichungen.
Und da Emba manchmal Probleme hatte, im Create auf das ClientWidth/ClientHeight zuzugreifen (
Exception), wird das in einer Variable gespeichert, welcher erst im AfterConstruction angewendet wird.
Wird aber nach ClientWidth etwas an Width zugewiesen, dann wird jenes somit vom ClientWidth wieder "falsch" überschrieben.
Lösung war einfach im Width ein FClientWidth:=0; und fertig, aber neeeeeeeeeeee.
https://quality.embarcadero.com/browse/RSP-33368
.
https://quality.embarcadero.com/browse/RSP-29378
https://quality.embarcadero.com/browse/RSP-36016
...
Im Programm kann man sich da problemlos in seine FormKlasse oder einen Vorfahren die Setter überschreiben und es reparieren,
aber im FormDesigner kommt man nur per Hook dran. (bei uns sind deswegen zusammen mehrere Wochen an Arbeitszeit draufgegangen, für etwas, das Emba hätte mit zwei Zeilen Code lösen können)
Zitat:
Dafür ist nicht zwingend ein Hook notwendig
Das sieht bei Formvererbung anders aus, aber auch ohne schon.
Wenn du das dort, an dieser Stelle, änderst, dann wird/kann kann es passieren, dass OnCreate doppelt ausgeführt wird, im alten Delphi.
Im Constructor, da der den Wert aus
DFM beachtet wird, dann schreibt Loaded es um und AfterConstruction sieht den neuen Wert und macht es nochmal.
War mir vor kurzem einmal aufgefallen, da im OnCreate eine TComponent erstellt wurde und es dann hieß "Name gibt es schon *peng*".