⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 resize buttom
💻 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 + -