gpt4 book ai didi

delphi - 以文本形式获取方法

转载 作者:行者123 更新时间:2023-12-03 19:32:52 24 4
gpt4 key购买 nike

我需要保存一些属性并将其加载到数据库中,因此我对此感到困惑。
我有几种方法和一个按钮的形式。 button.onclick事件被分配给表单的方法之一。
我需要获取分配的方法的名称为字符串(就像对象检查器“ form1.proc1”一样)并将其保存到数据库中。稍后,我需要从数据库中获取方法名称,然后将button.onclick分配给相应表单的方法。
这有可能吗?

Form1 = class(TForm)
...
procedure proc1(Sender: TObject);
procedure proc2(Sender: TObject);
procedure proc3(Sender: TObject);

Button1.OnClick = readMethodNameFromDatabase;
...
saveMethodToDatabase(Button1.OnClick);

最佳答案

可以使用给定名称的方法来获取方法,如下所示:

function TForm1.MethodFromName(const Name: string): TNotifyEvent;
begin
TMethod(Result).Data := Self;
TMethod(Result).Code := MethodAddress(Name);
if TMethod(Result).Code=nil then
raise Exception.CreateFmt('Count not find method named %s', [Name]);
end;


这是RTL在读取.dfm文件时使用的机制。它依赖于所发布的方法。

您可以这样称呼它:

Button1.OnClick := TNotifyEvent(MethodFromName('Button1Click'));


自然,您将用最终代码中读取的数据库代替。



至于问题的第二部分,您可以使用以下代码获取事件处理程序的名称:

MethodName(@Button1.OnClick);

关于delphi - 以文本形式获取方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12367639/

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