1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Math;
type
TResizeMode = (rmAll, rmWidth, rmHeight);
TForm1 = class(TForm)
Panel1: TPanel;
procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
private
ResizeActive :boolean;
ResizeRef :TPoint;
ResizeMode :TResizeMode;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ResizeActive := TRUE;
//L'intelligence est à mettre ici pour la sélection du point de référence
//Le point inverse à la poignée sélectionnée !
with TControl(Sender).BoundsRect do
//case MonTest of
// mtBottomRight : begin
ResizeRef := TopLeft;
ResizeMode := rmAll;
// end;
// mtRight : begin
// ResizeRef := Point(Left, 0);
// ResizeMode := rmWidth;
// end;
// ...
//end;
end;
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
Pt :TPoint;
R :TRect;
begin
if ResizeActive then
begin
R := TControl(Sender).BoundsRect;
//Coordonnées Parent
Pt := TControl(Sender).ClientToParent(Point(X,Y));
if ResizeMode in [rmAll, rmWidth] then
begin
R.Left := Min(Pt.X, ResizeRef.X);
R.Right := Max(Pt.X, ResizeRef.X);
end;
if ResizeMode in [rmAll, rmHeight] then
begin
R.Top := Min(Pt.Y, ResizeRef.Y);
R.Bottom := Max(Pt.Y, ResizeRef.Y);
end;
TControl(Sender).BoundsRect := R;
end;
end;
procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ResizeActive := FALSE;
end;
end. |
Partager