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.
5 avril 2021 à 15:19