![]() |
Form am Bildschirmrand andocken Problem
Hallo,
ich möchte meine Form am Bildschirmrand andocken. Dazu habe ich versucht es über WM_WINDOWPOSCHANGING hinzubekommen wie es bei ![]() Gruß Mazel |
Re: Form am Bildschirmrand andocken Problem
Hi,
zum Andocken an den Bildschirmrand reicht es eigentlich im OI "ScreenSnap" auf true zu stellen. Ich weiß aber nicht obs das bei Delphi 6 auch gibt. |
Re: Form am Bildschirmrand andocken Problem
Zitat:
Kann man aber nachholen per Komponente... siehe JVCL ( JvFormMagnet ) |
Re: Form am Bildschirmrand andocken Problem
Hi,
Es geht also nur über eine Komponente? Kann mir jemand einen Link anbieten, der zu dieser Komponente führt? Edit: Ich habe es gelöst. Ich brauchte lediglich inherited am Ende der Prozedur einfügen. Gruß Mazel |
Re: Form am Bildschirmrand andocken Problem
Zitat:
Die Komponente ist hier mit dabei: ![]() Ein Formsnap to Screen ohne Komponente geht so:
Delphi-Quellcode:
:stupid:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TMovingSide = wmsz_Left..wmsz_BottomRight; TMovingSides = set of TMovingSide; TWMMoving = record Msg: Cardinal; Side: TMovingSides; Rect: PRect; Result: Longint; end; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen } FDockable: boolean; FSnapArea: integer; DispLeft, DispTop, DispRight, DispBottom: Integer; procedure WMEnterSizeMove(var Message: TMessage); message WM_ENTERSIZEMOVE; procedure WMMoving(var Message: TWMMoving); message WM_MOVING; public { Public-Deklarationen } property Dockable: boolean read FDockable write FDockable; property SnapArea: integer read FSnapArea write FSnapArea; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin SnapArea := 30; Dockable := True; end; procedure TForm1.FormDestroy(Sender: TObject); begin end; procedure TForm1.WMEnterSizeMove(var Message: TMessage); begin if not Dockable then exit; DispLeft:=0; DispTop:=0; DispRight:=0; DispBottom:=0; end; procedure TForm1.WMMoving(var Message: TWMMoving); var OfsX, OfsY: Integer; r: TRect; begin if not Dockable then exit; SystemParametersInfo( SPI_GETWORKAREA, 0, @r, 0 ); with Message.Rect^ do begin if Abs(DispLeft + Left - r.Left) < SnapArea then begin OfsX:=r.Left-Left; DispLeft:=DispLeft + Left-r.Left; end else begin OfsX:=DispLeft; DispLeft:=0; end; if Abs(DispRight+Right-r.Right)<SnapArea then begin OfsX:=r.Right-Right; DispRight:=DispRight+Right-r.Right; end else begin OfsX:=OfsX+DispRight; DispRight:=0; end; if Abs(DispTop+Top-r.Top)<SnapArea then begin OfsY:=r.Top-Top; DispTop:=DispTop+Top-r.Top; end else begin OfsY:=DispTop; DispTop:=0; end; if Abs(DispBottom+Bottom-r.Bottom)<SnapArea then begin OfsY:=r.Bottom-Bottom; DispBottom:=DispBottom+Bottom-r.Bottom; end else begin OfsY:=OfsY+DispBottom; DispBottom:=0; end; end; OffsetRect(Message.Rect^,OfsX,OfsY); end; end. |
Re: Form am Bildschirmrand andocken Problem
Danke,
aber ich hatte so eine halbe Stunde später schon die Lösung mit inherited, das habe ich ans Ende der Procedure von WMWINDOWPOSCHANGING gesetzt und schon habe ich meine Minimalgröße wieder. Danke trotzdem für die Mühe. Gruß Mazel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz