DragDropは、Windowsを操作するための簡単な方法です。 Windowsに基づく開発者として
Delphiはドラッグアンドドロップ操作もサポートしており、アプリケーションシステムのドラッグアンドドロップ機能は非常に便利です。
デルファイの力と利便性。
Delphi(コントロール、入力フォーカスを取得できるコントロール)が提供するすべてのコントロールは、ドラッグアンドドロップ操作をサポートし、
対応するドラッグアンドドロッププロパティ、ドラッグアンドドロップイベント、およびドラッグアンドドロップメソッド。次に、最初にコントロールのドラッグアンドドロップサポートを導入し、次に
ドラッグアンドドロップ操作の送信の一般的な手順とアプリケーションの例。
9.1コントロールのドラッグアンドドロップサポート
ドラッグアンドドロップ操作では、コントロールをソースコントロールとターゲットコントロールの2つのカテゴリに分けることができます。ほとんどのコントロールは、ソースコントロールとして使用できます
ターゲットコントロールとしても使用できます。しかし、それらの1つだけをサポートできるコントロールもいくつかあります。
9.1.1ドラッグアンドドロッププロパティ
2つのメインドラッグアンドドロッププロパティがあります。
●ドラッグモード:ドラッグモード
これらはすべて、ドラッグアンドドロップソースコントロールに設定されています。 DragModeは、実行時にコントロールを押すときにユーザーを制御する
マウスがダウンしたとき、コントロールはどのように反応しますか。ドラッグモードがdmautomaticに設定されている場合、ユーザーがコントロールでマウスを押したときに
DragModeは自動的に開始します。
ドラッグが起動できるかどうかを判断します。
DragCursorは、デフォルト値をCRDRAGで選択するときに表示されます。
プログラミングプロセスで一般的なインターフェイス仕様は、開発者が尊重する必要があります。しかし、時には特定の目的のために、
開発者は、独自のカーソルをDragCursorに割り当てることもできます。
9.1.2ドラッグアンドドロップイベント
3つのメインドラッグアンドドロップイベントがあります。
●Ondragover:ドラッグするときにインスピレーションを与えます
●ONDRAGDROP:ドラッグしてドロップするときにインスピレーションを与えます
●OnEndDrop:ドラッグが終了するときにインスピレーションを与えます
最初の2つのイベントはターゲットコントロールによって応答され、後者のイベントはソースコントロールによって応答されます。
Ondragoverイベントの主な機能は、ユーザーがドラッグを所定の位置に落としたときにコントロールが許容できるかどうかを判断することです。
そのパラメーターには次のものが含まれます。
出典:stobject; {source} x、y:
状態:tdragstate;
TDRAGSTATEは、ドラッグとドロップのアイテムとターゲットコントロールの関係を表す列挙タイプです。
タイプTDRAGSTATE =(DSDRAGENTER、DSDRAGLEAVE、DSDRAGMOVE);
異なる値の意味は次のとおりです。
表9.1ドラッグステートの値と重要性
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━
価値の意味
‑そして七面に巻き込まれているのは、そして七面、そして七面、そして七面
dsdragenterは、オブジェクトをコントロールにドラッグして、ドラッグされたオブジェクトをドロップします。デフォルトの状態です。
DSDRAGLEAVEは、ドラッグオブジェクトをドロップできるようにするコントロールからオブジェクトをドラッグします。
DSDRAGMOVEドラッグオブジェクトは、ドラッグオブジェクトをドロップできるようにするコントロール内を移動します。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━
ユーザーは、提供されたパラメーターを使用して、次のようなドラッグが許容できるかどうかを判断できます。
●ソースコントロールタイプを判断します。
Accept:=ソースはtlabelです。
●ソースコントロールオブジェクトを裁判官:
Accept:=(source = tabset1);
●カーソルのポジション裁判官:
(9.2)、(9.3)のルーチンを参照してください。
●ドラッグステータス裁判官:
if(ソースはtlabelです)と(state = dsdragmove)
begin source.dragicon:= 'new.ico';
終わり
それ以外
受け入れる:= false;
Accept = trueの場合、ターゲットコントロールはOndragdropイベントに応答できます。
それに対処する方法。
Ondragdropイベント処理プロセスのパラメーターには、ソースコントロールとカーソルの位置が含まれます。この情報は、処理に使用できます
確認。
OnENDDRAGイベントは、ドラッグ操作が完了した後、ソースコントロールによって応答され、ソースコントロールが対応するために使用されます
対処する。ドラッグ操作の終わりには、ドラッグとドロップの両方が受け入れられ、ユーザーはドロップできないコントロールでそれをリリースします。
マウスを置きます。このイベント処理プロセスのパラメーターには、ターゲット制御(ターゲット)とドロップ位置の座標が含まれます。もし
ターゲット= nilは、ドラッグされたアイテムがいかなるコントロールでも受け入れられないことを意味します。
ドラッグアンドドロップの移動では、セクション3で導入されたドラッグアンドドロップコピー操作では、操作が成功した場合、ファイルリストボックスを以下にリストします。
表示されているコンテンツを更新する必要があります。次のプログラムは、この関数を実装するために使用されます。
手順tfmform.filelistenddrag(sender、target:tobject; x、y:integer);
始める
ターゲット<> nilの場合、filelist.update;
終わり;
上記の3つのイベントに加えて、On-Mousedownの別のイベントがあります。これは、ドラッグアンドドロップ応答にも一般的に使用されています。
Onmousedownは特別なドラッグアンドドロップイベントではありませんが、手動モードでのドラッグの始まりはこれにあります
イベント処理のプロセス中に実装されます。
9.1.3ドラッグアンドドロップメソッド
ドラッグアンドドロップには3つの方法があります。
●BEGINDRAG:手動モードでドラッグを開始します
●Enddrag:
ドラッグを終了します
●ドラッグ:コントロールがドラッグされているかどうかを判断します
3つの方法はすべて、ソースコントロールによって使用されます。
DragModeがDMMANUALに設定されている場合、ドラッグすると、コントロールのBEGINDRAGメソッドを呼び出す必要があります。
Begindragには、すぐにブールパラメーターがあります。入力パラメーターがtrueの場合は、すぐに起動するためにドラッグします。
DragCursorの設定に変更します。入力パラメーターがfalseの場合、ユーザーが特定の距離でカーソルを移動するまで
(5ピクセル)カーソルを変更してドラッグし始める前。これにより、コントロールは開始せずにオンクリックイベントを受け入れることができます
操作をドラッグします。
EndDragメソッドは、オブジェクトのドラッグ状態を中止します。ブールパラメータードロップがあります。ドロップが設定されている場合
Trueに、ドラッグされたオブジェクトは現在の位置にドロップされます(ターゲットコントロールによって決定されるかどうか)
falseの場合、ドラッグは所定の位置にキャンセルされます。
次のプログラムは、コントロールパネルにドラッグするときにドラッグがキャンセルされることを示しています。
手順tform1.panel1dragover(sender、source:tobject; x、y:integer;
状態:tdragstate; var:boolean);
始める
受け入れる:= false;
if(ソースはtlabelです)と(state = dsdragenter)
(Source as tlabel).enddrag(false);
終わり;
ドラッジ方法は、コントロールがドラッグされているかどうかを決定します。次の例では、ユーザーが別のチェックボックスをドラッグしたとき
ウィンドウが別の色に変更されたとき。
手順tform1.formactivate(sender:tobject);
始める
checkbox1.dragmode:= dmautomatic;
checkbox2.dragmode:= dmautomatic;
checkbox3.dragMode:= dmautomatic;
終わり;
手順tform1.formdragover(sender、source:tobject; x、y:integer;
状態:tdragstate; var:boolean);
始める
Checkbox1.draggingの場合
色:= claqua;
checkbox2.draggingの場合
色:= Clyellow;
checkbox3.draggingの場合
色:= cllime;
終わり;