delphi7中如何设置一个过程(函数)为一个事件?
How to set a procedure (function) to an event in delphi 7?
我正在写哪个组件将 运行 通过数组,例如 ['form1.Button1'、'form1.memo1'、'form1'] - 就像
并将 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;
我正在写哪个组件将 运行 通过数组,例如 ['form1.Button1'、'form1.memo1'、'form1'] - 就像 并将 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;