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

标签 delphi drag-and-drop

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

基本上,我有两个字符串网格,源和目标,并且想要将一个单元格从源的选择行拖动到目标,在放置它时为其创建一个新行。

为了使事情尽可能简单,我使用拖动模式=自动,这样就不必编写手动拖动模式处理程序。

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

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

放置处理程序看起来像这样......

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

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

如果问题不清楚,请告诉我。预先感谢您的帮助

最佳答案

您可以使用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;

关于delphi - 当拖动模式=自动时无法更改行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10730278/

相关文章:

javascript - 将更多图像添加到 Canvas 以进行拖放

德尔福:idHttp+SSL

delphi - 在运行时更改应用程序任务栏图标(忽略快捷方式图标)

algorithm - 如何从 Delphi 集合中获取最高值?

delphi - Delphi选项页面中设置浏览路径的问题

c# - 使用 IStream 拖放虚拟文件

delphi - 在中间添加新的常量时,如何递增顺序的常量值

html - 拖放区的视觉 HTML5 效果不错?

reactjs - 为 react-admin 仪表板推荐一个拖放库?

javascript - 构建拖放工厂布局 Web 应用程序