📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Shape1: TShape;
sz1: TLabel;
sz4: TLabel;
sz6: TLabel;
sz7: TLabel;
sz2: TLabel;
sz8: TLabel;
sz5: TLabel;
sz3: TLabel;
Button1: TButton;
Component1: TComponent;
procedure Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure sz8MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure sz8MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure sz8MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
procedure RectMoveToDst(ALeft, ATop, AWidth, AHeight: integer);
end;
procedure swapLeftTop(Asz1, Asz2: TLabel);
var
Form1: TForm1;
byszID: byte;
captured: Boolean;
Captured2: Boolean;
StartPoint, EndPoint: TPoint;
implementation
{$R *.dfm}
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
StartPoint := Point(X, Y);
Captured := true;
end;
end;
procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if captured then
begin
(sender as TShape).Left := (sender as TShape).Left + X -StartPoint.X;
(sender as TShape).Top := (sender as TShape).Top + Y -StartPoint.Y;
RectMoveToDst((sender as TShape).Left, (sender as TShape).Top, (sender as TShape).Width, (sender as TShape).Height);
end;
end;
procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Captured := false;
end;
procedure TForm1.sz8MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
byszID := (sender as TLabel).Tag;
StartPoint := Point(X, Y);
EndPoint := Point(X, Y);
Captured := true;
end;
end;
procedure TForm1.sz8MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if captured then
begin
case byszID of
1: begin
sz4.Left := sz4.Left + x - StartPoint.X;//(sender as TLabel).Left;
sz6.Left := sz4.Left;
sz2.Top := sz2.Top + y- StartPoint.Y;//(sender as TLabel).Top;
sz3.Top := sz2.Top;
sz2.Left := (sz3.Left + sz1.Left) div 2;
sz4.Top := (sz6.top + sz1.Top) div 2;
sz7.Left := sz2.Left;
sz5.Top := sz4.Top;
(sender as TLabel).Left := (sender as TLabel).Left + X - StartPoint.X;
(sender as TLabel).Top := (sender as TLabel).Top + Y - StartPoint.Y;
end;
2: begin
sz1.Top := sz1.Top + Y - StartPoint.Y;//(sender as TLabel).Top;
sz3.Top := sz1.Top;
sz4.Top := (sz6.Top + sz1.Top) div 2;
sz5.Top := sz4.Top;
(sender as TLabel).Left := (sender as TLabel).Left;
(sender as TLabel).Top := (sender as TLabel).Top + Y - StartPoint.Y;
end;
3: begin
sz5.Left := sz5.Left + x - StartPoint.X;//(sender as TLabel).Left;
sz8.Left := sz5.Left;
sz2.Top := sz2.Top + y- StartPoint.Y;//(sender as TLabel).Top;
sz1.Top := sz2.Top;
sz7.Left := (sz3.Left + sz1.Left) div 2;
sz5.Top := (sz8.top + sz1.Top) div 2;
sz2.Left := sz7.Left;
sz4.Top := sz5.Top;
(sender as TLabel).Left := (sender as TLabel).Left + X - StartPoint.X;
(sender as TLabel).Top := (sender as TLabel).Top + Y - StartPoint.Y;
end;
4: begin
sz1.Left := sz1.Left + x - StartPoint.X;//(sender as TLabel).Left;
sz6.Left := sz1.Left;
sz2.Left := (sz3.Left + sz1.Left) div 2;
sz7.Left := sz2.Left;
(sender as TLabel).Left := (sender as TLabel).Left + X - StartPoint.X;
(sender as TLabel).Top := (sender as TLabel).Top;
end;
5: begin
sz3.Left := sz3.Left + x - StartPoint.X;//(sender as TLabel).Left;
sz8.Left := sz3.Left;
sz2.Left := (sz3.Left + sz1.Left) div 2;
sz7.Left := sz2.Left;
(sender as TLabel).Left := (sender as TLabel).Left + X - StartPoint.X;
(sender as TLabel).Top := (sender as TLabel).Top;
end;
6: begin
sz4.Left := sz4.Left + x - StartPoint.X;//(sender as TLabel).Left;
sz1.Left := sz4.Left;
sz7.Top := sz7.Top + y- StartPoint.Y;//(sender as TLabel).Top;
sz8.Top := sz7.Top;
sz2.Left := (sz3.Left + sz1.Left) div 2;
sz4.Top := (sz6.top + sz1.Top) div 2;
sz7.Left := sz2.Left;
sz5.Top := sz4.Top;
(sender as TLabel).Left := (sender as TLabel).Left + X - StartPoint.X;
(sender as TLabel).Top := (sender as TLabel).Top + Y - StartPoint.Y;
end;
7: begin
sz6.Top := sz6.Top + y- StartPoint.Y;//(sender as TLabel).Top;
sz8.Top := sz6.Top;
sz4.Top := (sz6.Top + sz1.Top) div 2;
sz5.Top := sz4.Top;
(sender as TLabel).Left := (sender as TLabel).Left;
(sender as TLabel).Top := (sender as TLabel).Top + Y - StartPoint.Y;
end;
8: begin
sz3.Left := sz3.Left + x - StartPoint.X;//(sender as TLabel).Left;
sz5.Left := sz3.Left;
sz6.Top := sz6.Top + y- StartPoint.Y;//(sender as TLabel).Top;
sz7.Top := sz6.Top;
sz2.Left := (sz3.Left + sz1.Left) div 2;
sz4.Top := (sz6.Top + sz1.Top) div 2;//sz1.Top + (sz6.Top - sz1.Top) div 2;
sz5.Top := sz4.Top;
sz7.Left := sz2.Left;;
(sender as TLabel).Left := (sender as TLabel).Left + X - StartPoint.X;
(sender as TLabel).Top := (sender as TLabel).Top + Y - StartPoint.Y;
end;
end;
shape1.Left := sz1.Left + sz1.Width div 2;
shape1.Top := sz1.Top + sz1.Height div 2;
shape1.Width := sz8.Left - sz1.Left;
shape1.Height := sz8.Top - sz1.Top;
EndPoint := Point(X, Y);
end;
end;
procedure TForm1.sz8MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if sz8.Left < sz1.Left then
begin
if sz8.Top < sz1.Top then
begin
swapLeftTop(sz1, sz8);
swapLeftTop(sz2, sz7);
swapLeftTop(sz3, sz6);
swapLeftTop(sz4, sz5);
end else
begin
swapLeftTop(sz1, sz3);
swapLeftTop(sz4, sz5);
swapLeftTop(sz8, sz6);
end;
end else
begin
if sz8.Top < sz1.Top then
begin
swapLeftTop(sz1, sz6);
swapLeftTop(sz2, sz7);
swapLeftTop(sz8, sz3);
end;
end;
shape1.Left := sz1.Left + sz1.Width div 2;
shape1.Top := sz1.Top + sz1.Height div 2;
shape1.Width := sz8.Left - sz1.Left;
shape1.Height := sz8.Top - sz1.Top;
captured := false;
byszID := 0;
end;
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Captured := true;
startpoint := point(X, Y);
RectMoveToDst((sender as TButton).Left, (sender as TButton).Top,
(sender as TButton).Width, (sender as TButton).Height);
end;
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if captured then
begin
(sender as TButton).Left := (sender as TButton).Left + X -StartPoint.X;
(sender as TButton).Top := (sender as TButton).Top + Y -StartPoint.Y;
RectMoveToDst((sender as TButton).Left, (sender as TButton).Top, (sender as TButton).Width, (sender as TButton).Height);
end;
end;
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Captured := false;
end;
procedure TForm1.RectMoveToDst(ALeft, ATop, AWidth, AHeight: integer);
var dxy: integer;
begin
dxy := sz1.Width div 2;
sz1.Left := ALeft - dxy;
sz1.Top := ATop - dxy;
sz3.Left := ALeft + AWidth - dxy;
sz3.Top := ATop - dxy;
sz6.Left := ALeft - dxy;
sz6.Top := ATop + AHeight - dxy;
sz8.Left := ALeft + AWidth - dxy;
sz8.Top := ATop + AHeight - dxy;
sz2.Left := (sz1.Left + sz3.Left) div 2;
sz2.Top := ATop - dxy;
sz4.Left := sz1.Left;
sz4.Top := (sz1.Top + sz6.Top) div 2;
sz5.Left := sz3.Left;
sz5.Top := sz4.Top;
sz7.Left := sz2.Left;
sz7.Top := sz6.Top;
end;
procedure swapLeftTop(Asz1, Asz2: TLabel);
var
itmpLeft, itmpTop: integer;
begin
itmpLeft := Asz1.Left;
itmpTop := Asz1.Top;
Asz1.Left := Asz2.Left;
Asz1.Top := Asz2.Top;
Asz2.Left := itmpLeft;
Asz2.Top := itmpTop;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -