Einzelnen Beitrag anzeigen

S.Langhammer

Registriert seit: 28. Mai 2013
23 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Verhindern, das über eine Form "drüber-resized" wird

  Alt 14. Mai 2014, 08:23
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.
  Mit Zitat antworten Zitat