« ■Delphi 2007 を申し込みました。 | トップページ | ■Webセミナーに関するアンケート »

☆DBGridでのBeginDrag

DBGridのOnMouseDownは、セルのある場所では動きません。OnMouserDownでの処理を行いたい場合には、通常コンポーネントにしてMouseDownをoverrideし、そこで処理をさせています。 ただ、Drag開始のためだけにコンポーネントを作るのも面倒なので、何か方法がないかいろいろと試し、次のようにOnMouseMoveを使えばうまくいきました。
// 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へコメントしたものです(^^;

|

« ■Delphi 2007 を申し込みました。 | トップページ | ■Webセミナーに関するアンケート »