我的程序用到activex控件,怎样写程序,可以使他在没有这个activex控件的机器也能运行
,就是如果所运行的机器上如果有这个activex控件,那么直接运行,如果没有这个activex控件
那么可以给个提示(说有些功能不能实现)。可以实现吗?(不发布这个activex控件)

解决方案 »

  1.   

    不要将ActiveX控件安装成vcl控件,而是在运行时用CreateComObject()来生成对象,可以用Variant变量来作为对象的载体,判断CreateComObject()函数的返回值来决定是否出错。
      

  2.   

    楼上能不能给一个实际的代码?比如在Form上放置一个Acitve控件(就用自带的 F1book 控件好了),怎么样才可以在别的机子上也能运行这个可执行文件呢?
      

  3.   

    其实很简单的,在你的程序初始化时查看系统注册的active,看是否存在有注册的,如果没有则给出你的提示,反之运行。如果要不发布active,那就无能为力了,除非你有active源码,将其加入到你的工程。(顺便用系统regsvr32.exe注册控件也很方便啊)
      

  4.   

    楼上可以告诉我,具体怎么做吗? 就拿Delphi自带的Acitive控件:F1book 来实现好了,兄弟急需解决这个问题,我可以单独给你分的,谢谢!
      

  5.   

    换句话说,如果我需要注册的话,在regsvr32.exe 后面应该跟什么“东东”才可以把 F1Book 加入到我的工程后,在别的机子上也能运行呢?
      

  6.   

    //运行注册命令,注册f1book
     winexec(pchar('regsvr32.exe -s'+getcurrentdir()+'\vcf132.ocx'),
    sw_show);
    其中getcurrentdir()指程序运行的当前目录。
    regsvr32的参数你可以在ms-dos下运行
    regsvr32 察看
      

  7.   

    //注册f1book首先,十分感谢楼上的热心指点,按照你的意思,我执行如下:---->在装有Delphi的机子上
    1) 把vcf132.ocx 复制到c:\
    2)  在运行处执行:  regsvr32.exe c:\vcf132.ocx
    3)  系统显示:      c:\vcf132.ocx中的DllRegisterServer成功
    ---->在没有装Delphi的机子上
    1) 把vcf132.ocx 复制到c:\
    2)  在运行处执行:  regsvr32.exe c:\vcf132.ocx
    3)  系统显示:      LoadLibrary("c:\vcf132.ocx")失败-找不到指定的模块。---->另外我执行(vcf132.ocx 复制在跟.exe同一个目录下):
    procedure TForm1.FormCreate(Sender: TObject);
    var
       TempButton : TButton;
       F1book1 : TF1book;
    begin
        winexec(pchar('regsvr32.exe -s'+getcurrentdir()+'\vcf132.ocx'), sw_show);
        F1book1 := TF1book.Create(self);end;end.在没有装Delphi的机子上显示: License information for TF1Book is invalid.
    在装有Delphi的机子上 正确.能告诉我这是为什么吗? 我应该怎么做?谢谢!!!!
      

  8.   

    如果是delphi自带的,在发布软件时,需要以下四个文件:VCF132.OCX MFCANS32.DLL OC30.DLL
    MSVCRT20.DLL,如果要连接ODBC,还需要ODBC32.DLL。 如果是Formula6.0发布时要带ttf16.ocx文件,
    并且要用regsvr32.exe程序进行注册
      

  9.   

    如boz(波) 所说。---->在没有装Delphi的机子上
    1) 把vcf132.ocx 复制到c:\
    2)  在运行处执行:  regsvr32.exe c:\vcf132.ocx
    3)  系统显示:      LoadLibrary("c:\vcf132.ocx")失败-找不到指定的模块。之所以这个情况,是因为regsvr32在注册组件时其时是加载它要注册的dll,调用该dll自己的方法来注册的,所以如果被加载的dll启动时所需要的其它相关组件不存在时,启动就会失败。。