Delphi程序的设计之 惯用法.docVIP

  • 2
  • 0
  • 约9.2千字
  • 约 13页
  • 2018-06-03 发布于福建
  • 举报
Delphi程序的设计之 惯用法

Delphi程序设计之 惯用法 --技巧探索: {No.1} 创建模式窗体的句子: class procedure TMyForm.RunForm(AObj1,AObj2:TObject); var vForm:TMyForm; begin vForm:=TMyForm.Create(Application); with vForm do Try InitForm(AObj1,AObj2); ShowModal; Finally Free; end; end; //*说明: 通过class声明的函数,类似与VC中的静态函数;使用语句:TMyForm.RunForm(vObj1,vObj2); 其他具体的,参考:Delphi帮助中的,class类说明。 强调这个惯用法,就是为了: 1、如果此窗体在多处被使用,那么可以保证统一都调用此段代码; 2、如果功能上有所修改,比如:根据ShowModal的返回值不同进行处理,那么只修改此函数就行了。 3、程序封装性好,易于维护和工作交接。*// {No.2}//Tag的使用 窗体工具栏按钮事件的响应 procedure TMyForm.RunOperate(ATag:Integer); begin Case ATag of 1:MyButton.Color:=clRed; 2:MyButton.Color:=clGreen; 3:MyButton.Color:=clBlack; end; end; procedure TMyForm.ToolBtnClick(Sender:TObject); begin RunOperate(TControl(Sender).Tag); end; 如果你在某下拉菜单中,也需要执行类似功能则 procedure TMyForm.MenuItemClick(Sender:TObject); begin RunOperate(TMenuItem(Sender).Tag); end; //*说明: 1、结构清晰 2、相关的信息集中,比较容易查错、修改和维护 3、提高程序的适应、扩展能力;比如现在要求不在工具栏按钮中实现,而要求在不同按钮中实现,则修改容易。 建议:每个分类后面只跟一行或不多的几行代码,如果代码比较多,使用过程函数替代。 比较有意思的是,我经常如下写: Case btnMyButton.Visible of {显示}True:. {不显示}False:. end;*// {No.3}//事件指针做参数 //对于列表等的读取使用事件指针的方式 type TDataSetEvent=procedure(DataSet:TDataSet;AIndex,ACount:Integer)of Object; //从TADOQuery派生而来的类 procedure TMyADOQuery.EnumRecord(AWhereStr:String;APro:TDataSetEvent); begin Close; SQL.Clear; SQL.Add(Select*From Table1); if AWhereStrthen SQL.Add(Where+AWhereStr); Open; While Not Eof do begin if Assigned(APro)then APro(Self,RecNo,RecordCount); Next; end; Close; end; //*说明: 此方法来自与Window中,枚举当前所有子窗体的API函数,EnumChildWindow 1、原则:尽量将数据读取与数据显示、数据处理等分离;如:MVC等都是此目的。 2、程序扩展性增强,如果您原来希望在列表中显示或处理某列信息,后来改为用ComboBox,则在修改程序时,不在阅读数据读取部分,只需要修改信息显示等即可。又比如,现在要求您在读取记录时,用进度条显示读取进度等。 *// {No.4}//常量数组 {在No.2中,实现了如下的内容 procedure TMyForm.RunOperate(ATag:Integer); begin Case ATag of 1:MyButton.Color:=clRed; 2:MyButton.Color:=clGreen; 3:MyButton.Color:=clBlack; end; end; } //那么用数组方式实现,则就比较理想了 procedure TMyForm.RunOperate(ATag:Integer); const MyButtonColorMax:=3; MyButtonColor:array[1.MyButtonColorMax]of TColor=(clRed,clGreen,clBlack); be

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档