即是可以象VB的开发环境那样动态的加载任意的ACTIVEX控件

解决方案 »

  1.   

    搂主是希望在运行时动态创建。例如,用户在一个文本框输入ActiveX控件的类名,系统能够自动创建并在当前窗口显示该控件。
    本人也有这样的疑问。
      

  2.   

    /初始化插件 ,也就装载插件,并在菜单提供调用
    procedure TfrmMain.LoadPlugIns;
    var
      Files: TStrings;
      i: Integer;
      TestPlugIn: TTestPlugIn;
      NewMenu: TMenuItem;
      GetCaption: TGetCaption;
    begin
      Files := TStringList.Create;
      Plugins := TList.Create;
      //查找指定目录下的.dll文件,并存于Files对象中
      SearchFileExt(ExtractFilepath(Application.Exename), '.dll', Files);
      //加载查找到的DLL
      for i := 0 to Files.Count - 1 do
      begin
        TestPlugIn := TTestPlugIn.Create;
        TestPlugIn.Address := LoadLibrary(PChar(Files[i]));
        if TestPlugIn.Address = 0 then
          raise EDLLLoadError.Create('装载' + PChar(Files[i]) + '失败');
        try
          @GetCaption := GetProcAddress(TestPlugIn.Address, 'GetCaption');
          TestPlugIn.Caption := GetCaption;
          TestPlugIn.Call := GetProcAddress(TestPlugIn.Address, 'ShowDLLForm');
          PlugIns.Add(TestPlugIn);
          //创建菜单,并将菜单标题,Onclick事件赋值
          NewMenu := TMenuItem.Create(Self);
          NewMenu.Caption := TestPlugIn.Caption;
          NewMenu.OnClick := PlugInsClick;
          NewMenu.Tag := i;
          N_plugins.Add(NewMenu);
        except
          raise EDLLLoadError.Create('初始化失败');
        end;
      end;
      Files.Free;
    end;