Die Appbars habe ich probiert. Dabei entstünde leider das Problem, das ja auch andere Anwendungrn nicht mehr über die Mainform kämen.
Im Falle der TMessage krieg ich auf die Schnelle nicht ganz rausgefitzt, wie ich den lParam sauber zu nem TRect bzw Pointer auf ein TRect umgewandelt bekomme.
Also fuhrwerke ich jetzt im OnCanResize herum.
Bislang habe ich das hier:
Delphi-Quellcode:
var
workArea : TRect;
I: Integer;
begin
Resize := True;
if (FormMain.WindowState = wsMaximized) and
(Self.Monitor = FormMain.Monitor) then
begin
workArea := Screen.WorkAreaRect;
workArea.Top := workArea.Top + FormMain.Height - 8;
workArea.Left := 0;
if Screen.MonitorCount >1 then
begin
workArea.Width := 0;
for I := 0 to screen.MonitorCount -1 do
workArea.Width := workArea.Width + Screen.Monitors[I].Width;
end;
Resize := (Mouse.CursorPos.Y >= workArea.Top) or (Self.WindowState = wsMaximized);
end;
Die Definition der workArea liegt nur zu Demozwecken in der Funktion. Wenn ich das Ok für das Gesammtverhalten der Oberfläche bekomme will ich die workArea auslagern.
Wenn ich jetzt versuche über die Mainform drünber zu resizen wird die Form stattdessen darübergeschoben. Auch kein erwünschtes Verhalten.
Auch noch problematisch (zumindest aus meiner Sicht) ist, dass wenn man nun auf einem sekundären Monitor unter Windows 7 die Form an die Oberkante zu resizen, kein automatisches Resize über die gesammte Monitorhöhe erfolgt. Ich kann mir nicht vorstellen, dass das beim Endanwender besonders gut ankommt.
Wenn ich's noch zusätzlich damit versuche:
Delphi-Quellcode:
if Mouse.CursorPos.Y <= workArea.Top then
Self.Top := workArea.Top;
Flackert das ganze nur und wird trotzdem weiter gezogen.