我确实在末尾找到了一个:
https://forums.embarcadero.com/thread.jspa?messageID=447850
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Platform;
type
TForm1 = class(TForm)
Panel1: TPanel;
procedure DragDrop(const Data: TDragObject; const Point: TPointF);override;
procedure DragOver(const Data: TDragObject; const Point: TPointF; var Accept: Boolean);override;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.DragDrop(const Data: TDragObject; const Point: TPointF);
var P: TPointF;
begin
P:= Platform.ScreenToClient(Form1,Point);
TPanel(Data.Source).Position.X:=P.X - TPanel(Data.Source).Width/2;
TPanel(Data.Source).Position.Y:=P.Y - TPanel(Data.Source).Height/2;
end;
procedure TForm1.DragOver(const Data: TDragObject; const Point: TPointF; var Accept: Boolean);
begin
Accept:=true;
end;
end.
但它不想编译。平台标识符未声明,这并不奇怪,因为它不会出现在代码的其他任何地方。
此外,TPointF 和 TForm1 是不兼容的类型。这也不足为奇。
问题是,我不知道如何解决这两个问题。
我不知道平台的类型应该是什么。当我猜到 TPlatform 时,我注意到它只是一个没有 ScreenToClient 方法的枚举。
第二个问题让我完全困惑。编译器如何知道实例上的方法的参数类型,因为该实例未声明而无法识别其类?
编辑:
对不起,我应该更清楚我的要求。我正在尝试构建一个移动应用程序,它将向用户显示产品图像,并允许用户一次将图像拖到“比较”区域。然后用户单击比较按钮,我们进入一个新屏幕,比较用户拖放其图像的产品。
所以真的,我正在寻找的是一个上面有两个组件的屏幕。其中一个组件是可拖动的,另一个是目标。我需要能够识别拖放已经发生以及拖动者的身份......