我注意到使用OnDragOver
事件和procedure TForm1.Button1DragDrop(Sender: TObject; const [Ref] Data: TDragObject;
const [Ref] Point: TPointF);
var t,d: TButton;
begin
T := TButton(Sender);
D := TButton(Data.Source);
T.data := T.data + D.data;
Score(T.data);
D.data := 0;
T.isOk := true;
end;
procedure TForm1.Button1DragOver(Sender: TObject; const [Ref] Data: TDragObject;
const [Ref] Point: TPointF; var Operation: TDragOperation);
begin
if ((Sender is TButton) and (Data.Source is TButton) and not(Sender = Data.Source)
and (TButton(Sender).Text = TButton(Data.Source).Text) and (TButton(Data.Source).Text <> '')) then
begin
operation := TDragOperation.Move;
end
else
begin
operation := TDragOperation.None;
end;
end;
事件时出现了问题。看看这段代码:
OnDragDrop
此代码与您在下图中看到的表单相关:
这是一个网格布局,里面有一些按钮; Button1是左上角的按钮,所有其他按钮的事件OnDragOver
和{{1}}指向Button1事件。例如look。
当我在Windows(目标平台win32位)下运行程序时,我可以使用光标和鼠标拖放网格中的按钮。当我移动到android时出现问题,因为在我的手机上我无法拖放按钮。有什么想法吗?
这是一款使用Firemonkey构建的多设备应用。我想我必须为每个按钮声明DragDrop和DragOver事件,而不是引用Button1。这可能吗?
答案 0 :(得分:3)
这不是错误,您可以在文档中找到原因here; DragDropService未在android平台中实现。
您可以在Windows和OS X中使用IFMXDragDropService
如果您想进行测试,我建议您尝试使用此行:
if TPlatformServices.Current.SupportsPlatformService(IFMXDragDropService) then
begin
//test code
end;
为了确保您可以使用IFMXDragDropService
服务,请先测试它是否受支持。