Delphi编写自定义控件以及接口的使用(做了一个TpgDbEdit)
写给觉得自己编写Delphi很复杂的人,包括自己。
Delphi自己写控件其实并不难,难的在于开发复杂的控件。(其实,编程,很多东西都是会了就不难,因此,我怕自己日后觉得自己写控件很难,特意在这记录自己写控件的过程,顺便也写下接口的使用)
第一步:控件代码:
下面是控件的一个Unit内容:
代码 unit pgdbedit; interface uses
SysUtils, Classes, Controls, StdCtrls, CnEdit; const
IID_pgDBConInterface='{88CEA70D-0506-4CC0-ABB0-4BDBFA0DDBCE}'; type
TdbType = (dbText, dbInteger, dbFloat, dbBit, dbTime, dbBlob); //文本类型 IpgDBConInterface = interface(IInterface) //定义数据库操作控件的接口
[IID_pgDBConInterface]
//Stdcall是指示函数的参数入栈方式是从右到左
function GetCanUpdate: Boolean;
procedure SetCanUpdate(value: Boolean);
property DB_canUpdate: Boolean read GetCanUpdate write SetCanUpdate; //是否更新数据。
end;
TpgDbEdit = class(TEdit, IpgDBConInterface)
private
{ Private declarations }
FCanUpdate: Boolean;
function GetCanUpdate: Boolean;
procedure SetCanUpdate(value: Boolean);
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property DB_canUpdate: Boolean read GetCanUpdate write SetCanUpdate; //是否更新数据。 implementation function tpgdbedit.GetCanUpdate: Boolean;
begin
Result:=FCanUpdate;
end; procedure tpgdbedit.SetCanUpdate(value: Boolean);
begin
FCanUpdate:=value;
end;
end.
说明:这里没有RegisterComponents是因为打算创建2个包,一个是运行时的包以及设计时的包。
第二步:创建注册单元:
下面是这个单元的源码:
代码 unit pgControlsRegister; interface
uses
Classes; procedure Register;
{* 控件、组件编辑器、属性编辑器注册过程} implementation uses
pgdbedit; procedure Register;
begin
RegisterComponents('pgControls', [TpgDbEdit]);
end; end.
第三步:创建运行时的包:
(文件->新建->其它->Package)
在创建出来的Package中点上面的Add按钮,把第一步中的单元添加进去,然后点上面的Options按钮,在Usage Options中选择Runtime only。点击OK关闭掉Options,然后点Compile进行编译,系统会提示需要加入其它包的,点确认就行了,系统会自动添加必要的包。这样,运行时的包就创建完了。
第四步:创建设计时的包:
(文件->新建->其它->Package)
在创建出来的Package中点上面的Add按钮,把第二步中的单元添加进去,然后点上面的Options按钮,在Usage Options中选择Designtime only。点击OK关闭掉Options,然后点Compile进行编译,系统会提示需要加入其它包的,点确认就行了,系统会自动添加必要的包。这样,设计时的包就创建完了。
有关这两个包的概念,大家可以去:
http://www.cnpack.org/showdetail.php?id=510&lang=zh-cn
看下介绍,我都是看了介绍才知道,才会去这样弄。这里,我们也是安装设计时的包就行了。运行时的包不用管。
原创作品出自努力偷懒,转载请说明文章出处:http://www.cnblogs.com/kfarvid/
http://www.cnblogs.com/kfarvid/archive/2010/08/05/1793219.html
Delphi编写自定义控件以及接口的使用(做了一个TpgDbEdit)的更多相关文章
- Qt编写自定义控件二动画按钮
现在的web发展越来越快,很多流行的布局样式,都是从web开始的,写惯了Qt widgets 项目,很多时候想改进一下现有的人机交互,尤其是在现有的按钮上加一些动画的效果,例如鼠标移上去变大,移开还原 ...
- delphi编写winsocket的流程
delphi编写winsocket的流程 1.在窗体创建的时候启用动态连接库(引用winsock) var aWSAData:TWSAData; if WSAStartup($0101, ...
- Qt调用Delphi编写的COM组件
这个问题捣鼓了两天,现在终于解决了,做个笔记分享给大家,以免走弯路 起初,我的想法是在DLL中写一个interface并从函数中导出这个interface,像这样的代码 ICom1 = interfa ...
- 转 : 用Delphi编写安装程序
http://www.okbase.net/doc/details/931 还没有亲自验证过,仅收藏 当你完成一个应用软件的开发后,那么你还需要为该软件做一个规范化的安装程序,这是程序设计的最后一步 ...
- delphi编写dll心得, 谢谢原作者的分享。转
delphi编写dll心得 1.每个函数体(包括exports和非exports函数)后面加 'stdcall;', 以编写出通用的dll2.exports函数后面必须加'export;'(放在'st ...
- DELPHI编写服务程序总结
DELPHI编写服务程序总结 一.服务程序和桌面程序的区别 Windows 2000/XP/2003等支持一种叫做“系统服务程序”的进程,系统服务和桌面程序的区别是:系统服务不用登陆系统即可运行:系统 ...
- 利用Delphi编写Socket通信程序
一.Delphi与Socket 计算机网络是由一系列网络通信协议组成的,其中的核心协议是传输层的TCP/IP和UDP协议.TCP是面向连接的,通信双方保持一条通路,好比目前的电话线,使用telnet登 ...
- [翻译]Writing Custom Common Controls 编写自定义控件
摘要:介绍如何编写自定义的控件,用在报表的窗体上(如Edit,Button等) Writing Custom Common Controls 编写自定义控件 FastReport contains ...
- Delphi编写WebService体会
源:Delphi编写WebService体会 Dispatch: 派遣,分派 Invoke: 调用 Invokable: 可调用接口 TReomtable: WebService中自定义类都是继承自该 ...
随机推荐
- HW-找7(测试ok满分注意小于等于30000的条件)
输出7有关数字的个数,包括7的倍数,还有包含7的数字(如17,27,37...70,71,72,73...)的个数 知识点 循环 运行时间限制 0M 内存限制 0 输入 一个正整数N.(N不大于300 ...
- jq选取对象的方法
$("#找id的")$(".找样式的") $("div[id]") 选择所有含有id属性的div元素 $("input[nam ...
- 记个maven无法识别JAVA_HOME的问题 Error: JAVA_HOME is not defined correctly.
Error: JAVA_HOME is not defined correctly. We cannot execute /Library/Java/JavaVirtualMachines/jdk1. ...
- centos 6.5 x64编译有python的vim7.4
wget ftp://ftp.vim.org/pub/vim/extra/vim-7.2-extra.tar.gzwget ftp://ftp.vim.org/pub/vim/extra/vim-7. ...
- php 中文字符串首字母的获取函数
这篇文章介绍了php 中文字符串首字母的获取函数,有需要的朋友可以参考一下 function chineseFirst($str) { $str= iconv("UTF-8",&q ...
- 解决IE6下Position:fixed问题(只用css)
在IE6.0及以下版本的浏览器里是不支持position:fixed.而在IE7,IE8,firefox,opera,chrome都可以完美的支持此特性的.解决此问题的要点主要有: 1).容器要有一个 ...
- [CSS]font- 属性
所有浏览器都支持 font 属性. 注释:任何的版本的 Internet Explorer (包括 IE8)都不支持属性值 "inherit". 定义和用法 font 简写属性在一 ...
- Chrome远程调试Android上Chrome的页面
下载最新的google chrome canary 手机chrome开启usb网页调试,如图所示: 在终端运行 ? SHELL adb forward tcp:9222 localabstract:c ...
- web2py--------------用web2py写 django的例子 --------建立一个投票应用(2)
建立模型 我们在models下及那里polls.py 文件内容如下 # -*- coding: utf-8 -*- pollsdb=DAL(uri='sqlite://polls.db') polls ...
- 021,lambda 表达式
021,lambda 表达式 匿名函数: 快速定义单行的最小函数,是从lisp借用来的,可以用在任何需要函数的地方 >>> def ds(x): return 2*x + ...