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]