gpt4 book ai didi

delphi - 在Delphi 2007中将事件处理程序分配给窗体上的所有控件

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

我正在尝试创建一小部分软件,以进行一些拖放操作。我刚开始只是动态创建TButton,并且效果很好。

但是,在泛化功能时,由于基类TControl的OnDragDrop和OnMouseDownEvent处于“保护”状态,我遇到了一个问题。

procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
var
newControl: TControl;
selClass: TControlClass;
ctlName: string;
selItem: string;
begin
if TControl(Sender).Parent = Self then
begin
with TWinControl(Source) do
begin
Left:= X;
Top:= Y;
EndDrag(True); {drop the control}
end;
end
else begin
selItem:= TypeList.Items[TypeList.ItemIndex];
selClass:= TControlClass(GetClass(selItem));

newControl:= selClass.Create(Self);
newControl.Parent:= Self;

ctlName:= newControl.ClassName + IntToStr(GetControlCount(selClass));
Delete(ctlName, 1, 1); {Remove 'T' from name}

newControl.Name:= ctlName;
newControl.Left:= X;
newControl.Top:= Y;

{ TODO : assign events onDragDrop and onMouseDown}
(*
newControl.OnMouseDown:= @ControlMouseDown;
newControl.OnDragDrop:= @FormDragDrop;
*)

end;

end;

最佳答案

将以下声明添加到您的单元中:

type
TControlHack = class(TControl);


并为新控件使用类型转换:

TControlHack(newControl).OnMouseDown := ...

关于delphi - 在Delphi 2007中将事件处理程序分配给窗体上的所有控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7330606/

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