Delphi随记
可以用GetPropInfo来判断一个对象或者类是否拥有某个属性
可以用SetPropValue来为某个属性赋值,用GetPropValue来获取某个属性的值.
以上前提是属性必须声明在published里(在被判断类的前面使用{$M+},否则编译会出警告,但不影响功能),在public里是不行的.
当TObjectList对象的OwnsObjects属性设置为True(默认值)时,如果调用TObjectList对象的Clear,Delete,Remove或者释放TObjectList对象,都将销毁列表中的对象,而TList则不会.另外需要注意的是OwnsObjects并不影响Extract(Extract类似Remove,只是会返回被删除对象的指针),Extract只是从列表移除对象引用,并不会销毁对象.
当TComponentList列表里的一个对象被释放时,将自动从列表里移除.
没有Handle的组件必须被一个TWinControl包含,并且由这个TWincontrol负责绘制.TWinControl的PaintControls方法做的就是这件事.
如果要使用泛型,需要引用System.Generics.Collections;
动态创建菜单项:
function NewItem(const ACaption: string; AShortCut: TShortCut;
AChecked, AEnabled: Boolean; AOnClick: TNotifyEvent; hCtx: THelpContext;
const AName: string): TMenuItem;
如:
PopupMenu1.AutoHotkeys := maManual;
PopupMenu1.Items.Add(NewItem(edtHistory.Text,0,False,True,RestoreText,0,''));
资源文件格式
名称:xxx.rc
内容:
STRINGTABLE
BEGIN
1 "AB"
2 "12"
END bmp1 Bitmap a.bmp
icon1 icon a.ico
资源文件目录必须包括需要的文件
rc文件需要用brcc32编译为res文件才能使用,使用方法为:运行cmd,切换到rc文件目录,执行brcc32 xxx.rc.如果需要指定文件名则:brcc32 xxx.rc –fo xxx.dll.
资源引用方法有静态与动态两种,静态引用就是将资源文件包含到源码中编译到EXE中去;动态引用则是把资源文件当成DLL动态装载。静态引用资源文件在Delphi中是最简单不过了,只要在工程文件中加入{$R xxx.res}编译指令即可.
引用时,字符串只要LoadStr(Index)即可,而其它资源用TResourceStream读取,只不过资源句柄就是程序本身,直接用hInstance就可以了
ReallocMem:重新分配由GetMem分配的内存块大小.
Application.ShowMainForm := False;让应用程序不显示窗体
当使用DrawText时,如果要使文字在垂直方向对齐,需要uFormat同时增加DT_VCENTER or DT_SINGLELINE,使用其中某一个无效果.注:DT_BOTTOM和DT_SINGLELINE也要一起使用.
CreateWindowEx是用来扩展CreateWindow所不具有的窗口风格的.
StringOfChar:返回字符重复N次的字符串
S := StringOfChar('A', 10);
sets S to the string 'AAAAAAAAAA'.
这玩意叫什么?求解答?:
FSortedComponents.SortList(
function(Item1, Item2: Pointer): Integer
begin
Result := CompareText(TComponent(Item1).Name, TComponent(Item2).Name);
end);
function CompareText(const S1, S2: string): Integer;//比较字符串,如果S1等于S2,返回0,如果S1>S2返回一个大于0的整数,如果S1<S2,返回一个小于0的整数.
Delphi2009后:Exit(‘abc’)等同于Result := ‘abc’;Exit;
Delphi总是先构造派生的类,仅当派生类调用了继承的构造器时才去构造基类。在C++中次序相反,从祖先类开始构建,最后才是派生的类。因而,假如有类C继承于B,而B继承于A,那么Delphi先是构建C,然后是B最后是A.C++先构建A,然后B,最后C。