Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi FesterPositionen werden nicht richtig gesetzt (https://www.delphipraxis.net/188353-festerpositionen-werden-nicht-richtig-gesetzt.html)

apm 23. Feb 2016 14:43

FesterPositionen werden nicht richtig gesetzt
 
Hallo!
Ich hab ein Problem mit der Positionierung von Fenster.

Ich möchte, dass wenn einee Form geöffnet wird (ShowModal), diese zentriert zu der vorhergehenden Form angezeigt wird. Sollte dabei das Fester aus dem Sichtbereich des Monitos laufen soll die Position korrigiert werden.

Die Reihenfolge in der die Forms geöffnet werden können ist durch das Programm selbst nicht immer gleich. Das heißt, dass ein Fenster unterschiedliche Vorgänger haben kann.

Ich hab mir eine Procedure gebaut welche immer das anzuzeigende Objekt und dessen Vorgänger betrachtet.
Delphi-Quellcode:
procedure proc_FormWindowPosition(obj_Open, obj_Parent: TWinControl);
begin
  with obj_Open do
  begin
    Left := (obj_Parent.Left + (obj_Parent.Width div 2)) - (Width div 2);
    Top := (obj_Parent.Top + (obj_Parent.Height div 2)) - (Height div 2);

    if Top < Screen.MonitorFromWindow(Handle).Top then
      Top := Screen.MonitorFromWindow(Handle).Top;

    if Left + Width > Screen.MonitorFromWindow(Handle).Width - 10 then
      Left := Screen.MonitorFromWindow(Handle).Width - Width;

    if Left < 0 then
      Left := 0;
  end;
end;
Die Funktion macht auch das was sie soll. Aber nicht beim ersten öffnen eines Fensters.

Sprich: Sofern das erste Fenster was geönnet wird komplett im Sichtbereich liegt, werden die Nachfolgenden Fenster sofern benötigt in der Anzeige korrigiert.
Ist das erste Fenster allerdings gleich nicht mehr richtig auf dem Monitor wird nichts mehr korrigiert.

Die Funktion wird immer im OnShow aufgerufen.
Alle Fenster haben die Position poMainFormCenter, was aber egal ist durch die genannte Procedure.

Anderweitig wird nichts an den Forms geändert (Positionen ändern, vor verschieben schützen, oder dergleichen).
Mich wundert auch, dass die Anweisungen auch beim ersten Mal richtig angenommen werden, aber in der Ansicht selbst dahingehend nicht das richtige passiert.

Hat jemand eine Idee warum sich das so verhalten könnte?

mfg

apm 23. Feb 2016 15:07

AW: FesterPositionen werden nicht richtig gesetzt
 
Ich habe gerade noch ein wenig dran rum gespielt.
Und wenn ich die Position des Fensters in der Enwicklungsumgebung auf poDefault umstelle geht es gleich.

Kann mir das jemand erklären warum meine Anweisung bei poMainFormCenter beim ersten Aufruf nicht korrekt umgesetzt wird, obwohl die Anweisungen angenommen werden. (Mit Haltepunkten kontrolliert.)

baumina 23. Feb 2016 15:21

AW: FesterPositionen werden nicht richtig gesetzt
 
Laut Forms.pas wird zuerst OnShow aufgerufen und erst danach die Formularposition gesetzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr.

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