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

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写出漂亮的程序来了,而且不用担心注册号之类的困绕! ^_^

终于来了,微信企业号正式开启公测! 【问底】王帅:深入PHP内核(一)——弱类型变量原理探究 谷歌Kubernetes专访:未来BigTable开发只是课后习题 首届“最具价值CTO”评选来啦!我们在找你! 【CTO俱乐部走进顺丰总部】活动图文直播进行中 中国第一个云主机评测发布:天翼云性价比第一、青云质量第一 Ruby 2.1.3发布,降低内存消耗、修复众多Bug! OpenHW2014开源硬件总决赛鏖战西安 AMD力推异构计算 《坦克世界:闪电战》:PC转手游,不止免费! 【讲师】道里云毛文波:网络虚拟化与SDN实现Docker连通 性能测试:SequoiaDB vs. MongoDB vs. Cassandra vs. HBase 华云数据推运营型PaaS Plus平台,联合Tmax走出“去IOE”的云化之路 聚焦移动新势力 MDCC 2014免费展位团队名单公布 详解Google Authenticator工作原理 云计算的乐高玩具,Docker从根本上改变应用程序开发 【先锋】eSage缔造异构虚拟化管理技术,做数据中心核心思想执行者 Uplinq2014:亲身体验Vuforia与智能眼镜设备 MDCC 2014 移动开发者大会议程全面揭晓! 顺丰模式:物流行业“互联网化”的科技之路 移动应用云服务工具APICloud宣布完美适配iPhone6 从应用分发到能力开放 华为开发者联盟沙龙上的共赢理念 SOOMLA框架:移动游戏分分钟创建个虚拟商店 Facebook:如何让应用适合所有系统、带宽以及屏幕 Docker实践者不能错过2014 Container技术大会的九大理由!(讲师议题全面揭晓) 2014全球云计算大会中国站(CC China)精彩集锦 腾讯X5浏览服务正式开放 30多款APP成为首批受益者 Node.js设计经验谈 LeanKanban University首位中国认证讲师路宁:看板会为更多国内企业带来深刻变革 环信IM沙龙纪实:无分享不IM,无社交不未来 【工具推荐】ESL:更简洁、更高效的标准加载器 【先锋】亲加通讯云:以云服务模式为App提供社交引擎 改进后的开开关关窗口特别酷 请问在VB6与VB.NET在数据库方面有多大的区别呀?? 关于C语言 寻找将 AUTOCAD 文件格式转换成 PDF 格式的软件 谁有包含开发接口的OCR软件? 求助:没有紧急修复软盘,怎样恢复win2kserver的双启菜单。 请问怎么得到DATAGRID1中记录的总条数! 转发:一粒沙子的爱情故事 公司發過年禮物了 ,哎 ,原來是一塊石英表 ,雖然是情侶表 ,卻只發一塊 ,不是一對 ,你們呢!..... ??有解密高手吗?或者哪里有这样的论坛?? 怎样用多线程显示多个form? VB串口发送大数据量时其他程序没有反应? 这句sql语句怎么写?低手请教! 数据库高手请进,报表问题!!! 请介绍VC测试内存泄漏的好工具. select number from table需要分别得到所有的值,如果做? 请问如何将下载的控件加到delphi的控件面板上?先谢谢了!!! 一个form里面如何将6个radiobottom 分成两组? 开开关关IE窗口的小程序 请各位高手介绍一下win2K,wingate,sygate这些做上网服务器各使用什么技术?NAT?SOCK5? WIN2000 PRO. 怎样才能通过 NT4+MSPROXY 上网? ASP中如何实现等待几秒再执行下一步的功能? 数据库的烦恼之二 如何在程序中播放Power Point? 散分,帮我看看主机链接是否正常 BDE数据库的问题。 win2000中怎样配置开机启动文件(如98下的Msconfig) 痛苦的人请看 http://www.csdn.net/expert/topic/425/425671.shtm (UP者有分!) 关于strlen函数 高手请进 vc中是否有函数readline(),该如何调用, 如何将我写好的.java文件编译在单片机的系统中? 下载的.rar格式的文件怎样打开 怎么是查询(select)不受更新(update)的阻塞? 请老大帮帮我啊 怎样获得WIN98系统的日期格式啊? 超级终端的传输格式 关于strlen函数的问题 请教:关于soft-ice软件的问题 谁有Exange 2000操作手册之类的东东?还有下载ftp地址和密码,谢谢!收到马上给分!急用! NetUserAdd怎么用,我下面是否用错了,结果会蓝屏,dump!!(KMODE_EXCEPTION_NOT_HANDLED) 以超级终端YModem协议传输文件时,数据包的格式 想知道到底有多少公司用到ejb,j2ee,rmi? asp:HyperLinkColumn中的DataNavigateUrlFormatString如何带多个参数? 有关DataReport的使用 我怎样通过dcom调用applationserver上的方法 请问inter c++ compiler的头文件定义问题 请问哪些行业用Powerpoint比较多? 关于处理文件的问题,请指点…… 请问有谁知道只封锁ctrl+alt+del的方法. 很适合回去好好研究!欢迎指正!! 需要帮助,针对ActiveX OCX怎么能够对其数字签名从而降低其在IE中的安全性? 为什么夏天下雨打雷,冬天就不打了 昆虫有哪些会咬人? 一共有240千克水果糖,每袋装四分之一千克.装了总量的四分之三.已经装完了几袋 为什么春天下雨不会打雷 虽说我是男生,但我怕虫子,尤其是带有自然保护色的虫子我更害怕,我怕它们咬我...我想问虫子在什么情况下咬人?我不会杀死它们,因为它们也是地球上的一员,即使是最不起眼的蚂蚁 什么蚊子咬人特别痒?什么蚊子咬人特别痒,咬的地方肿的有大又红,肿的和瓶盖一样,知道的一定要告诉我, 为什么会打雷下雨 为什么会多个春天 请问这是什么虫 被蚊子叮咬后为什么会红肿发痒?我要的是具体原因. 春天下雨为何不打雷?秋天下雨好像也不怎么打雷,为啥呢? 到底是鸡生蛋还是蛋生鸡?先有鸡还是先有蛋? 是先出来的鸡还是先来的蛋 为什么冬天下雨不打雷夏秋季节下雨时经常会听到滚滚雷声,在春季也较为常见打雷,而在冬季却极难听到雷声,这是什么原因呢? 先是鸡生蛋还是蛋生鸡 鸡和蛋那个先出来 冬天下雨为什么不打雷 究竟是鸡生蛋还是蛋生鸡呢? 奶糖每斤2.8元巧克力糖每斤3.15元,买巧克力糖6斤我奶糖若干斤混合后,平均每斤3元奶糖买了几斤 一只鸡可以生几年的蛋? 是鸡生蛋还是蛋生鸡蛋或鸡 是鸡先出来还是蛋先出来 为什么要打雷下雨,为什么有冬天夏天... 是蛋生鸡还是鸡生蛋? 有一堆糖果,其中牛奶糖有180颗,巧克力占总数的3分之1,花生糖的颗数是这两种糖果总颗数的5分之1.这堆糖果一共有多少颗?()m增加它的5分之2后是35m.一个数的5分之4是8,这个数的4分之3是( ). 为什么要打雷下雨~为什么有冬天夏天~(是个难题)= = 食品店分装糖果,每袋装有0.25千克酥糖,装有0.15千克水果糖.当水果糖用去5.4千克时,酥糖用去多少千克? 有两包糖,每包糖内装有奶糖、水果糖和巧克力糖.已知:(1)第一包糖的粒数是第二包糖的3倍:(2)在第一包糖中,奶糖占20%,在第二包糖中,水果糖占40%; (3)巧克力糖在第一包糖所占的百 鸡旁边有个刀,和个蛋,是什么成语 到底是鸡生蛋,还是蛋生鸡? 先出鸡 还是先出蛋 一把刀一只鸡一个禁一个猴子打一个成语 到底是蛋生鸡,还是鸡生蛋. 鸡吃蛋怎么办 成语什么鸡什么蛋 到底是鸡生蛋还是蛋生鸡呢? 蚊子飞入耳朵会有什么后果昨天晚上睡觉时有蚊子飞到耳朵里,能清楚听到蚊子在耳朵里的嗡嗡叫声,后来我用掏耳朵的掏,掏了之后就没反应了,可是可以确定蚊子并没被掏出来,可耳朵没任何 ( )鸡( )蛋 一个成语! 到底是鸡生蛋还是蛋生鸡啊 蚊子飞到耳朵里面怎么办?今天下午放学回家以后(本人6年级)在洗手间洗手,突然一只蚊子,一只讨厌的蚊子!飞到我耳朵里去了,刚飞到耳边时拼命的动,我马上去挠,结果进去了,我非常担心,但 是先有鸡呢,还是先有鸡蛋? 解释一下. 到底是鸡生蛋吗?还是蛋生鸡? 小虫子飞进耳朵里怎么办? 食堂买来青菜和胡萝卜,青菜2分之1吨,买来的青菜比胡萝卜多10分之3,萝卜多少吨? 为什么被蚊子咬后会痒?只有母蚊子咬人么? 这是什么?蚊子不像蚊子,蜘蛛不像蜘蛛, 白菜和罗卜28千克白菜每千克0.84元萝卜每千克1.16元买白菜一共花了岁少元用两种方法计算 食堂运来青菜比萝卜多2/3,萝卜比青菜少2/3吨,大白菜比胡萝卜少1/7吨运来大白菜多少吨?【快. 被蚊子叮咬后为什么会痒呢? 白菜比罗卜多18筐,白菜的筐数是罗卜的4倍,罗卜有多少筐? 蛋鸡下软壳蛋是什么原因,如何才能避免是冷的吗 母鸡为什么会下软壳蛋? 妈妈买了5千克白菜和8千克箩卜,一共用去23.04元.每千克白菜1.92元,每千克箩卜多少元? 我现在有黄瓜西红柿豆芽豆腐白菜胡萝卜红辣椒这些材料能做什么素食么. 花蚊子一定就比普通蚊子咬人厉害吗?我在家发现花蚊子咬的包比普通的包大, 罗卜和白菜一共650斤,罗卜和白菜比是13:5萝卜白菜各多少 第一中学食堂运来白菜420千克,比萝卜的80%还多30千克,运来萝卜多少千克' 蚊子在叮咬人的时候,为什么感觉不到疼痛 卖出白菜60千克,比卖出罗卜的6分之5少50千克.卖出罗卜有多少千克 请问:这是什么虫子?前两天我妈胳膊上莫名其妙的长了10多个红疙瘩,很痒,然后我在她被子里发现了这个虫,有绿豆大吧.在这之前我们去广州来着,是不是从那里带回来的虫子?在广州我也长过 咬人的蚊子气温达到多少度就不出来咬人了?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn