我正在制作非常简单的测试应用程序,只是为了看看拖放是如何工作的。
基本上,我有两个字符串网格,源和目标,并且想将一个单元格从源的选择行拖到目标,在我放下它时为其创建一个新行。
为了使事情尽可能简单,我使用拖动模式 = 自动,以便不必编写手动拖动模式处理程序的代码。
只需几行代码,我就可以拖放,但只能从源的第一行拖放。 当我尝试单击不同的行以将其用作源时,OnClick 事件处理程序甚至不会触发。
简短的问题...当使用拖动模式=自动时,我可以做我想做的事(拖放和倾斜源行)吗?
拖放处理程序看起来像这样...
DestinationStringGrid.RowCount := DestinationStringGrid.RowCount + 1;
DestinationStringGrid.Cells[0, DestinationStringGrid.RowCount - 1] :=
SourceStringGrid.Cells[0, SourceStringGrid.Row];
所以,显然,我希望能够在单击SourceStringGrid.Row
时更改SourceStringGrid
如果问题不清楚,请告诉我。提前感谢您的帮助
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;