问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何快速开发原生ActiveX控件

发布网友 发布时间:2022-04-25 21:52

我来回答

1个回答

热心网友 时间:2022-04-22 08:36

开发工具:推荐用delphi 2010(d7也可以,不过添加属性,方法等过程要手动,稍微麻烦点) 

  1.启用delphi2010-->File->New->Other-->Active Library

  2.项目命名为MyActiveX

  3.File-->Save All 全部保存

实际上这样就能编译了,不过只是空的dll

  4.File-->New-->Other-->Active Form

  改名为MyForm

  将对应的单元文件,保存为UMyForm.pas

  5.打开MyAcitveX.ridl文件,切换到design视图,选中IMyForm接口,右击New-->Property
添加一个属性Msg

  将Msg属性的Type改为BSTR 即WideString类型

  完了之后,点击工具栏中的Refresh
Implementation(即上图中工具栏中圈起来的部分)--这一步很重要,点击之后,它将自动生成属性Msg对应的声明和实现代码模板

6.打开UMyForm.pas--即ActiveForm对应的单元,找到Set_Msg以及Get_Msg的实现部分,补充代码如下:

function TMyForm.Get_Msg: WideString;
begin
    result:=_msg;
end;
procere TMyForm.Set_Msg(const Value: WideString);
begin
  _msg := value;
end;

  当然TMyForm的private部分,得先加一个私有成员 

type
  TMyForm = class(TActiveForm, IMyForm)
  private
    { Private declarations }
    _msg:WideString;
...

  这样我们就为即将生成的ActiveX控件,添加了一个字符串类型的属性Msg,下面来测试一下:

  7.编译项目,会生成一个MyActiveX.ocx,在运行栏里输入

  regsvr32 C:\Users\jimmy.yang\Desktop\Delphi_activex\MyActiveX\MyActiveX.ocx

  注:这里ocx的路径,请各位根据自己的实际路径修改

  这样就完成了ocx的注册。

  8.放到html里测试一下:

<OBJECT ID='x' name='x' CLASSID='CLSID:52D17094-0687-4A2F-B2DB-30F3189AC659' align=center hspace=0 vspace=0 ></OBJECT>
<script type='text/JavaScript'>
var x = document.getElementById("x");
alert(x.Msg);
</script>

  关于CLSID在哪里查看,打开:MyActiveX_TLB.pas文件,定位到下面这里:

const
  // TypeLibrary Major and minor versions
  MyActiveXMajorVersion = 1;
  MyActiveXMinorVersion = 0;
  LIBID_MyActiveX: TGUID = '{49138437-8265-4B1A-9EAE-D0F615D68464}';
  IID_IMyForm: TGUID = '{54A20855-29A3-4C92-85DE-A419DA457C7A}';
  DIID_IMyFormEvents: TGUID = '{60BBC967-E1E6-4E98-BAE5-776BFD06E9CC}';
  CLASS_MyForm: TGUID = '{52D17094-0687-4A2F-B2DB-30F3189AC659}';

其中 CLASS_MyForm: TGUID对应的就是ClassID

  运行后,除了弹出一个空白的警告框,暂时看不到其它:)(可不就是这样么?Msg属性没给任何初始值,当然是空字符串,所以弹出一个空的警告框是正常的)

  9.我们再来添加一些控件和方法,以验证刚才设置的属性确实有效

  在MyForm上添加一个文件框,一个按钮

 

  按钮的事件如下:

procere TMyForm.Button1Click(Sender: TObject);
begin
  _msg:= self.Edit1.Text;
end;

  即把文本框的值赋给属性Msg

  再继续定位到Set_Msg,略做修改

procere TMyForm.Set_Msg(const Value: WideString);
begin
  _msg := value;
  self.Edit1.Text := _msg;
end;

  即设置Msg属性时,同时也把值显示在文本框里,以便等会儿我们好测试在js中给activeX属性赋值的效果

  ok了,再来测试一下,编译一下,如果通不过,请先运行

  regsvr32 C:\Users\jimmy.yang\Desktop\Delphi_activex\MyActiveX\MyActiveX.ocx /u

  将刚才注册的ocx反注册,同时关掉浏览器,不然该ocx文件一直被占用,无法更新.

  修改一下html的代码:

<OBJECT ID='x' name='x' CLASSID='CLSID:52D17094-0687-4A2F-B2DB-30F3189AC659' align=center hspace=0 vspace=0 ></OBJECT>
<hr />
<input type='button' value='显示Msg属性的值' onclick='ShowMsg()'/>
<input type='button' value='设置Msg属性的值' onclick='SetMsg()'/>
<script type='text/JavaScript'>
var x = document.getElementById("x");
var ShowMsg = function(){
    alert(x.Msg);
}
var SetMsg = function(){
    x.Msg = 'js传过来的值';
}
</script>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...了我亲弟弟的女朋友了 她也喜欢我 我该怎么办 他们已经分手了... ...个朋友的老婆你说我该追她吗 他们现在已经分手了 月经第三天有大量血块排出是什么原因 如何关闭360推荐的广告学习关闭360推荐广告 手机浏览器的不雅广告怎么清除 怎样设置浏览器推送内容 学政治对考公务员有优势吗 公务员必须选政治吗 如何提高苹果手机的下载速度 苹果手表有必要买蜂窝版吗苹果手表有必要买蜂窝版吗 拖拉机是我国农业重要生产工具,手扶和普通拖拉机哪个好? 过去农村非常多见的手扶拖拉机,这几年为啥很少看到了? 手扶拖拉机的型号指的是什么?比如91型? 美容院吸氧做胸的仪器什么用 王者无法修改实名认证怎么办? 手扶拖拉机拉得多少方沙 多少吨! 手扶拖拉机可以用汽油吗 拖拉机 和手扶拖拉机 什么证可以开 女性检查乳房脱掉内衣,穿着衣服贴在一个仪器上是做的什么? 手扶拖拉机用来发动的摇把是怎样的 手扶拖拉机的用途 手扶拖拉机有多少用途? 微信转账看不到对方名字的最后一个字,但能给对方发信息是怎么回事? 手扶拖拉机用什么驾驶证? 微信转账怎么设置看不到名字最后一个字? 微信转账怎么可以隐藏最后一个字? 家长营造一种积极向上的家庭环境,对孩子的成长有多重要? 家长对家庭教育的看法? 在家庭教育中,父母应该注重哪些方面呢? 家长怎样构建正确的家庭教育形式? 求原生windos xp sp3 iso下载网址 干净的系统!什么软件都没有的! 米盛胸部按摩仪器好用吗?效果怎么样? 求原生之罪池震蹦迪出场的bgm 一千到两千的安卓手机哪块比较好? 手扶拖拉机安全操作应注意哪些事项? 世界6大原生古代建筑体系有哪些? 交强险包括拖车费吗 我游戏实名信息绑定父母的,现在我已满18周岁,要换成我自己的身份信息,为什么换不了,没有修改按钮_百度问一问 如何评价 Smartisan OS 2.0 更换 UI 字体为冬青黑体 烤电仪器对胸部有什么好处 手扶拖拉机如何转向? 吸胸仪器有没有用 溢れ出した言の叶达は 泣いて覚えている 把里面的汉字转成片假 手扶拖拉机有何特点? 平假名与片假名的转换使用 30分,请问平假名与片假名之间的转换 QQ修改了实名认证,游戏的实名认证修改失败,游戏里的是成年实名,无法修改,以前没改过游戏的实名? 求一个男的好听的有内涵的英文名字? 百度日语输入法平假名片假名切换 账号不支持修改实名信息怎么办