2016-11-16 1 views
-1

Ich habe festgestellt, dass etwas falsch ist, wenn ich das OnDragDrop Ereignis und das OnDragOver Ereignis verwende. Schauen Sie sich dieses Stück Code:Firemonkey möglicher Fehler mit Drag & Drop

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; 

Dieser Code wird in Bezug auf die Form, die Sie in diesem Bild unten sehen können:

enter image description here

Dies ist ein Raster-Layout mit einigen Tasten nach innen; Button1 ist der obere linke und alle anderen Tasten haben die Ereignisse OnDragDrop und OnDragOver, die auf Button1 Ereignisse zeigen. Zum Beispiel look.

Wenn ich das Programm unter Windows (Zielplattform Win32 Bit) ausführen, kann ich die Schaltflächen im Raster mit dem Cursor und der Maus ziehen und ablegen. Das Problem tritt auf, wenn ich zu Android gehe, weil ich auf meinem Handy keine Buttons ziehen und ablegen kann. Irgendeine Idee?

Dies ist eine App mit mehreren Geräten, die mit Firemonkey erstellt wurde. Ich dachte, dass ich das DragDrop- und DragOver-Ereignis für jede Schaltfläche deklarieren muss, anstatt einen Verweis auf Button1 zu erstellen. Kann das sein?

+1

AFAIK, IFMXDragDropService ist nur für Windows und Mac implementiert. –

Antwort

3

Es ist kein Fehler und Sie finden den Grund here in der Dokumentation; Der DragDropService ist nicht in der Android-Plattform implementiert.

Sie können IFMXDragDropService sowohl in Verwendung von Windows und OS X

Wenn Sie einen Test, den ich Sie machen wollen vorschlagen, mit dieser Linie versuchen:

if TPlatformServices.Current.SupportsPlatformService(IFMXDragDropService) then 
begin 
    //test code 
end; 

Um sicher zu sein, dass Sie den Dienst IFMXDragDropService verwenden können, testen Sie zuerst, ob es unterstützt wird.