N'abend,
also ganz früher wurde mal Height in der
DFM gespeichert (D7), was natürlich Spaß machte, als jede Windows-Version unterschiedlich große Titel und Border hatte,
also wurde nun ClientHeight gespeichert (so steht es auch in unseren DFMs drin)
aber nun im 10.4.1/2 sind fast ALLE Forms nun kaputt, da die Größe nicht mehr stimmt.
Trotz nichtfunktionierendem DeklarationSuchen hatte ich mich nun durchgekämpft und was gefunden.
Delphi-Quellcode:
type
TControl = class(TComponent)
property ClientHeight: Integer read GetClientHeight write SetClientHeight stored False;
TCustomForm = class(TScrollingWinControl)
property ClientHeight write SetClientHeight stored IsClientSizeStored;
property ClientWidth write SetClientWidth stored IsClientSizeStored;
function TCustomForm.IsClientSizeStored: Boolean;
begin
Result := not IsFormSizeStored;
end;
function TCustomForm.IsFormSizeStored: Boolean;
begin
Result := AutoScroll or (HorzScrollBar.Range <> 0) or (VertScrollBar.Range <> 0);
end;
OK, um eine Minimalgröße mit Scrollbar zu bekommen, ist oftmals bei HorzScrollBar/VertScrollBar was eingetragen.
Somit würde bei diesen Fenstern ab nun Height statt ClientHeight gespeichert.
ABER, warum wird dann dort, wo noch ClientHeight in den DFM steht, das nicht geladen?
Weder in der
IDE, noch im kompilierten Programm stimmt die Größe (es dürfte etwa die Standardgröße der TForm sein).
Geladen müsste es eigentlich werden, denn in der
DFM steht es drin, also wird auch der Setter aufgerufen, aber scheinbar funktioniert hier was nicht und Delphi "ignoriert" es.
Und ja, wir kommen beim csReadingState durch.
Delphi-Quellcode:
procedure TCustomForm.SetClientHeight(Value: Integer);
begin
if csReadingState in ControlState then
begin
FClientHeight := Value;
ScalingFlags := ScalingFlags + [sfHeight];
end else inherited ClientHeight := Value;
end;