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

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

初创公司Treasure Data:每天处理7000亿行数据的20万次查询 豌豆荚王俊煜:将推支付SDK 与开发者3:7分成 英特尔-百度移动应用测试中心(MTC)正式启动 Intel将在2014年为数据中心用户定制低功耗SoC芯片 情绪低落?没事,让计算机来帮你! 水果生意难做 前新浪架构师徐佳转行试水挖煤 思考软件开发中的快与慢 Apache CouchDB注入新鲜血液,整合分布式技术 CSS Shapes:Web设计人员的新工具 Android 4.3正式发布:四大新功能一览 史玉柱的创业经验谈 3G门户和GO桌面:海外推广的生意经 系统级编程语言性能大PK D语言成首选 解读Facebook第二季度财报 移动业务风生水起 如何避免失败,像Google一样玩转大数据 首届游戏运营技术论坛隆重开幕,共论大数据时代的游戏运营之道 OpenStack Swift遇到了Erasure Code 微软Win7 IE11开发者预览版发布 开始改进开发工具讨好开发者 个性化推荐服务商百分点宣布B轮融资1000万美金 全球著名互联网企业背后的开源力量 基础设施对决Facebook vs. Google:差距绝不是一点点 Amazon Q2财报同比转亏,但AWS反其道而行:高歌猛进! 开拓海外市场的两年:海外上线小技巧 SDCC 2013首批讲师名单出炉 一线工程师唱主角 [开源推荐] 跨平台的.NET运行环境 Mono 3.2发布 Heroku发布API平台Beta版 采用OAuth2.0安全授权 大数据时代:移动数据能为我们带来什么? iOS开发经验谈:如何提高应用开发效率? 贝索斯:你否定亚马逊的现在 我决定亚马逊的未来 谷歌新产品Chromecast:一夜之间价格从35美元飙至100美元 移动周报:苹果5周年限免神作,BADLAND开发者访谈 被背叛的遗嘱 能提供C++制表的源程序吗?THANK YOU!!!!!!!! 还有6天 关于Socket编程的几个问题 哪里有莫文蔚的《the way you make me feel》国语版的? 切~~~~~~~~菜~~~~~~~~~ 斑竹,我觉得这几天CSDN上很无聊,怎么老有人弱智地问重复的或者以前已有答案的问题?他们不知道可以search先? 谁知道哪里有bmp图片可以下载,给个详细网址,多谢 VC 兼职? 荷兰国旗问题 ASP刚学,用什么方式好吗 斑竹!!!!!!!!!!!!!!!! 关于IE浏览 请问vb如何访问foxpro 6.0的数据库,最好有源程序,谢谢. he_cti@163.net 算了,散分 我散,我散,我散散散 散3 发分!!!! 发分!!!!! 发分!!!!!!!! 发分!!!!!!!!!!!! 发分!!!!!!!!!!!!!!!!!!! 请问如何去掉测试版软件的“购买”提示框???急急急急!!! 有关获取HTML中Frames的问题? 给分!!!!!啊 给分!!!!!啊!! 给分!!!!!啊!!!!!! 给分!!!!!啊!!!!!!!!!!!!! 给啊!!!!!!!!!!!!! 不是俺蓄意谋两位帮主的反,实在是 ... APPLET连接数据库。。。(我已经每粉了) 千分散尽不复来!!! 千分散尽不复来!!!! 千分散尽不复来!!!!! 千分散尽不复来!! 千分散尽不复来!!!!!!!! 千分散尽不复来!!!!!!!!! 千分散尽不复来!!!!!!!!!!!!! 用分把灌水乐园咽死!!!!! 千分散尽不复来!!!!!!!!!!!!!!!!! 千分散尽不复来!!!!!!!!!!!!!!!!!! 千分散尽不复来!!!!!!!!!!!!!!!!!!! 千分散尽不复来!!!!!!!!!!!!!!!!!!!!! 千分散尽不复来~ 千分散尽不复来~! 请教数据窗口的问题 千分散尽不复来? 千分散尽不复来?! 有LVS_OWNDATA属性的CListCtrl 加图标的问题,25分 在做会员注册时,在添加新数据页,程序一运行就在RS.updata出错,为什么(原程序) 高手请你回答我啦!!!! 甲数的60%相当于乙数的45%,已知乙数是30,甲数是多少? 甲数的五分之三等于乙数的三分之二 甲数是60乙数是多少 甲数的16%,等于乙数的32%,甲数是80,乙数是( ),如果乙数是80,甲数是( ) 急,要明白的甲的45%等于乙的60%,乙是甲的( )%? 甲数的五分之一等于乙数的三分之一,甲数是60.乙数是多少 已知甲数的五分之二等于乙数的二十五分之八,甲乙两数的比是多少?如果甲数是80则乙数是多少 甲数的45%等于乙数的105%,甲数( )乙数填大于小于或等于 甲数的3分之2等于乙数的5分之4,乙数是60,甲数是( ) 已知甲数的5分之2等于乙数的25分之8,甲数是80,则乙数是几?要全 (选择题)如果甲数的60%等于乙数的2/3,那么( ) 甲数的20%与4的和等于乙数的3分之2,甲数是80,求乙数? 甲数是24,乙数的3分之1等于甲数的8分之1,乙数是多少 如果甲数的3/4等于乙数的2/3,那么甲数与乙数的比是多少? 甲数比乙数多60%,乙数比甲数少百分之几? 甲数的4分之3等于乙数的5分之3,甲数是80,乙数是()是100还是150或者80 如果甲数的3倍等于乙数的2分之一,那么甲数与乙数的比是几比几. 32吨比60吨少百分之几?(百分号前保留一位小数);甲比乙多40,乙是80,甲比乙多百分之几?甲数是20,乙数是30,乙数比甲、乙两数的和少百分之几? 今天1元人民币等于多少日元? 甲数的2/3等于乙数,那么甲数比乙数=( ) 甲数是80的5分之4,乙数的百分之60是12,甲数比乙数多多少 现在4万日元等于多少人民币 甲数是乙数的80%,乙数比甲数多百分之几? 甲桶油是乙桶油的80%,乙桶是甲桶的百分之几?甲桶油比乙桶油少百分之几?乙桶比甲桶多百分之几? 今日日元汇率 1日元等于多少人民币? 甲数是乙数的百分之八十,乙数比甲数多百分之几? 甲数是乙数的倒数,乙数扩大10倍后是50,甲数是() 1600的80%怎么算 甲数比乙数多百分之60,乙数比甲数少百分之几急用 甲数是50,比乙数大10,甲数是乙数的( )%,乙数是甲数的( )%;甲数比乙数多()%;乙数比甲数少() 1600乘百分之四十等于? 若甲数比乙数多百分之六十,则乙数比甲数少百分之几 为什么 甲数是乙数的倒数,乙数扩大到原来的10倍后是50,甲数是 一人数的8倍加上68等于80的百分之九十这个数是几 甲数比乙数多百分之60,乙数比甲数少多少 甲数的5分之1等于乙数的6分之1,乙数是10,求甲数 90加百分之60X等于102,解方程 甲数比乙数多百分之六十,乙数比甲数少多少怎么列式最好? 甲数的50%等於乙数的5分之4,如果甲数是10,乙数书多少?如果乙数是10,甲数是多少? 用+ 、-、×、÷、( )和分数把六个6组成四个算式,使运算的结果等于25. 甲数是20,乙数比甲数多百分之60,甲数比乙数少百分之几 甲数是50,甲数的10分之1和乙数的2分之1相等,乙数是多少 2,4,6,8中间用+-×÷只能一次算要结果等于25怎么算? 三个数相加等于14 三个数相乘等于40 求这三个数分别是多少 求详细步骤 甲数的3/8是乙数的80%,乙数是60,乙数比甲数少百分之几 甲数的50%等于乙数的5分之4,如果甲数是10,乙数是多少?如果乙数是10,甲数是多少?要列式计算,不要方程 三个数相乘是40,三个数相加等于14,并没有两个数相等.求这三个数分别是多少 60比20多百分之几?,32千米比80千米少百分之几?,甲数是28,是乙数的80%,乙数是多少?. 5是10的50%,10是5的()% 甲数是40,乙数是50,甲数是乙数的(). 多少相乘等于16相加等于14! 甲数是60,比乙数多百分之50,乙数是多少? 已知甲数的8分之1等于乙数的10分之1甲数是80则乙数是多少 2+6+10+14+...+210+214等于几? 甲数是乙数的60%乙数比甲数多百分之几 甲乙两个两位数,甲数的9分之8等于乙数的80%,甲数最大是(),乙数最小是() 甲数的45%等于乙数的60%,乙数是甲数的( )%快快快!回答后加悬赏 已知甲数的4分之1等于乙数的3分之2,如果乙数是60,那么甲数是几 甲数是乙数的80%,乙数是甲数的()%我要式子, 甲数的45%等于乙数的60%,乙数是甲数的百分之几? 甲数的三分之二等于乙数的60%,那么甲数与乙数的比是( ):( ) 甲数是乙数的125%,那么乙数是甲数的80%,请能仔细讲解为什么是甲数是5,乙数是4,怎么算的
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn