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