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.
コントロールをドラッグして移動する
コメントをどうぞ