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

cs_orelien 137 Messages postés dimanche 7 juillet 2002Date d'inscription 11 janvier 2009 Dernière intervention - 7 mars 2004 à 17:03 - Dernière réponse : yoghisan 221 Messages postés samedi 10 mai 2003Date d'inscription 2 juin 2005 Dernière intervention
- 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
yoghisan 221 Messages postés samedi 10 mai 2003Date d'inscription 2 juin 2005 Dernière intervention - 7 mars 2004 à 21:53
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.

Merci yoghisan 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 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.