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;
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.