私は最後に1つ見つけました:
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.
しかし、コンパイルしたくありません。Platform 識別子は宣言されていませんが、これは驚くべきことではありません。これは、コード内の他の場所には表示されないためです。
また、TPointF と TForm1 は互換性のない型です。これも私を驚かせません。
問題は、これらの問題のいずれかを修正する方法がわからないことです。
プラットフォームのタイプがどうあるべきかわかりません。私が TPlatform を推測したとき、それは ScreenToClient メソッドではなく単に列挙型であることに気付きました。
2 番目の問題は、私を完全に当惑させました。インスタンスが宣言されていないためにクラスを識別できないインスタンスのメソッドのパラメーターの型を、コンパイラーはどのように知ることができますか?
編集:
申し訳ありませんが、要件についてもっと明確にする必要がありました。ユーザーに製品の画像を表示し、ユーザーが一度に 1 つずつ画像を「比較」領域にドラッグできるようにするモバイル アプリを構築しようとしています。次に、ユーザーが比較ボタンをクリックすると、ユーザーが画像をドラッグ アンド ドロップした製品を比較する新しい画面に移動します。
つまり、私が探しているのは、2 つのコンポーネントが表示された画面です。コンポーネントの 1 つはドラッグ可能で、もう 1 つはターゲットです。ドラッグアンドドロップが発生したことと、ドラッグ対象の身元を認識できるようにする必要があります...