☆DBGridでのBeginDrag
DBGridのOnMouseDownは、セルのある場所では動きません。OnMouserDownでの処理を行いたい場合には、通常コンポーネントにしてMouseDownをoverrideし、そこで処理をさせています。
ただ、Drag開始のためだけにコンポーネントを作るのも面倒なので、何か方法がないかいろいろと試し、次のようにOnMouseMoveを使えばうまくいきました。
※Delphi Users' Forumへコメントしたものです(^^;
// BDEでTableにDEMOSのanimals.dbfを設定して試しました。 // Memo1とTable1-DataSource1-DBGrid1を配置しています。 var FieldIndex: Integer; procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var Cell: TGridCoord; begin // BeginDrag if (csLButtonDown in DBGrid1.ControlState) then begin Cell := DBGrid1.MouseCoord(X, Y); FieldIndex := Cell.X - 1; DBGrid1.BeginDrag(False); end; end;Memo1のDrag&Dropの設定を行います。
procedure TForm1.Memo1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := True; end; procedure TForm1.Memo1DragDrop(Sender, Source: TObject; X, Y: Integer); begin Memo1.Lines.Add(Table1.Fields[FieldIndex].AsString); end;一番簡単なのは、DragModeをdmAutomaticにすることですが、常にDrag&Drop処理だけで使うわけではないので除外ですね。
※Delphi Users' Forumへコメントしたものです(^^;
| 固定リンク