Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   TForm.Height vs. ClientHeight (https://www.delphipraxis.net/207137-tform-height-vs-clientheight.html)

Rolf Frei 20. Jun 2022 14:59

AW: TForm.Height vs. ClientHeight
 
Lies bitte nochmals meine Nachricht! Setze AutoScroll im Design auf FALSE und im OnCreate der Form schreibst du "AutoScroll := True;" und dein Probem ist 99% sicher gelöst. Deine Kunden können so nachwievor die Autoscroll Funktion nutzen und deine Form wird richtig geladen mit den CcientXY Angaben. Wenn AutoScroll True ist, wenn du die Form speicherst, hast du die falschen Höhen und Breiten und lädst dann die Form.Height/Width und nicht ClientHeight/ClientWidth.

Wie gesagt mache ich das genau so bei allen meinen Formen, die AutoScroll nutzen sollen. Das "komische/falsche" Verhalten besteht seit Anfang an und wurde leider nie angepasst. Habe das schon vor 20 Jahren als Bug gemeldet, aber angepasst wurde das bis Heute nicht.

himitsu 20. Jun 2022 16:04

AW: TForm.Height vs. ClientHeight
 
Ich hatte den ganzen Mist in hunderten Forms bereits von den DFMs ins OnCreate geschoben.

Aber Chäffe will dass so nicht, weil dann die Bearbeitung im FormDesinger das Scrollen dann noch nicht hat und somit die Form dort abgeschnitten wird.

Das Problem wäre auch ganz einfach zu lösen, aber eben nur zur Laufzeit,
aber nicht im FormDesigner. (der denn die Form schrottet, sobald man sie einmal in der IDE lädt+speichert)

Nur dass sich Emba einfach weigert da die zwei Zeilen aufzunehmen
und den Bug zu beheben.
Wie gesagt, es muß einfach nur beim Zuweisen von Width das FClientWidth gelöscht werden.
Delphi-Quellcode:
type
  TFormAccess = class(TForm);

  TMyForm = class(...)
    ...
  protected
    //procedure SetWidth(Value: Integer); override; // doesn't work because it's not virtual
    //procedure SetHeight(Value: Integer); override;
    procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  end;

procedure TMyForm.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
  if Width <> AWidth then
    {TFormAccess(Self).}FClientWidth := 0;
  if Height <> AHeight then
    {TFormAccess(Self).}FClientHeight := 0;
  inherited;
end;
Stattdessen hat jetzt Kollege einen 1500-Zeilen-Hook-Unit geschrieben, welche Form-Klassen in der IDE registriert und dort die Setter überschreibt. :cyclops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz