拖动模式=自动时无法更改行

时间:2012-05-24 02:15:33

标签: delphi drag-and-drop

我正在制作非常简单的测试应用程序,只是为了看看如何拖动和放大放下工作。

基本上我有两个stringgrids,source&目标,并希望将一个单元格从源的选择行拖到目标位置,在删除它时为其创建一个新行。

为了让事情尽可能简单,我使用了拖动模式=自动,以免编写手动拖动模式处理程序。

只需几行代码我就可以拖放仅从源的第一行中删除。当我尝试单击不同的行时,要将其用作源,OnClick事件处理程序甚至不会触发。

简短的问题......当我使用拖动模式=自动时,我可以做我想做的事情(拖放和插入源行)吗?

drop handler看起来像这样......

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

所以,显然,我希望能够在点击SourceStringGrid.Row时更改SourceStringGrid

如果问题不明确,请告诉我。在此先感谢您的帮助

1 个答案:

答案 0 :(得分: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;