月別アーカイブ: 2014年7月

コントロールをドラッグして移動する


unit untMain;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
  System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs,
  FMX.StdCtrls, FMX.Objects, FMX.Layouts, FMX.ListBox, FMX.Edit;

type
  TForm1 = class(TForm)
    crcBase: TCircle;
    lotMain: TLayout;
    btnOK: TButton;
    recSquare0: TRectangle;
    recSquare2: TRectangle;
    recSquare1: TRectangle;
    recSquare3: TRectangle;
    recSquare4: TRectangle;
    btnInit: TButton;
    cmbTaskName: TComboBox;
    Label1: TLabel;
    edtClientName: TEdit;
    Label2: TLabel;
    Layout1: TLayout;
    Layout3: TLayout;
    Rectangle1: TRectangle;
    lblDebug: TLabel;

    procedure recSquare0MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Single);
    procedure recSquare0MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Single);
    procedure recSquare0MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Single);
    procedure btnInitClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure btnOKClick(Sender: TObject);
    procedure recSquare0MouseLeave(Sender: TObject);
  private
    FRectangle: array[0..4] of TRectangle;

    FIsMove: Boolean;
    FOldPosition: TPointF;

    procedure RePosition;
    { private 宣言 }
  public
    { public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}


procedure TForm1.FormCreate(Sender: TObject);
begin
  //
  FRectangle[0] := recSquare0;
  FRectangle[1] := recSquare1;
  FRectangle[2] := recSquare2;
  FRectangle[3] := recSquare3;
  FRectangle[4] := recSquare4;

end;

procedure TForm1.FormShow(Sender: TObject);
begin
  RePosition();
  FIsMove := False;
end;



procedure TForm1.FormDestroy(Sender: TObject);
begin
//
end;



procedure TForm1.FormResize(Sender: TObject);
begin
  RePosition();
end;





procedure TForm1.btnInitClick(Sender: TObject);
begin
//
end;

procedure TForm1.btnOKClick(Sender: TObject);
begin
//
end;


procedure TForm1.recSquare0MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single);
begin
//  lblDebug.Text := IntToStr(Round(X));

  FIsMove := True;

  FOldPosition.X := X;
  FOldPosition.Y  := Y;

end;

procedure TForm1.recSquare0MouseLeave(Sender: TObject);
begin
  FIsMove := False;
end;

procedure TForm1.recSquare0MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Single);
begin
  if FIsMove = False then Exit;

  TRectangle(Sender).Position.X := TControl(Sender).Position.X + X - FOldPosition.X;
  TRectangle(Sender).Position.Y  := TControl(Sender).Position.Y  + Y - FOldPosition.Y;

end;

procedure TForm1.recSquare0MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single);
begin
  FIsMove := False;

  TRectangle(Sender).Position.X := TControl(Sender).Position.X + X - FOldPosition.X;
  TRectangle(Sender).Position.Y  := TControl(Sender).Position.Y  + Y - FOldPosition.Y;

end;










procedure TForm1.RePosition();
var
  tmpPartsRect: TRectF;
  tmpMainRect: TRectF;
  tmpScreenWidth: Single;
  tmpScreenHeight: Single;


  tmpCircleSize: Single;

const
  LEFT_MARGIN_RATE = 0.25;

begin
  tmpScreenWidth  := lotMain.Width;
  tmpScreenHeight := lotMain.Height;

  //
  tmpPartsRect.Left   := 0;
  tmpPartsRect.Top    := 0;
  tmpPartsRect.Right  := lotMain.Width * LEFT_MARGIN_RATE;
  tmpPartsRect.Bottom := lotMain.Height;

  //
  tmpMainRect.Left   := lotMain.Width * LEFT_MARGIN_RATE;
  tmpMainRect.Top    := 0;
  tmpMainRect.Right  := lotMain.Width;
  tmpMainRect.Bottom := lotMain.Height;


  if tmpMainRect.Width > tmpMainRect.Height then
    tmpCircleSize := tmpMainRect.Height
  else
    tmpCircleSize := tmpMainRect.Width;

  //
  crcBase.Width  := tmpCircleSize;
  crcBase.Height := tmpCircleSize;

  //
  crcBase.Position.X := tmpMainRect.Left + (tmpMainRect.Width  - tmpCircleSize) / 2;
  crcBase.Position.Y := tmpMainRect.Top  + (tmpMainRect.Height - tmpCircleSize) / 2;

end;


end.