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