本帖最后由 longyan32599 于 2010-07-19 11:19:58 编辑

解决方案 »

  1.   

    在调用的时候它不是自动创建ActiveForm的实例吗?怎么获取这个实例的引用?
      

  2.   

    ActiveFormImpl1.TActiveFormX.Create().ShowMsg;这样是可以的,但是已经创建了还要在创建一个才能使用??
      

  3.   

    TActiveFormFactory.Create(
      ComServer,
      TActiveFormControl,
      TActiveFormX,
      Class_ActiveFormX,
      1,
      '',
      OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL,
      tmApartment);
    各个参数的意义
    哪个指向被创建的实例
    就用哪个喽!
    俺也看不太懂!
    呵呵!
    实在不行自己声明个对象指针指向创建的实例就可以了!
      

  4.   

    单元里声明一个窗体var
      tmpFrm……
    initialization
      tmpFrm := TActiveFormFactory.Create(
      

  5.   

    我汗!!TAcitveFormFactory.Create(参数..)是个无返回值的!!这种方法不行!
      

  6.   

    接口单元声明一下ShowMsg
    然后引用接口单元
    直接frmActiveX.ShowMsg
      

  7.   

    这样也不行,我在接口中添加了,也不行!
    我在想TActiveFormFactory.Create(ComServer,TActiveFormControl,TActiveFormX,Class_ActiveFormX,1,'',OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL,tmApartment);
    这个Create方法怎么才能写成MyActiveForm:=TActiveFormX .Create(nil);但是如果我替换上边的TActiveFormFactory.create(参数..)改为MyActiveForm:=TActiveFormX .Create(nil);结果编译不报错,但是IE里边就是显示不出来!!郁闷!!
    如果能够获取IE运行时已经创建的TActiveFormX的实例那么就可以解决问题了!关键是,现在不知道怎么取!
      

  8.   

    我找不出来么,我看TActiveFormFactory.Create里边的代码,看的我晕乎乎的!
      

  9.   

    跟进TActiveFormFactory.Create方法看一下!
      

  10.   

    十楼,你提醒了我,嘿嘿,问题解决!!Self当做参数传给它就可以访问了,Self就是已经被TActiveFormFactory.Create()创建的TActiveFormX 的实力,不知道这么做对不对,反正结果出来是我想要的,跟Flash的AS编码方式啥不多,嘿嘿,谢谢了哦,分数给你了!
      

  11.   

    unit Unit1;interfaceuses ActiveFormImpl1;  procedure ReadActiveFormImpl1Data(aForm:TActiveFormX );
      
    implementation
    var
      MainForm:TActiveFormX ;procedure ReadActiveFormImpl1Data;
    begin
      MainForm:=aForm;//这样在其它方法体里就可以用MainForm直接访问TActiveFormX 的Public方法,
                        //子线程对TActiveFormX的Public的部件的调用也就OK了!嘿嘿!
    end;end.
      

  12.   

    打开 ActiveFormProj1_TLB 单元 ,打开过程和属性窗口,新增一个方法。然后OK
    外部引用时,才能调用
      

  13.   

    unit ActiveFormImpl1;{$WARN SYMBOL_PLATFORM OFF}interface
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ActiveX, AxCtrls, ActiveFormProj1_TLB, StdVcl, StdCtrls;type
      TActiveFormX = class(TActiveForm, IActiveFormX)
      Button1: TButton;
      Button2: TButton;
      procedure Button1Click(Sender: TObject);
      procedure Button2Click(Sender: TObject);
      private  protected
      { Protected declarations }  public
      { Public declarations }  procedure ShowMsg;  end;implementationuses ComObj, ComServ, Unit1;
    procedure TActiveFormX.ShowMsg;
    begin
      ShowMessage('ActiveFormImpl');
    end;procedure TActiveFormX.Button1Click(Sender: TObject);
    begin
      ReadActiveFormImpl1Data;
    end;
    procedure TActiveFormX.Button2Click(Sender: TObject);
    begin
      ReadActiveFormImpl1Data(Self);//嘿嘿,
    end;
    initialization
      TActiveFormFactory.Create(
      ComServer,
      TActiveFormControl,
      TActiveFormX,
      Class_ActiveFormX,
      1,
      '',
      OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL,
      tmApartment);
    end.
    //只是示意代码,别笑话我就行了,我在TActiveFormX 创建子线程,并且子线程中需要TAcitveFormX的Public函数,嘿嘿,才出此下策!!没办法的办法啊!TNND