知识小结(Delphi)

来源:互联网 发布:app推荐 知乎 编辑:程序博客网 时间:2024/06/05 10:42

1) Error loading midas.dll     没有注册midas.dll 运行RegSver32.exe midas.dll

2)Result := GetProcAddress(FGDIPlusLibrary, PChar(ProcName));编译 出现这样的问题,应该是设置方面的问题,Project->Options->Complier->Hugestrings 钩上就ok了!

3) TCheckListBox有个itemEnable[Index] := False属性控制某一项不可改
4) 批量根据AText是否为空判断颜色
procedure TM4_FaultModifyForm.SetColor(ALabel: array of TLabel;
AText: array of string);
var
VIndex: Integer;
begin
for VIndex := Low(AText) to High(AText) do
if AText[VIndex] = '' then
ALabel[VIndex].Font.Color := clBlue
else
ALabel[VIndex].Font.Color := clWindowText;
end;
5) 界面网格修改记录后要重新定位到该条记录用dsQuery.DataSet.Locate('file_no', VFileNo, []);

6)  Could not convert variant of type(Null) into type (string) 加VarToStr
7) 修改网格的DataController.Summary.Options.soSelectedRecords := True时竟然会出现这样的异常‘List index out of bounds(8)’
8) 新建或修改时间时,应该对控件cxDateEdit进行判断是否为空,不然默认传入'0000:0:0'值,查询出错
9) 当网格中需要一个字段或者几个字段输完后立即出来一个结果,则用字段中的Properties.OnValidate事件

10) 定义Vstr为string类型,则Vstr[1]可以取到该字符串中的第一个字符。类似Result如果为string型也可以。
11) 查看时 Memo 文本框要支持 Ctrl + A 全选( if (Key = 65) and (Shift = [ssCtrl]) then
(Sender as TDBMemo).SelectAll;),并且支持按ESC响应退出改属性WantReturns := False
新建时Memo 文本框支持ESC,在OnKeyPress事件中if Key = #27 then Close
12) 删除默认聚焦到取消上:Application.MessageBox('是否真的要删除记录?', '提示', MB_OKCANCEL + MB_DEFBUTTON2)
13) 如果弹出如:'LebutFormD7...'类似开发包样的错误,很有可能是开发包已经更新过,重新安装
14) 如果按Tab键不希望在某个控件显示焦点,且该控件没有Tabstop属性,则可以手写代码应该有此属性

15) "License is in invalid or has expired
M4_ServiceDefintions.dpk(2): Readerror on 'c:/program files/borland/delphi7/lib/System.dcu"
今天突然出现莫名奇妙的错误信息,但你出现此类问题时,很简单重新启动Delphi就可以了。

16) 当要修改界面上的内存表中的字段结构时,要先把他删掉,再拉个过来,不然他默认为原来的结构

17) TDataSet 的newvalue和oldvalue属性,可以判断修改前后的内容,oldvalue只保存最开始的数据值。

18) 循环一个数组范围,使用for i := Low(AFieldNames) to High(AFieldNames) do

19) trim只能使用在string中。

20)菜单具有“容器特征”的对象,即他们在充当对象的同时,又是其他对象的容器的情况。所以采用Composite组合模式/树.

21) 链表(TList)相关函数 FMenuList.Add(AChild),FMenuList.Count,FMenuList.IndexOf(AChild),FMenuList.Exchange(VIndex, VIndex + 1),FMenuList.Remove(AChild)

22) 文本框自动去掉前后空格,所以控件的ONExit事件中,重构一函数如 with (Sender as TEdit) do
Text := Trim(Text);

23)打开或修改一项目时关闭输入法,避免在控件中出现默认输入法;

24)(PL/SQL)null 不能与任何值比较,只能用 is null 或 is not null 判断

25)统一使用 FreeAndNil 释放对象

26)判断该界面的确定按钮是否响应默认的OnEnter事件,default属性

27)界面中的控件Tab是否按照顺序排序,自已写的方法要有注释

28)cxGrid控件可能默认响应Insert和Delete事件,属性OptionsData

29) 编写插入/更新多条语句时,尽量使用(select)批处理,加快处理速度

30)当判断某字段和变量是否为null时,如果该字段和变量允许为null时,用nvl()函数解决。

31)判断某字符串是否在一些字符串的一个时,用in(str1,str2..)

32)处理分组记录用group by并且用having过滤掉不符合的记录

33)TXLReport控件传入参数变量值到EXCEL
新建Params添加字段名,如(Plane_No), 设置xlExport.ParamByName['Plane_No'].Value := APlaneNo; 然后设置EXCEL模版显示变量的字段 =XLRParams_Plane_N

34)cxgrid主从表设置

var
  mLevel,childLevel:TcxGridLevel; //声明层次结构
  mView,childView: TcxGridDBTableView;//声明层次视图
begin

 //建主表层次
 mLevel:=grid1.Levels.Add;
//建从表层次
childLevel:=mLevel.Add;  
//建产主表层次视图
mView:=TcxGridDBTableView(grid1.CreateView(TcxGridDBTableView));
  mLevel.GridView:=mView;
//建立从表层次视图
  childView:=TcxGridDBTableView(grid1.CreateView(TcxGridDBTableView));
  childLevel.GridView:=childView;
//设置主表数据源
  mView.DataController.DataSource:=ds1;
//将数据源数据列全部create
  mView.DataController.CreateAllItems;

//设置从表数据源
childView.DataController.DataSource:=ds2;
  childView.DataController.CreateAllItems;

//设置从表数据与主表数据关系
childView.DataController.KeyFieldNames := ‘ID’;
 childView.DataController.MasterKeyFieldNames := ‘ID’;
 childView.DataController.DetailKeyFieldNames := ‘Parentid’;

35)用cxGrid控件显示数据的主表和从表, 但是显示从表中的数据时, 不能正确显示.本来有5条记录, 但是却显示1条

如果从表中有5条数据,只能显示一条的话,那就是你的masterkeyfieldnames和keyfieldnames属性都设对了!
cxGrid有一个BUG,就是明细表,如果不按masterID 排序好再显示的话,就会只出现其中的几条。
SELECT * FROM MXTABLE1 WHERE 。。。[red]ORDER BY masterID[/red]

36)

37)

 

原创粉丝点击