ok,开工吧:
开发工具:推荐用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
procedure 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
运行后,除了d出一个空白的警告框,暂时看不到其它:)(可不就是这样么?Msg属性没给任何初始值,当然是空字符串,所以d出一个空的警告框是正常的)
9.我们再来添加一些控件和方法,以验证刚才设置的属性确实有效
在MyForm上添加一个文件框,一个按钮
按钮的事件如下:
procedure TMyForm.Button1Click(Sender: TObject)
begin
_msg:= self.Edit1.Text
end
即把文本框的值赋给属性Msg
再继续定位到Set_Msg,略做修改
procedure 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>
如果你想在Mac上安装AXContainer,可以参考如下步骤:1. 将AXContainer的安装文件复制到Mac上的某个目录中。
2. 打开终端,进入安装文件的目录,然后输入“./install.sh”,并运行它。
3. 等待安装程序完成,就可以使用AXContainer了。
请打开需要添加 ActiveX 控件的工作表。 显示“控件工具箱”,指向“视图”菜单上的“工具栏”,再单击“控件工具箱”。 单击要添加的控件。 在工作表上要放置控件的位置单击。 将控件拖动到所需的大小。 如果要添加复选框、文本框、命令按钮、选项按钮、列表框、组合框、切换按钮或标志,请输入要在控件上显示的文本。*** 作方法用鼠标右键单击控件。 将鼠标指针指向快捷菜单上的对象名称(例如,“复选框”对象)。 单击“编辑”。 编辑并键入文本。 完成后,按 Esc。 如果要设置所需控件的属性,请用鼠标右键单击控件,然后单击快捷菜单中的“属性”。有关属性的信息,请在“属性”对话框中按 F1,以显示“Microsoft Visual Basic 帮助”中的“ Microsoft 窗体”部分。请执行下列 *** 作之一:
为控件添加要在 Excel 中使用的 Visual Basic 宏代码用鼠标右键单击控件,再单击快捷菜单上的“查看代码”。在“Visual Basic 编辑器”中编写宏代码。有关编写宏代码的信息,请参阅 Visual Basic 的“帮助”。若要退出,请单击“文件”菜单上的“关闭并返回到 Microsoft Excel”。为控件添加在网页上使用的 Web 脚本如果要将数据发布到网页上,请单击数据所在的工作表的任何位置。在“工具”菜单上,指向“宏”,再单击“Microsoft 脚本编辑器”。在“脚本编辑器”中,编写脚本,同时用控件 ID 来处理控件事件。有关开发 Web 脚本的信息,请在“脚本编辑器”窗口中,单击“帮助”菜单上的所需选项。若要从“脚本编辑器”中返回 Excel,请单击“文件”菜单上的“退出”。若要退出设计模式,并启用 ActiveX 控件,请单击“退出设计模式”。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)