Einzelnen Beitrag anzeigen

apm

Registriert seit: 22. Nov 2010
28 Beiträge
 
#1

FesterPositionen werden nicht richtig gesetzt

  Alt 23. Feb 2016, 14:43
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
  Mit Zitat antworten Zitat