gpt4 book ai didi

delphi - 从一种表单拖放到另一种表单中的任意位置

转载 作者:行者123 更新时间:2023-12-03 15:49:58 25 4
gpt4 key购买 nike

我有一个包含两个表单的 MDI 表单应用程序。第一个表单有一个 StringGrid,第二个表单有很多编辑控件和一些按钮。

我需要从网格中拖放到第二个表单上,并使用第一个表单中 StringGrid 中所选单元格的值更新一个编辑。

如果我事先知道用户将在哪个控件上释放鼠标左键,那么这很容易做到,因为我可以设置该特定控件的 OnDragDrop 事件。但我不想为第二个窗体上的每个控件编写多个 OnDragDrop 事件。

如何拦截表单范围的消息以拦截任何控件上的放置操作?

最佳答案

设置自定义DragObjectOnStartDrag StringGrid 的事件:

{ TMyDragObject }

type
TMyDragObject = class(TDragControlObjectEx)
protected
DragText: String;
procedure Finished(Target: TObject; X, Y: Integer; Accepted: Boolean); override;
function GetDragCursor(Accepted: Boolean; X, Y: Integer): TCursor; override;
end;

procedure TMyDragObject.Finished(Target: TObject; X, Y: Integer; Accepted: Boolean);
begin
if Target is TCustomEdit then
TCustomEdit(Target).SelText := DragText;
inherited;
end;

function TMyDragObject.GetDragCursor(Accepted: Boolean; X, Y: Integer): TCursor;
begin
if TObject(DragTarget) is TCustomEdit then
Result := crDrag
else
Result := inherited GetDragCursor(Accepted, X, Y);
end;

{ TForm1 }

procedure TForm1.StringGrid1StartDrag(Sender: TObject; var DragObject: TDragObject);
begin
DragObject := TMyDragObject.Create(StringGrid1);
TMyDragObject(DragObject).DragText := StringGrid1.Cells[StringGrid1.Col,
StringGrid1.Row];
end;

关于delphi - 从一种表单拖放到另一种表单中的任意位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27273725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com