ドラッグ操作の開始

提供: RAD Studio
移動先: 案内検索

コントロールの利用:インデックス への移動

どのコントロールにも DragMode プロパティがあります。DragMode は,ドラッグ操作の開始方法を決定するプロパティです。DragModedmAutomatic を設定すると,ユーザーがコントロールにポインタを置いてマウスボタンを押すと自動的にドラッグが始まります。しかし,dmAutomatic を設定すると通常のマウス動作を制御できなくなる可能性があるため,一般には DragModedmManual(デフォルト)を設定し,マウスボタンを押したことを示すイベントを処理することでドラッグを開始します。

コントロールのドラッグを(自動的にでなく)明示的に開始するには,そのコントロールの BeginDrag メソッドを呼び出します。BeginDragImmediate という論理パラメータを使用します。加えて,オプションとして Threshold という整数パラメータをとることもできます。ImmediateTrue で渡すと,すぐにドラッグが始まります。False を渡すと,Threshold で指定したピクセル数だけユーザーがマウスを動かすまで,ドラッグは開始しません。次のコードを呼び出すと,



 BeginDrag (False);



 false, -1



コントロールをクリックしただけではドラッグ操作は開始されません。

BeginDrag を呼び出す前に,マウスボタンが押されたことを示すイベントのパラメータをチェックし,ユーザーが押したボタンを調べてから,条件が合う場合にのみドラッグを開始することもできます。たとえば,次のコードは,マウスボタンが押されたことを示すファイルリストボックスのイベントに応答して,有効な項目の上で左ボタンが押された場合にのみ,ドラッグ操作を開始します。



 procedure TFMForm.FileListBox1MouseDown(Sender: TObject;
   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 begin
   if Button = mbLeft then  { 左ボタンが押されたときのみドラッグ }
     with Sender as TFileListBox do  { Sender を TFileListBox として扱う }
       begin
         if ItemAtPos(Point(X, Y), True) >= 0 then  { 項目があるかどうかをチェック }
           BeginDrag(False);  { 項目がある場合はドラッグする }
     end;
 end;



 void __fastcall TFMForm::FileListBox1MouseDown(TObject *Sender,
 {
   if (Button == mbLeft)
   {
     TFileListBox *pLB = dynamic_cast<TFileListBox *>(Sender); // TFileListBox にキャスト
     if (pLB && pLB->ItemAtPos(Point(X,Y), true) >= 0) // 項目があるかどうかをチェック
       pLB->BeginDrag(false, -1);                   // 項目がある場合はドラッグする
   }
 }



関連項目