来自东子哥的Blog
1、Include
2、Assign
在Delphi的VCL有一个非常重要的类TPersistent,从它的名字(可持续类)上可以知道该类提供了可持续性的功能,Vcl的基类TObject本身不支持Rtti(运行时类型信息),而TPersistent类通过{$M+}编译指令提供了RTTI的功能,打开了M开关后,Delphi在编译该对象时,会把对象的类型信息也编译进可执行文件,这样在运行时就可以动态的获得对象的属性,方法等信息,所有的VCL可视化组件都是从TPersistent派生出来的,因此可以将组件信息保存成DFM文件,可以在运行时加载。
procedure Assign(Source: TPersistent); virtual;
这个方法其实和Java中的Clone方法和C++中的Copy Constructor构造函数一样,就是用来把一个源对象的属性复制到目标对象中。略微有些不同的是Java中的Clone和C++中的拷贝构造函数直接返回源对象的副本,而调用Assign方法前,我们需要先Create一个目标对象,然后再复制源对象的属性。默认的TPersistent对象的Assign方法只是简单的调用源对象的AssignTo方法来复制属性,而TPersistent的AssignTo虚方法只是简单的抛出一个异常。也就是说TPersistent方法并没有实现任何有意义的功能,那么对于派生自TPersistent类的对象要想提供克隆的功能都需要重载TPersistent的Assign或者AssignTo方法来实现自定义的复制功能,在Vcl中很多的类都实现了定制的Assign方法,比如最常见的TStrings类就重载了Assign方法提供了字符串列表的复制功能,在程序开发中经常会有需要将一个列表框的选项全部移动到另外一个列表中表示选择了全部的内容,这个过程其实就是一个克隆的过程,
3、动态创建的控件的查找(代码)
procedure TForm1.FormCreate(Sender: TObject);
var
begin
end;
procedure TForm1.btn1Click(Sender: TObject);
var
begin
end;
4、如何在Panel中嵌入Dll中的Form
Dll代码:
library FormDLL;
uses
{$R *.RES}
exports
begin
end.
unit FormInDll;
interface
uses
type
var
procedure Create_FormInDllAsChild(AParent: TWinControl);
procedure Free_FormInDllAsChild;
implementation
{$R *.DFM}
procedure Create_FormInDllAsChild(AParent: TWinControl);
begin
end;
procedure Free_FormInDllAsChild;
begin
end;
procedure TfrmFormInDll.CreateParams(var Params: TCreateParams);
begin
end;
procedure TfrmFormInDll.Loaded;
begin
end;
procedure TfrmFormInDll.Button1Click(Sender: TObject);
begin
end;
end.
调用DLL程序代码:
unit Unit1;
interface
uses
type
var
implementation
{$R
procedure Create_FormInDllAsChild(AParent: TWinControl); external 'FormDLL.dll';
procedure Free_FormInDllAsChild; external 'FormDLL.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
end;
end.
5、国际化问题
GetText是比较完善地国际化I18N解决方案
Gettext
ftp://ftp.gnu.org/gnu/gettext/
http://man.chinaunix.net/linux/lfs/htmlbook/appendixa/gettext.html
delphi实现: http://sourceforge.net/projects/dxgettext/
6、Never-build package 'AAAAA' requires always-build package 'BBBB'
提示我们需要直接编译包‘BBBB',
需要将BBBB这个bpl包重新编译, 选择project option;
然后选择Explicit rebuild;
7、解决文件型数据库互锁问题
多个程序同时读取一个文件型数据库时,经常遇到库互锁问题,如mdb库、sqlite库等
解决这个问题除了用数据库本身提供的解决互锁的方法,
另外一个好的解决方法,采用进程间通信的方式,相互通知自己是否在操作库。
8、SQL Server
1069:是由于SQL Server登录失败引起的。
http://www.webym.cn/blog/article.asp?id=289
17052: http://support.microsoft.com/kb/314947
9、判断字符串是不是全是数字或字符
function IsNumberic(Vaule: string): Boolean; //判断Vaule是不是数字
var
begin
end;
function IsEnCase(Vaule: string): boolean; //判断Vaule 是不是字母
var
begin
end;
10、让输入框只能输入数字
procedure KeyPress(Sender: TObject; var Key: Char);
begin
end;
11、注册一个新的文件类型
{-------------------------------------------------------------------------------
-------------------------------------------------------------------------------}
function CreateNewExt(FileExt, Filetype, FileDescription, MIMEType, ExecName: string): Boolean;
var
begin
end;
12、转换一个字符串为数字
StrToIntDef(const S: string; const Default: Integer): Integer;
这个函数相对会比StrToInt好用。
13、根据名字操作控件
TGroupBox(FindComponent('grp1'));
即可对一个叫grp1的TGroupBox控件进行控件
14、ListView的行改变颜色
首先ListView的设置OwnerDraw为False
然后在OnCustomDrawItem中,添加代码:
if Item.Index mod 2 =0 then //这个条件可以根据实际需要改变
else
15、TStringList类哈希表操作
var
begin
end;
16、为自己创建的上下文菜单的菜单项添加图标
var
begin
。。。。。。。。
。。。。。
end;
待续。。。
来自东子哥的Blog