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.CodeTMethod.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;