Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#2

Re: Fenster an Bildschirmrand / Taskleiste andocken lassen

  Alt 29. Apr 2004, 20:25
Das Problem mit dem Code ist ein Desktop an dem mehrere Monitore angeschlossen sind.
Ich habe es eben mal Quick 'n dirty für Multi-Monitor-Kompatibilität umgeschrieben:
Es sollte IMHO auch noch unter den seltsamsten Monitorpositionen auf dem Desktop funktionieren.

Delphi-Quellcode:
Procedure TFormIrgendWas.WMWindowPosChanging(Var Message: TWMWINDOWPOSCHANGING);
Var
  MoniRect, DistRect: TRect;
Begin
  { Abmessungen des Monitors, auf dem sich das Fenster befindet }
  MoniRect := Screen.Monitors[Monitor.MonitorNum].WorkareaRect;

  With Message Do
    With DistRect Do
    Begin
      { Abweichungen vom Monitorrand }
      Top := WindowPos.Y - MoniRect.Top;
      Bottom := WindowPos.Y + Height - MoniRect.Bottom;
      Left := WindowPos.X - MoniRect.Left;
      Right := WindowPos.X + Width - MoniRect.Right;

      { Obere Fensterkante }
      If (Top <= SnapBuffer) And
         (Top >= -SnapBuffer) Then
        WindowPos.Y := MoniRect.Top
      { Untere Fensterkante }
      Else If (Bottom <= SnapBuffer) And
              (Bottom >= -SnapBuffer) Then
        WindowPos.Y := MoniRect.Bottom - Height;
      { Linke Fensterkante }
      If (Left <= SnapBuffer) And
         (Left >= -SnapBuffer) Then
        WindowPos.X := MoniRect.Left
      { Rechte Fensterkante }
      Else If (Right <= SnapBuffer) And
              (Right >= -SnapBuffer) Then
        WindowPos.X := MoniRect.Right - Width;
    End;
End;
Für alle die sich wundern warum ich einen Unterschied zwischen MonitorX rechts und MonitorY links mache -> zieht mal die Taskbar an die linke Seite des 2. Monitors und schaut wie sich das Fenster jetzt "anheftet".

[edit=Matze]Für die Code-Lib vorbereitet, Mfg, Matze[/edit]
  Mit Zitat antworten Zitat