我正在写哪个组件将像['form1]那样通过数组运行。Button1中"、"form1。Memo1 ', 'form1'] - like然后把showms2处理程序放在上面(form1。button1。)Onclick: = showms2)
var
comp: array of Tcomponent;
met: Tmethod;
start off
setlength (comp, Lines.Count);
for i: = 0 to Lines.Count-1 do
start off
comp [i]: = (FindComponent (Lines.Names [i]) as TControl);
met: = GetMethodProp (comp [i], 'OnClick');
meth.Code: = form1.MethodAddress ('showms2');
met.Data: = 0;
// When splitting into elements, nothing happens, is there an alternative?
FindComponent()
不按您使用它的方式工作。你只需要指定被搜索的组件直接拥有的组件的名称,你不能指定一个组件链,即Form1.FindComponent('Form1.Button1')
将不工作,但Form1.FindComponent('Button1')
将工作,如果Form1
拥有Button1
。
同样,如果你要设置TMethod.Code
和TMethod.Data
,那么调用GetMethodProp()
是完全多余的,应该被删除。
另外,您需要使用SetMethodProp()
来实际地将TMethod
分配给目标事件。
试试这个:
var
comp: TComponent;
met: TMethod;
i: Integer;
begin
for i := 0 to Lines.Count-1 do
begin
comp := FindComponent(Lines.Names[i]);
if comp <> nil then
begin
if IsPublishedProp(comp, 'OnClick') then
begin
meth.Code := Form1.MethodAddress('showms2');
meth.Data := Form1;
SetMethodProp(comp, 'OnClick', met);
end;
end;
end;
end;