/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
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



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste