说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB如何在VB中使用Delphi的控件

HTML文档下载 WORD文档下载 PDF文档下载
VB如何在VB中使用Delphi的控件
作者:南京南自总厂开发中心 张玉洲
南京理工大学98研 王静
----   用过Delphi的编程爱好者们都知道,Delphi中Visual Component Library(VCL)中具有大量的组件,尤其是第三方设计的VCL,如Ahm系列,LMD系列,VenusPro等,在程序中适当的使用它们会让你的程序在界面上或者功能上增色不少,这让许多VB迷们馋的掉口水,因为毕竟免费的并且功能强大的ActiveX控件太少了,本文就是为那些到处找控件的VB迷写的。

----   为方便讲述,以Delphi4 中Samples 标签下的ColorGrid组件为例,描述如何将ColorGrid导出成ActiveX控件。

---- 1、打开delphi4,运行File- >New,弹出NewItems对话框,点取"ActiveX"标签,选择ActivexControl,选择"OK"

---- 2、在出现的ActiveX Control Wizard的对话框中,有如下选择:

---- VCL Class Name:选择要导出的或继承的VCL组件(注意非TwinControl继承的VCL不再列表中,之后再讨论),选择TColorGrid

---- New Activex Name:要导出的ActiveX控件名,取默认值ColorGridX即可

---- Implementation Unit:实现单元,取缺省名称

---- Project Name:创建的工程名,取缺省名称

---- Thread Model:线程模式,详看Delphi帮助,这里取默认值Apartment(单线程)

---- Include Design-Time License:是否包含使用许可信息

---- Include About Box:是否包含"About"对话框

---- Include Version Informaion:是否包含版本信息

---- 单击"OK",此时Delphi为我们创建了三个文件:

---- 库文件  ColorGridXControl1

---- 实现单元 ColorGridImpl1

---- 类型文件 ColorGridXControl1_TLB

---- 3、选择菜单Run->Register ActiveX Server,会出现注册成功的信息:

"Successfully Registered ActiveX Server,
'...\ColorGridControl1.ocx'"

---- 这里的ColorGridXControl1.ocx就是你所需要的颜色选取控件。
---- 现用VB6对其进行测试:

---- 1、新建一VB6工程,选取菜单"工程->部件",在出现的对话框中选中ColorGridXControl1 Library,选"确定"。

---- 2、在窗体Form1上放置控件ColorGridX,取默认名称"ColorGridX1"。

---- 3、如何利用它的属性和方法:以获得选取颜色为例,在它的OnClick事件中添加监视ColorGridX1,发现其属性Object返回对Delphi控件的引用,ForegroundColor属性值代表选中的颜色,虽然在"ColorGridX1.Object."后没有代码提示,但仍然可以用ColorGridX1.Object.ForegroundColor可得到颜色值。

---- 如果你想完善这个控件,在键入"ColorGridX1."后直接得到ForegroundColor的属性提示,那就必须手工在Delphi中为ColorGridX填加属性/方法,步骤如下:

---- 1、选中实现单元ColorGridImpl1,选菜单"Edit->Add To Interface",在出现的对话框中的Declaration填写"Property ForegroundColor:integer",选"OK",这时Delphi自动为你填加了两个过程框架:

procedure TColorGridX.Set_
ForeColor(Value: Integer);
function TColorGridX.Get_
ForeColor: Integer;
2、在Get_ForeColor中添加代码
result:=FDelphiControl.ForegroundColor;
由于ColorGrid的ForegroundColor
属性为只读,Set_ForeColor过程不用写了。

---- 3、编译执行,Run->Register ActiveX Server,会出现注册成功的信息。再到VB中,会发现控件ColorGridX新增了ForeColor属性,代表选中的颜色值。
---- 依此类推,可以增加其它有用的属性供VB等显式调用。用这种办法,可以把大多数由TWinControl继承下来的组件导出,那么非TWinControl的组件以及没有列出的组件怎么导出呢?且看下文。

----   前面提到创建ActiveX控件时,在ActiveX Control Wizard的对话框的VCLClassName下拉列表中找不到想导出的VCL组件,这是因为该组件不是由TwinControl继承下来的,属"Windowless"那一种,这时我们可以用ActiceForm的形式把它导出来,以第三方控件TColorPickerButton为例:

---- 1、选菜单"File->New",在出现的"New Items"对话框中选择"ActiveX"标签,选中ActiveXForm,选择"OK"

---- 2、在出现的"ActiveForm Wizard"的"New ActiveX Name"中填写输出的控件名"ColorPicker",选择"OK"

---- 3、在Delphi为我们创建的窗体上放置TColorPickerButton组件,名为"ColorPickerButton1",将窗体调整到合适大小,选菜单"Edit->Add To Interface",为它添加属性:Property SelectColor:integer,选择"OK"

---- 4、在Delphi提供的框架中写下类似代码:

---- 读取颜色:

function TColorPicker.Get_
SelectColor: Integer;
begin
result:=ColorPickerButton1.
SelectionColor;
end;
设置颜色:
procedure TColorPicker.Set_
SelectColor(Value: Integer);
begin
ColorPickerButton1.SelectionColor:=Value;
end;

---- 5、编译执行,Run->Register ActiveX Server,会得到注册成功的消息。
---- 6、用前面讲述的方法在VB6下实验,获得成功。

---- 关于添加属性的两点说明:

---- 1、原形为"Property {属性/方法名}:数值类型",其中数值类型有:WordBool、WideString、Integer等

---- 2、如果出现"SafeCall function Requires a HResult return type"的错误提示,说明你添加的属性/方法名已经存在,换个名字即可。

----   至此,我们已经成功导出了GridColor(属TWinControl继承类)和ColorPicker(属"Windowless"),写此文仅为抛砖引玉,还有许多功能强大的"For Delphi"的第三方控件的我们可以转化,提醒一点,并不是所有的VCL组件都能转成ActiveX,如Delphi的通用对话对话框。现在我们可以制作自己的ActiveX控件而不受限制了,最大的优点在于:强大&免费!现在,你也能利用自己导出的ActiveX控件用VB写出漂亮的程序来了,而且不用担心注册号之类的困绕! ^_^

实现不同数据库系统之间的数据转移-Delphi资料 使 用WISQL32 同 时 访 问SQL SERVER 和SYBASE 数 据 库Delphi资 使用Session构件可以在打开有密码的库时不用输入密码-Delphi资料 使用SQL实现字段数据的模糊查询-Delphi资料 数据表的索引被损坏了怎么办-Delphi资料 数据库的密码、日期显示-Delphi资料 数据库应用程序开发中图像数据的存取技术-Delphi资料 数据库中图像数据的存取技术-Delphi资料 数据库转换-Delphi资料 数据浏览部件的应用及编程-Delphi资料 数据文件路径的管理-Delphi资料 随意控制DBGrid每一行的颜色-Delphi资料 通过DELPHI实现JAVA调用ORACLE数据库数据 通过编写代码来设置数据库的别名-Delphi资料 为Delphi数据表格增加彩色 为Delphi提供Pack和Undelete功能 为Delphi中数据库报表加网格 为数据库报表加网格-Delphi资料 为数据库建立索引-Delphi资料 掀开SQL Server 7.0的面纱-Delphi资料 限制数据库记录数-Delphi资料 向数据库发送密码-Delphi资料 一个关于字符串的小问题-Delphi资料 用 QuickReport for Delphi 制作报表 用Delphi 开发数据库程序经验三则 用Delphi 实 现 不 同 数 据 库 系 统 之 间 的 数 据 转 移 用DELPHI本身的控件输出TABLE表数据 用Delphi编程访问SQLServer数据库 用delphi编写医院的复杂报表 用Delphi程序维护Paradox 数据表的索引 用Delphi的InterBase数据库开发C&S应用程序 关于ClientDataSet SQL动态参数的问题? 关于在PB的script中直接嵌入SQL 单机使用什么数据库最好! 怎么远程启动一个程序? 一个XSLT的小问题 C++Builder高手回答!!(关于在NOVELL上的应用) 急!请问哪位高手知道怎么用VB来开发组态软件。请多提提建议! 大家好!~新人来了!~ 如何实现MicroHelp即状态栏的分段 麻烦各位介绍几个有SCJP模拟题的网址!谢谢!!!! 关于Read&Data! 现在只能显示最新的120篇,能不能家多点呀,例如最新1000篇? VS.net哪里有正式版的下载呀?大侠们有没有地址呀? 谁能告诉我哪儿有TR下载,不是TRW,谢谢!50分相送~ 求助!!急!急!…… console下可以用ado访问sql server数据库马? 诸位仁兄,帮小弟推荐一本学J2EE的书。 DataModule4.ClientDataSet1.Locate的问题求救! NetLocalGroupEnum 如何使用列举远程用户 谁有有关游戏开发方面的软件工程文章? 各位大虾有无利用VC打开JPEG(JPG)图像并显示的源代码? 有关单文档多视图的一个小问题,答出有100分可拿!!! 如何优化编译,让编译后的文件最小? 请问软件是vfp3.0写的但是现在只有6.0,能转换么?是否需要重新编译?怎么编译,谢谢 vs.net 在PHP中如何把E_MAIL同时发给两个人? 有关注册表和其他一些问题 正版的vs。net几张盘? 有rtlinux的RCS库开发经验的朋友们 ACCESS能够,为什么SQL SERVER却不能?? 怎样生成新窗口? 有一个按扭,点一下后运行别的exe文件,代码怎么编啊? 请教各位大虾,有关带串口的数码相机的咨询! 有一个按扭,点一下后运行别的exe文件,代码怎么编啊?另外,点一个按扭,使c;\file1的文件,拷贝到d;\file2 有rtlinux的RCS库开发经验的朋友们 100分呀,还有挑战性,一个有点难度的问题,再网格控间上如何添加事件!!! 回答问题有钱给...用ATL创建一个全局COM(只启动一个实例)供所有客户端使用 无助,真喜欢一位小姐(不是那个‘小姐’别误会)真太想知道她有没有男友了,请问有什么办法知道么? 我能过高程么 请教各位大侠,如何简单的实现游戏人物动作的控制? 自己开发了一个软件,用于写jsp是自动生成一些get set 以及连接数据库代码的 问个很简单的问题 简单的问题 假设一个C编程高手首次遇到“sinx=x-x^3/3!+x^5/5!-.....+(-1)^n*x^(2n+1)/(2n+1)!” 各位大虾有无用VC处理JPEG(JPG)图像文件格式的源代码? 谁发给我一张自考的学位证书,我的分全给他! BCB6的5张光盘内容?? system.data.sqlclient 和system.data.oledb 请问怎么抓IP包 各位VB数据库编程高手看看啊!有谁能解? 钩子! 铜与一氧化碳反应现象快 关于硫酸铜结晶的问题我们社团的课题是:悬线对结晶的效果的影响.我们现在选择了:铜线、头发丝、铁线.敢问给为大侠,会有什么样的结果?有什么建议? 用与毛皮摩擦过的橡胶棒接触已经带电的验电器,为什么验电器的金属箔片先闭合后张开 手机有什么功能拜托各位了 3Q功能可多了 甲烷细菌属于生态系统 成分,它在生态系统中的物质循环中起到 功能甲烷细菌属于生态系统 成分,它在生态系统中的物质循环中起到 功能 被毛皮摩擦过的橡胶棒与验电器A的金属箔片接触,验电器A的金属箔片张开,如图所示,则验电器A带( )电.被毛皮摩擦过的橡胶棒与验电器A的金属箔片接触,验电器A的金属箔片张开,如图所示,则 滴有酚酞的稀氢氧化钠溶液中通入二氧化硫的现象是什么大神们帮帮忙 细菌 真菌在生态系统中起什么作用?如果没有它们,你想象地球上会是什么样子? 一千零一夜-阿拉丁和神灯的故事 向滴有酚酞的氢氧化钠溶液中通入一定量的二氧化硫气体,溶液红色褪去,酚酞退色的原因是什么 再硫酸铜饱和溶液中,是否还能再溶解硫酸铜粉末?为什么? 阿拉丁和神灯梗概 二氧化硫通入氢氧化钠的酚酞溶液红色褪去,说明二氧化硫具有酸酐通性 潜望镜利用了什么物理原理?成什么像? 《阿拉丁和神灯》讲的是一个发生在( )的故事?阿拉伯?中国?非洲?印度? 在真空中有两个点电荷,其中一个点电荷的电荷量是另一个点电荷电荷量的4倍,他们相距5×十的负二次方米时,相互斥力为1.6牛;当他们相距0.1米时,相互斥力为多少牛,两电荷的电荷量分别为( 潜望镜中的像与物体等大吗? 真菌都是营腐生生活的么? 在十字路口的摄像头拍下的照片,车外很清楚,却看不见车内的人.为什么?光.人教版八上导航P35.#26题.具体一点 潜望镜是不是物理教具 真菌细菌病毒,生殖方式,营养方式(自养异养),(寄生腐生)都说一下 90金币 十字路口安装的监控摄像头,拍下张照片仔细观察照片,发现车的外表很清晰,但几乎看不见车内的人,因为车内的人( ),摄像头几乎无法成像.夜晚,为了不影响司机开车,车内的灯应()? 物理题潜望镜用潜望镜从B点观察物体,如果物体A距潜望镜1.2m,镜筒长0.7m,则从镜中观察到的像与镜水平距离 冷板在喷塑前只除油不磷化可以吗 十字路口监控摄像头和防范的监控摄像头可以储存多长时间的画面 储存后是否保留?请问先在的十字路口或者小路口的防范监控录像 最多可以储存一个多月对吗?储存后所有以前的记录都需要 潜望镜咋做 用毛皮摩擦过的橡胶棒接触验电器的金属球,验电器的金属球箔片张开,再用摩擦过的另一种绝缘材料去接触验电器的金属球,发现验电器的金属箔先合拢后张开,这表明刺丝该重绝缘材料()A带正 细菌和真菌在自然界中起什么作用 ω怎么读,表是什么,TFe表示什么 用毛皮摩擦过的橡胶棒接触带电的金属球,发现验电器的金属破先后合拢后张开,则验电器说明答案原因 细菌和真菌在自然界中的作用是? 如何制硫酸铜结晶请说详细具体一点,谢谢!P.S.我想做大块的那种..貌似很漂亮的说... 用与橡胶棒摩擦过的毛皮去接触验电器的金属球,则金属球带有?电 为什么如题3Q 答案是正电 但为什么 可是与毛皮摩擦过的橡胶棒带负电啊? 如何制作制作火柴盒简易照相机(针孔照相机) ,最好有图解! 硫酸铜溶液得到结晶 要多长时间 过量的SO2通入NaOH溶液化学方程式怎么写 怎样制作最简单的潜望镜如题 物理自制普通照相机如何制造 使人患上疾病的细菌,一般属于( ).A.异养,腐生 B.异养,寄生 C.,异腐生养和寄生 D.都不对 如何利用凸透镜制作简易照相机 初二物理作业,要自制一个相机,为什么我自制的相机是成正立的像 SO2通入NaOH和Ba(OH)2溶液怎样反应?方程式 原因开始没说清..是足量的SO2通入NaOH和Ba(OH)2的混合溶液..恕本人愚钝... 夜晚,几乎看不见车内的人,但车的外表却很清晰,因为车内的人( ) 如何自制一个能拍照的照相机 微生物的营养方式,是腐生寄生还是自养异养?两者怎样区分? 观察照片可以发现,几乎看不见车内的人,当车的外表很清晰,是因为车窗玻璃不透关,摄像头几乎无法成像 这句话哪里错还有 监控图象一般通过计算机转化为数字信息储存在计算机中,不需要胶 物理的照相机原理的题目在天上拍摄地面,成的像在-------之间,更靠近---倍焦距.为什么 用干燥的毛皮摩擦橡胶棒后,将橡胶棒接触验电器的金属球,两片金属箔为什么会张开一定的角度 细菌真菌对生态系统的( )有重要作用 洗衣机排水阀弹簧的作用 有一个验电器,其金属箔已经张开一定角度,现在拿一根用毛皮摩擦过的橡胶棒与验电器的金属球接触,发现金属箔张开的角度增大了,则说明验电器原来带负电.为什么?负负不是相斥吗?电子是怎 细菌在生态系统的什么流动和什么循环中起到重要的作用? 出油阀弹簧的弹性系数怎么确定?材料55CrSi 直径0.7和1,样件测绘中有弹簧,需要进行力,没法做试验,请问其弹性系数是有范围可选,还是固定的, 腐生,寄生,异养这三个有什么区别吗?就是关于分解者,细菌,真菌的生活方式做谈 下列各物质能与石灰水反应但无明显现象的是A一氧化碳 B稀盐酸 一氧化碳与石灰水反应有下列各物质能与石灰水反应但无明显现象的是A一氧化碳 B稀盐酸 一氧化碳与石灰水反应有何现象?石 调压阀弹簧压缩量请问调压阀弹簧的压缩量应设置为自然长度的多少? 用跟毛皮摩擦过的橡胶棒接触带电的验电器的金属球,发现验电器的金属箔片完全合拢后又张开,则A.验电器原来带负电,后来带正电.B.验电器原来带正电,后来带负电.C.验电器先后都带正电.D.验 生态系统的主要功能 柴油机上气阀弹簧为什么是两个? 用与毛皮摩擦过的橡胶棒接触带电的验电器的金属球,发现验电器的金属箔片先后合拢后张开,则验电器原来带正电,后来带负电.这是为什么呢?1.橡胶棒带负电,验电器带正电,橡胶棒上的电荷与
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘