Deplacement de la form

Résolu
Nicolas___
Messages postés
992
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
- 8 avril 2005 à 17:32
Nicolas___
Messages postés
992
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
- 7 janv. 2009 à 01:41
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin


if appuie then
begin
form1.Left:=x;
form1.Top:=y;
end;
end;
Pourquoi qd je deplace la form elle devient instable(Elle se coupe, elle scintille etc...)
J'ai pourtant bien mis au bebut du code :
form1.DoubleBuffered:=true(Ca n'a peut etre rien avoir mais je vois que qd il est question de scintillement on met ca et ca part par magie!!)
Merci pour votre aide
Nicolas

3 réponses

japee
Messages postés
1727
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
6 novembre 2021
8
8 avril 2005 à 18:46
Une autres approche...



Si on veut faire simple, sans l'API de Windows, et immédiatement compréhensible :



Déclaration de deux variables (globales) :



var LastX, LastY: Integer;



Pression sur bouton de la souris :



procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin // on stocke les valeurs de X et Y

LastX := X;

LastY := Y;

end;



Déplacement de la souris bouton gauche pressé :



procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

if ssLeft in Shift then // bouton gauche souris enfoncé...

begin

Top := Top + Y - LastY;

Left := Left + X - LastX;

end;

end;



Et en prime, le Form reste visible pendant le déplacement, quel que soit le paramétrage de Windows.



Bonne prog'
3
japee
Messages postés
1727
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
6 novembre 2021
8
8 avril 2005 à 18:22
X et Y, c'est la position du pointeur de la souris.

Tu mets Left et Top du Form à cette position tout au long du glissement de la souris !

Il a de quoi s'énerner un peu, ton Form, non ?



Une approche simple :



procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

if ssLeft in Shift then // si pression sur bouton gauche souris...

begin

ReleaseCapture;

Perform(WM_SYSCOMMAND, $F012, 0);

end;

end;



Bonne prog'
1
Nicolas___
Messages postés
992
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
2
7 janv. 2009 à 01:41
c'est très vieux , je suis retombé par hasard dessus et je n'avais même pas validé
honte à moi 
0