本贴收藏本人编程中遇到的点滴编程技巧,其中包括网友告知的,论坛收集的及个人总结的。大部分来自爱Delphi(http://www.aidelphi.com)与CSDN。整理于此,以备后用。
1、序数类型(或变量)的取值范围
Delphi Help中提到“Ordinal types include integer, character, Boolean, enumerated, and subrange types.”也就是说,序数类型包括整数,字符,布尔,枚举和子域类型。要知道它的取值范围,可以使用Low与High两个函数。但Low与High函数的返回结果一般就是所传参数类型的最大值,所以还要使用Ord函数将其转换为整形。如: ShowMessage(IntToStr(Ord(High(char)))); 结果是255。
2、覆盖重写控件属性
在编写控件时,如果要用父类已经存在的属性的名称定义一个新的属性,也就是重新定义父类已经存在的属性,使其有不同的类型,产生不同的作用。如:
type
TMyPanel = class(TCustomPanel)
private
FAlignment: Integer; // 将父类的Alignment属性由TAlignment类型改为Integer类型。
private SetAlignment(Value: Integer);
public
property Alignment: Integer read FAlignment write SetAlignment;
end;
implementation
procedure TMyPanel.SetAlignment(Value: Integer);
begin
if (Value >= ord(Low(FAlignment))) and (Value <= Ord(High(FAlignment)))
and (Value <> FAlignment) then
begin
FAlignment:= Value;
Inherited Alignment:= TAlignment(FAlignment); // 调用父类的Alignment.
end;
end;
{ 本技巧感谢艾真保的热心解答 }
3、使用回车代替Tab键
使用回车代替Tab键移动焦点的又一方法:
procedure TfrmEditBase.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
begin
if Shift = [ssShift] then
Perform(WM_NEXTDLGCTL, 1, 0) // 往回移
else
Perform(WM_NEXTDLGCTL, 0, 0); // 往后移
end;
end;
4、在程序中运行别的程序
在很多情况下,如在线更新,需要运行额外的程序来完成一些任务,且多数时候这些任务是直接或间接地操作程序自身的。这时要注意,运行了额外程序之后要及时正确地退出程序本身,这里的“退出”就不能正常的使用MainForm.Close来完成了,因为这样的话,程序会等待额外程序运行并返回后才会退出,如果是在线更新,则程序本身就因为共享冲突而更新失败。所以要用halt过程不正确的终止程序才行,必要时还要使用ChDir()函数改变当前目录,以免该程序还在占用该目录,导致某些任务执行失败。
5、Directory与Path
按照中文直译过来,Directory就是目录,Path是路径。从以下两个例子可以看出来:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(ExtractFilePath(Application.ExeName));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(ExtractFileDir(Application.ExeName));
end;
在Delphi6中建立一个默认的Windows Application,运行上述代码,则显示依次如下:
C:/Program Files/Borland/Delphi6/Projects/
C:/Program Files/Borland/Delphi6/Projects
很明显,Path比Directory多了一个“/”。