2016-04-19 6 views
1

私はドラッグを開発「Nアプリケーションを削除し、デフォルトDragCursors次のリストとしてアイテムをドラッグ&ドロップしたとき、私はデフォルトDragCursorで問題を抱えた感じています:デルファイ - ドラッグ&ドロップ+のMouseDown +のMouseUp

Gmail

私の質問は次のとおりです:

は、だから私は、Gmailなどドラッグ「Nドロップの動きを見るユーザーに新しい方法を開発しようとしていますドラッグアンドドロップイベントを併用する可能性はありますか?デルファイ7のマウスイベントですか?

enter image description here ​​

私はDragModedmAutomaticを入れた場合MouseDownイベントが動作しないと私はDragModedmManualを置けばMouseDownが正常に動作しますが、DragDropイベントは動作しません。

は、ここに以下の私のコードです:私の簡単な質問には

type 
    TForm1 = class(TForm) 
    pnlInformacaoDragDrop: TPanel; 
    pnl1: TPanel; 
    pnl2: TPanel; 
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); 
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
    procedure pnl1DragDrop(Sender, Source: TObject; X, Y: Integer); 
    procedure pnl2DragDrop(Sender, Source: TObject; X, Y: Integer); 
    procedure pnl2DragOver(Sender, Source: TObject; X, Y: Integer; 
     State: TDragState; var Accept: Boolean); 
    procedure pnl1DragOver(Sender, Source: TObject; X, Y: Integer; 
     State: TDragState; var Accept: Boolean); 
    procedure pnl1MouseDown(Sender: TObject; Button: TMouseButton; 
     Shift: TShiftState; X, Y: Integer); 
    procedure pnl1MouseUp(Sender: TObject; Button: TMouseButton; 
     Shift: TShiftState; X, Y: Integer); 
    private 
    { Private declarations } 
    public 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

{ TForm1 } 

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); 
begin 
    if Assigned(Self) then 
    begin 
    if pnlInformacaoDragDrop.Visible then 
    begin 
     pnlInformacaoDragDrop.Left :=X + 10; 
     pnlInformacaoDragDrop.Top := Y + 10; 
    end; 
    end; 
end; 

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
begin 
    if Assigned(Self) then 
    begin 
    if not pnlInformacaoDragDrop.Visible then 
     pnlInformacaoDragDrop.Visible := True; 

// img1.BeginDrag(True); 
    end; 
end; 

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
begin 
    if Assigned(Self) then 
    begin 
    if pnlInformacaoDragDrop.Visible then 
     pnlInformacaoDragDrop.Visible := False; 
    end; 
end; 

procedure TForm1.pnl1DragDrop(Sender, Source: TObject; X, Y: Integer); 
begin 
    TPanel(Sender).Caption := TPanel(Sender).Caption + ' - ' + TPanel(Source).Caption; 
end; 

procedure TForm1.pnl2DragDrop(Sender, Source: TObject; X, Y: Integer); 
begin 
    TPanel(Sender).Caption := TPanel(Sender).Caption + ' - ' + TPanel(Source).Caption; 
end; 

procedure TForm1.pnl2DragOver(Sender, Source: TObject; X, Y: Integer; 
    State: TDragState; var Accept: Boolean); 
begin 
    Accept := true; 
end; 

procedure TForm1.pnl1DragOver(Sender, Source: TObject; X, Y: Integer; 
    State: TDragState; var Accept: Boolean); 
begin 
    Accept := true; 
end; 

申し訳ありませんが、私は...私はそれを行うことができますどのように

おかげで多くのことを知りません!

答えて

2

dmAutomaticを使用して、使用しようとしたマウスイベントの代わりにOnStartDragイベントのハンドラを記述することができます。 D7のドキュメントから

説明

使用 ユーザーがコントロールまたはそれが含まれているオブジェクトをドラッグを開始したときに特別な処理を実装するOnStartDragイベントのイベントハンドラ。 OnStartDragは、DragKindがdkDragの場合にのみ発生します。

...

OnStartDragイベントのイベントハンドラは、ドラッグカーソル、又は、 任意に、ドラッグイメージリストを指定するDragObject型パラメータにTDragControlObjectEx インスタンスを作成することができます。

1

ドラッグアンドドロップは、モーダルの操作です。ドラッグ操作に対応するためには、ボタンが押されている間に必ずマウスイベントが発生しなくなります。

cmでは、左ボタンでドラッグアンドドロップ操作を自動的に開始するようコンポーネントに指示しています。 dmManualでは、MouseDownイベント内からBeginDragを呼び出してドラッグ操作を開始する必要があります。

IOWでは、実際のWindowsマウスイベント(WM_LBUTTONDOWN、WM_MOUSEMOVE、WM_LBUTTONUPなど)を取得せずに、VCLのドラッグ&ドロップ機能により、より高度なマウスイベントが隠されます。ただし、これらのメッセージを直接処理する場合は、ドラッグ&ドロップ方式も解除してください。イベントとドラッグアンドドロップサブシステムを注意深く管理することなく、簡単に物事を非常に悪くすることができます。

関連する問題