unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants, Winapi.WinSock, Winapi.ShellAPI,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.StdCtrls, FMX.Media, FMX.Menus, FMX.ListBox,
FMX.Objects, FMX.ExtCtrls,
FMX.Layouts, FMX.Memo, Winapi.Windows, FMX.Platform, System.ImageList,
FMX.ImgList, FMX.ListView.Types, FMX.ListView, FMX.Edit, FMX.Ani, registry,
ShlObj, System.Generics.Collections, FMX.Presentation.Style,
System.Rtti, FMX.Grid, Winapi.Tlhelp32, FMX.Grid.Style, FMX.ScrollBox,IdHTTP;
type
all = record
SettingStream: TObjectList<TControl>; // сам объект
TypeName: TstringList;
// тип объекта для создания (TButton, Timage и так далее)
ActionList: TstringList; // закрепленные за объектом действия
PropertList: TstringList; // дополнительные свойства объекта
end;
type
objChange = record
Indx: integer; // индекс объекта относительно списка
Prorep: string; // тип объекта для создания (TButton, Timage и так далее)
Names: string; // имя компонента
end;
..................
procedure ControlClick(Sender: TObject);
procedure ControlMouseMoveOnlyResize(Sender: TObject; Shift: TShiftState;
X, Y: Single);
procedure ControlMouseMoveNoResize(Sender: TObject; Shift: TShiftState;
X, Y: Single);
procedure ControlMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Single);
procedure ControlMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Single);
procedure ControlMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Single);
procedure MyDragDrop(Sender: TObject; const Data: TDragObject;
const Point: TPointF);
procedure MyDragOver(Sender: TObject; const Data: TDragObject;
const Point: TPointF; var Operation: TDragOperation);
procedure MyResize(Sender: TObject);
......................
procedure TForm1.ControlMouseMoveOnlyResize(Sender: TObject; Shift: TShiftState;
X, Y: Single);
const
minWidth = 20;
minHeight = 20;
var
newPos: TPoint;
frmPoint: TPointF;
h: integer;
begin
Form1.ComponentLastView := TControl(Sender).ComponentIndex;
// последний компонент над котором была мышь
if inReposition then
begin
// if ((Sender) is Tbutton) or ((Sender) is TLabel) or ((Sender) is TPanel) then begin
GetCursorPos(newPos);
Form1.ChangeFormIndex := true;
// были изменения в форме
if ssShift in Shift then
begin // resize
TControl(Sender).Cursor := crSizeNWSE;
if X > minWidth then
(Sender as TControl).Width := X;
if Y > minHeight then
(Sender as TControl).Height := Y;
// обводку даем
if Form1.Profiles.SettingStream.Count > 0 then
begin
Form1.Rectangle1.Parent := TControl(Sender).Parent;
Form1.Rectangle1.Position.X := TControl(Sender).Position.X - 3;
Form1.Rectangle1.Position.Y := TControl(Sender).Position.Y - 3;
Form1.Rectangle1.Width := TControl(Sender).Width + 6;
Form1.Rectangle1.Height := TControl(Sender).Height + 6;
// угол поворота для обводки
if (Sender is TImage) then
begin
Form1.Rectangle1.RotationAngle := TImage(Sender).RotationAngle;
end;
if (Sender is TLabel) then
begin
Form1.Rectangle1.RotationAngle := TLabel(Sender).RotationAngle;
end;
if (Sender is TButton) then
begin
Form1.Rectangle1.RotationAngle := TButton(Sender).RotationAngle;
end;
if (Sender is TSwitch) then
begin
Form1.Rectangle1.RotationAngle := TSwitch(Sender).RotationAngle;
end;
if (Sender is TTrackBar) then
begin
Form1.Rectangle1.RotationAngle := TTrackBar(Sender).RotationAngle;
end;
if (Sender is TPanel) then
begin
Form1.Rectangle1.RotationAngle := TPanel(Sender).RotationAngle;
end;
// угол поворота для обводки
Form1.Rectangle1.BringToFront;
Form1.Rectangle1.BringToFront;
Form1.Rectangle1.BringToFront;
Form1.Rectangle1.BringToFront;
end;
// обводку даем
ViewObjectInspector(TControl(Sender).ComponentIndex);
end;
end;
end; (* ControlMouseMoveOnlyResize *)
procedure TForm1.ControlMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Single);
begin
if inReposition then
begin
TControl(Sender).Cursor := crDefault;
(Sender as TControl).Root.Captured := nil;
inReposition := false;
end;
end;
..................................
честно сказать теряюсь какую часть выложить сюда и как отловить вообще где ухожу в ошибку.
задача изначально сделать приложение под windows и работать оно будет только в windows, но что бы было именно с использованием firemonkey.