![]() |
AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult
GetWindowPlacement ist auch in der Antwort #13 enthalten...
|
AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult
@DeddyH: Da hast Du natürlich recht!
|
AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult
Zitat:
Detlef hat das ja schon beantwortet. Doch das alleine ist es nicht, was mich an dem Beispiel etwas gestört hat. 1) Code-Optimierung: Sobald man mehrfach auf irgend etwas zugreift, in diesem Fall den Namen der INI-Datei, gehört sich dieser Teil ausgelagert. Hintergrund: Wenn man etwas ändert will/muss, dann macht man das an einer einzigen Stelle, und neben nicht an mehreren Stellen. Womöglich vergisst man dann was, und schon wundert man sich im Idealfall selber, im schlimmsten Fall der Kunde, dass irgendwas nicht funktioniert. Darum als Vorschlag mal die erste Optimierung:
Delphi-Quellcode:
2) Code-Design: Die Werte für Top, Left, Width und Height eines Formulares setzt man nicht einzeln. Dazu verwendet man
function GetIniFileName: string;
begin Result := IncludeTrailingBackslash(UserDatenDirectory)+'MeinIniName.ini'; end; procedure IniLesen; begin With TIniFile.Create(GetIniFileName) do try // Werte lesen finally Free; end; end; procedure IniSchreiben; begin With TIniFile.Create(GetIniFileName) do try // Werte schreiben finally Free; end; end;
Code:
Warum ist das besser? Wenn man im Formular z.B. einen OnResize-Event hat, der schlimmstenfalls eine Positions-Neuberechnung vieler Komponenten durchführt, dann wird dieser mehrfach ausgelöst, wenn man die Werte einzeln setzt. Wenn man aber SetBounds nimmt, wird der Event nur einmal ausgelöst.
SetBounds()
Beispiel um das nach zu vollziehen:
Delphi-Quellcode:
Das alles ist jetzt nichts großartiges, sondern eher das kleine 1x1 der Grundausbildung (ich hab noch keine UNI von innen gesehen und mir alles selber bei gebracht) aber wenn man schon Beispiele angibt, dann sollte man es meiner Meinung nach richtig machen und sich der Verantwortung bewusst sein: Hier lesen viele mit, die von den Beispielen etwas lernen wollen/sollen/müssen.
procedure TFrmTest.Button1Click(Sender: TObject);
begin // FormResize wird mehrfach ausgelöst Top := Top - 10; Left := Left - 10; Width := Width + 10; Height := Height + 10; end; procedure TFrmTest.Button2Click(Sender: TObject); begin // FormResize wird nur einmal ausgelöst Self.SetBounds(Left-10, Top-10, Width+10, Height+10); end; procedure TFrmTest.FormResize(Sender: TObject); begin Memo1.Lines.Add(DateTimeToStr(Now)+': FormResize wurde ausgelöst'); end; Das ist jetzt keine Meckerei, ich will auch niemandem zu nahe treten, also versteht mich nicht falsch. Mir ging es ja auch schon so. Ich hab Beispiele meines Codes veröffentlicht, und bin dafür gesteinigt worden. Aber nur dadurch lernt man dazu. Also positiv denken :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 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