将Delphi 2007中的事件处理程序分配给表单上的所有控件

Geo*_*rey 1 delphi oop

我正在尝试创建一小部分软件,以便拖放一下.我开始只动态创建TButtons,它工作正常.

但是,在概括功能时,由于基类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;
Run Code Online (Sandbox Code Playgroud)

Uwe*_*abe 9

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

type
  TControlHack = class(TControl);
Run Code Online (Sandbox Code Playgroud)

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

TControlHack(newControl).OnMouseDown := ...
Run Code Online (Sandbox Code Playgroud)