2013-06-21 25 views
1

我想在DelphiXE4中用TRectangle製作一個棋盤gui &使用unicode象棋棋子(請參閱StackOverflow Delphi chess unicode link並拖放但我無法讓DND正常工作!我的測試項目是FireMonkey FMX 。 我嘗試了各種代碼添加到的DragDrop/dragover事件包括使用接受的代碼,但沒有結果&來源。在DelphiXe4中拖放unicode TText

我設置的DragDrop自動上TRectangle & TText組件&可以得到拖拽功能,但沒有下降的功能!什麼我需要輸入事件DragDrop DragOver在目標TRectangle接受放置事件嗎?(我很困惑這個&找不到谷歌搜索清除指令的任何地方)

這裏是我的基本測試代碼(表格):

unit Unit1; 

interface 

uses 
    System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes, 
    System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, 
    FMX.StdCtrls, FMX.Objects; 

type 
    TForm1 = class(TForm) 
    Rectangle1: TRectangle; 
    Rectangle2: TRectangle; 
    Rectangle3: TRectangle; 
    Rectangle4: TRectangle; 
    Rectangle5: TRectangle; 
    Rectangle6: TRectangle; 
    Rectangle7: TRectangle; 
    Rectangle8: TRectangle; 
    Rectangle9: TRectangle; 
    Text1: TText; 
    procedure Rectangle7DragOver(Sender: TObject; const Data: TDragObject; 
     const Point: TPointF; var Accept: Boolean); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.fmx} 

procedure TForm1.Rectangle7DragOver(Sender: TObject; const Data: TDragObject; 
    const Point: TPointF; var Accept: Boolean); 
begin 
    if Sender is TText then 
    Accept := True; 
end; 

end. 

非常感謝幫助&期待回覆,感謝

編輯/ UPDATE

下面是從bummi代碼:

unit Unit3; 

interface 

uses 
    System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes, 
    System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, 
    FMX.Objects, FMX.Edit; 

type 
    TForm3 = class(TForm) 
    Rectangle1: TRectangle; 
    Text1: TText; 
    Edit1: TEdit; 
    procedure Rectangle1DragOver(Sender: TObject; const Data: TDragObject; 
     const Point: TPointF; var Accept: Boolean); 
    private 
    { Private-Deklarationen } 
    public 
    { Public-Deklarationen } 
    end; 

var 
    Form3: TForm3; 

implementation  
{$R *.fmx}  
procedure TForm3.Rectangle1DragOver(Sender: TObject; 
    const Data: TDragObject; const Point: TPointF; var Accept: Boolean); 
begin 
    Caption := Data.Source.ClassName ; 
    Accept := Data.Source is TText;  
end;  
end. 

但即使如此,我仍然無法讓我的國際象棋範例爲我工作!哦,親愛的!

+0

你是否設法解決這個問題? –

回答

2

如果TDragObject的源代碼是TText,您將不得不接受。

Accept := Data.Source is TText; 

發件人將是您的Rectangle7或任何組件Rectangle7DragOver分配給。

+0

嗨bummi我剛剛嘗試過你的代碼/建議,但我仍然沒有收到TTDT到DND!你能發佈完整的表格和工作代碼,以便我可以確切地看到你的代碼是如何輸入和工作的?謝謝 – rpd

+0

在那裏我沒有任何比上面顯示的代碼更多。您是否將您的TText的DragMode設置爲dmAutomatic? – bummi

+0

是的,我將TText設置爲dmAutomatic ... – rpd