|
| Flytte form med MouseDown/MouseMove hændel~ Fra : Lars Hundebøl |
Dato : 13-08-01 22:06 |
|
Hej NG.
Jeg har lavet en form hvor jeg har sat borderstyle := bsNone. Denne form
(vindue) til jeg gerne have muligheden for at flytte med musen, så derfor
har jeg lavet et billede som fylder hele formen med nedenstående hændelser.
Problemet er at det kommer til at se ondsvagt ud. Når jeg holder musen nede
og flytter den samtidig, flytter formen/vinduet også med, men den flytter
først i et stort ryk, hvorefter cursoren er placeret i øverste venstre
hjørne.
Kan dette undgås?!
okMove er en Global variable.
procedure TformMain.image1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
okMove := True;
end;
procedure TformMain.image1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
okMove := False;
end;
procedure TformMain.image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
P: TPoint;
begin
if okMove = True then
begin
GetCursorPos(P);
formMain.Top := P.Y;
formMain.Left := P.X;
end;
end;
Håber I kan hjælpe mig med mit lille problem,
Med venlig hilsen
Lars Hundebøl
--
<citat>
He who is not courageous enough to take risks will accomplish nothing in
life.
- Muhammad Ali
</citat>
| |
Rasmus Klitgaard-Nie~ (14-08-2001)
| Kommentar Fra : Rasmus Klitgaard-Nie~ |
Dato : 14-08-01 00:10 |
|
"Lars Hundebøl" wrote:
>
> Hej NG.
>
> Jeg har lavet en form hvor jeg har sat borderstyle := bsNone. Denne form
> (vindue) til jeg gerne have muligheden for at flytte med musen, så derfor
> har jeg lavet et billede som fylder hele formen med nedenstående hændelser.
>
> Problemet er at det kommer til at se ondsvagt ud. Når jeg holder musen nede
> og flytter den samtidig, flytter formen/vinduet også med, men den flytter
> først i et stort ryk, hvorefter cursoren er placeret i øverste venstre
> hjørne.
>
> Kan dette undgås?!
>
Der er en "standard" metode at gøre det på, lav en MouseDown event og
lav den til:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var mp:TPoint;
const
SC_DragMove = $F012;
begin
ReleaseCapture;
Self.perform(WM_SysCommand, SC_DragMove,0);
end;
(det virker også ved f.eks et TPanel, her skal det bare være Parent
istedet for Self)
--
>o ********* PINKY! aka. Rasmus Klitgaard-Nielsen *********
<()> **** Mad Programmer - Commodore Freak - ABP regular ****
^^ "Can't sing. Can't dance. Can handle a sword a little."
-- Victor's resume (Terry Pratchett, Moving Pictures)
| |
Bent Pedersen (24-08-2001)
| Kommentar Fra : Bent Pedersen |
Dato : 24-08-01 11:30 |
|
Hej,
In article <3B785E38.CACC3847@cs.auc.dk>, Rasmus Klitgaard-Nielsen says...
>
>"Lars Hundebøl" wrote:
>>
>Der er en "standard" metode at gøre det på, lav en MouseDown event og
>lav den til:
>
>procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
> Shift: TShiftState; X, Y: Integer);
>var mp:TPoint;
>
>const
> SC_DragMove = $F012;
>begin
> ReleaseCapture;
> Self.perform(WM_SysCommand, SC_DragMove,0);
>end;
>
Her er endnu et bud, som også virker fint:
I formens public tilføjes:
{ Public declarations }
procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest; end;
og her er koden så:
procedure TMyForm.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited; { call the inherited message handler }
if M.Result = htClient then { is the click in the client area? }
M.Result := htCaption; { if so, make Windows think it's }
{ on the caption bar. }
end;
/Bent
| |
|
|