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中自定义类都是继承自该 ...
随机推荐
- vs调试windows mobile程序时布署时间太长的解决办法
vs调试windows mobile程序时布署时间太长的解决办法 1.VS平台上,选工具-选项-项目和解决方案-MS BUILD项目生成输出详细信息中选择“诊断”,目的是在调试窗口中看出哪个过程编译的 ...
- 【转】querystring传递中文出现乱码的问题
原帖地址:http://www.cnblogs.com/Fly-sky/archive/2009/04/22/1441015.html 现象:近期项目中用到查询字符串传值,如果传递的是英文一切正常,但 ...
- HDU 1069 Monkey and Banana(动态规划)
Monkey and Banana Problem Description A group of researchers are designing an experiment to test the ...
- MFC下拉框使用方法
Combo Box (组合框)控件很简单,可以节省空间.从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的.用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本 ...
- 顺序表 C++模板实现
#include <iostream> using namespace std; template <typename T> class list{ private: int ...
- 动态链接库找不到 : error while loading shared libraries: libgsl.so.0: cannot open shared object file: No such file or directory
问题: 运行gsl(GNU scientific Library)的函数库,用 gcc erf.c -I/usr/local/include -L/usr/local/lib64 -L/usr/loc ...
- DataGridView 绑定数据后修改列类型
dataGridView1.DataSource = dt; dataGridView1.Columns.RemoveAt(); //删除要被替换的列 DataGridViewLinkColumn l ...
- java se基础
Super和this的详解 http://wenku.baidu.com/view/365d9100a6c30c2259019e44.html Java 采用三个显式 也就是说 必须明确指定 关键字来 ...
- How to fix “Duplicate sources.list entry …” issue
The correct format of repository source line is <type of repository> <location> <di ...
- Python Socket,How to Create Socket Cilent? - 网络编程实例
文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...