2

ドラッグ&ドロップがどのように機能するかを確認するためだけに、非常に単純なテストアプリを作成しています。

基本的に、ソースと宛先の 2 つの stringgrids があり、1 つのセルをソースの選択行から宛先にドラッグし、ドロップすると新しい行を作成したいと考えています。

可能な限り単純にするために、ドラッグ モード = 自動を使用して、手動のドラッグ モード ハンドラをコーディングする必要がないようにしています。

ほんの数行のコードでドラッグアンドドロップできます、ソースの最初の行からのみです。別の行をクリックしてソースとして使用しようとすると、OnClick イベント ハンドラーが起動しません。

短い質問...ドラッグモード=自動を使用しているときに、やりたいことを実行できますか(ドラッグアンドドロップとソース行の変更の両方)?

ドロップハンドラーは次のようになります...

DestinationStringGrid.RowCount := DestinationStringGrid.RowCount + 1;
DestinationStringGrid.Cells[0, DestinationStringGrid.RowCount - 1] :=
    SourceStringGrid.Cells[0, SourceStringGrid.Row];

SourceStringGrid.Rowだから、明らかに、クリックしたときに変更できるようにしたいSourceStringGrid

質問が明確でない場合はお知らせください。よろしくお願いいたします。

4

1 に答える 1

3

このOnStartDragイベントを使用して、ドラッグが開始されたマウスの位置を特定できます。

procedure TForm1.StringGrid1StartDrag(Sender: TObject;
  var DragObject: TDragObject);
var
  Pt: TPoint;
  C, R: Integer;
begin
  Pt := StringGrid1.ScreenToClient(Mouse.CursorPos);
  StringGrid1.MouseToCell(Pt.X, Pt.Y, C, R);
  if (R > 0) and (R < StringGrid1.RowCount) then
    StringGrid1.Row := R;
end;
于 2012-05-24T02:40:53.700 に答える