Ich nutze 2 Monitore und möchte dass die EXE immer mit der Position des letzten Beendens wieder startet. Also wenn die EXE zuvor auf dem Nebenmonitor lief, so muss die dort beim nächsten Start auch wieder erscheinen. Leider klappt das nicht so recht. Anbei mein Code:
Code: Alles auswählen
sl.LoadFromFileUTF8(sFileTable);
rcForm.Left := StrToIntDef(sl.Values['frmMain.Left'], Left);
rcForm.Top := StrToIntDef(sl.Values['frmMain.Top'], Top);
rcForm.Right := Max(480, StrToIntDef(sl.Values['frmMain.Width'], Width));
rcForm.Bottom := Max(240, StrToIntDef(sl.Values['frmMain.Height'], Height));
If Screen.MonitorCount > 1 Then
Begin
Mon := Screen.MonitorFromRect(rcForm);
End Else Begin
Mon := Screen.Monitors[0];
end;
rcMon := Mon.WorkareaRect;
if rcForm.Left < rcMon.Left then
rcForm.Left := rcMon.Left;
if rcForm.Top < rcMon.Top then
rcForm.Top := rcMon.Top;
if rcForm.Right > rcMon.Right - rcMon.Left then
rcForm.Right := rcMon.Right - rcMon.Left;
if rcForm.Bottom > rcMon.Bottom - rcMon.Top then
rcForm.Bottom := rcMon.Bottom - rcMon.Top;
if (rcForm.Left + rcForm.Right) > rcMon.Right then
rcForm.Left := rcMon.Right - rcForm.Right;
if (rcForm.Top + rcForm.Bottom) > rcMon.Bottom then
rcForm.Top := rcMon.Bottom - rcForm.Bottom;
SetBounds(rcForm.Left, rcForm.Top, rcForm.Right, rcForm.Bottom);
stWindowForm := TWindowState(StrToIntDef(sl.Values['frmMain.WindowState'], Ord(WindowState)));
WindowState := stWindowForm;
Zu Beginn wird die Variable rcForm.Left mit dem korrekten Wert 2700 Pixel geladen, der Wert wird auch mit SetBounds() übergeben, aber dennoch tut Lazarus die auf den ersten Monitor zeigen. Ich habe ansonsten so gut wie keine Infos mit Google gefunden, daher frage ich mal hier.
Weiß jemand wo ich den Fehler habe?
Oder muss ich dem Formular noch extra sagen, dass er es auf dem zweiten Monitor zeichnen soll?
Oder ist das ein Fall für den Bugtracker?
Grüße Markus.