Déplacer avec la souris un composant 'Tshape' [Résolu]

Messages postés
137
Date d'inscription
dimanche 7 juillet 2002
Dernière intervention
11 janvier 2009
- - Dernière réponse : yoghisan
Messages postés
221
Date d'inscription
samedi 10 mai 2003
Dernière intervention
2 juin 2005
- 7 mars 2004 à 21:53
Bonjour,

J'aimerais déplacer avec la souris un composant 'Tshape' à l'exécution.

Quelqu'un peut-il m'aider ?

J'ai tenté ceci mais en vain :

const SC_DragMove = $F014;
begin
ReleaseCapture;
TControl(Sender).Perform(WM_SysCommand, SC_DragMove, 0);
end;

Merci
Orélien.
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
221
Date d'inscription
samedi 10 mai 2003
Dernière intervention
2 juin 2005
3
Merci
Tu peux soit faire du drag and drop, il y a plein de truc ici

ou

soit faire un autogestion avec le OnMouseDown, le OnMouseMove et le OnMouseUp

Exemple
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Shape1: TShape; // A poser sur la Form1
    procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
    procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    x0,y0:Integer;
    Deplace:Boolean;
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  With Shape1 do begin
    OnMouseDown := Shape1MouseDown;
    OnMouseMove := Shape1MouseMove;
    OnMouseUp   := Shape1MouseUp;
  end;

  Form1.DoubleBuffered:=true; // Pour eviter le scintillement
  Deplace:=False;

end;

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Deplace:=True;
  x0:=x;
  y0:=y;
end;

procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
  If not (sender is TShape) then exit;
  If Deplace then with sender as TShape do begin
    Left := Left+(x-x0);
    Top  := Top +(y-y0);
  end;
end;

procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Deplace:=False;
end;

end.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Shape1: TShape; // A poser sur la Form1
    procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
    procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    x0,y0:Integer;
    Deplace:Boolean;
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  With Shape1 do begin
    OnMouseDown := Shape1MouseDown;
    OnMouseMove := Shape1MouseMove;
    OnMouseUp   := Shape1MouseUp;
  end;

  Form1.DoubleBuffered:=true; // Pour eviter le scintillement
  Deplace:=False;

end;

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Deplace:=True;
  x0:=x;
  y0:=y;
end;

procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
  If not (sender is TShape) then exit;
  If Deplace then with sender as TShape do begin
    Left := Left+(x-x0);
    Top  := Top +(y-y0);
  end;
end;

procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Deplace:=False;
end;

end.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de yoghisan

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.