看到别人的代码我总是很羡慕,总觉得看起来很舒服,我的总是些垃圾样,提提意见,看我的结症在那里。以下是我写的,大家可以畅所欲言,别留面子。包括排版,注释等都可以说说 private
{ Private declarations }
procedure ClearAllText(); //清除所有框中的值
Function CheckIntegrity:String; // 检查数据完整性
procedure LoadData(Dataset_Equipmen:TADOQuery); //将数据集中值写入个数据框中
Function SaveData(Dataset_Equipmen:TADOQuery):boolean; //将各数据框中值写入数据集
public
{ Public declarations }
List:Tstrings;
TableToUpdate:string; //要插入数据的表
FieldToUpdate:string; //要插入的字段
procedure TransRstToList(TempAdoDataset:TADOQuery;TempFiedName:string); //将AdoDataset中的价值传递给TransRstToList(TStrings)
end;var
Frm_EditEquip: TFrm_EditEquip;implementation
uses Frm_Equipment,Frm_NewItems;
{$R *.dfm}procedure TFrm_EditEquip.TransRstToList(TempAdoDataset:TADOQuery;TempFiedName:string);
//将AdoDataset中的价值传递给TransRstToList(TStrings)
var
TempStr:string;
MyAdoDataset:TADODataSet;
begin
MyAdoDataset:=TADODataSet.Create(self);
MyAdoDataset.Clone(TempAdoDataset);
List:=TStringList.Create ;
List.Clear;
MyAdoDataset.First ;
while not MyAdoDataset.Eof do
begin
TempStr:=trim(MyAdoDataset.FieldByName(TempFiedName).AsString);
if TempStr<>'' then
if List.IndexOf(TempStr)=-1 then List.Add(TempStr);
MyAdoDataset.Next;
end;
//销毁对象
MyAdoDataset.Free;
end;procedure TFrm_EditEquip.ClearAllText();
//清除所有框中的值
var
i: Integer;
begin
Edit_Code.Text :='';
Edit_Name.Text:='';
Combo_Type.Text:='';
Edit_model.Text:='';
Combo_Depart.Text:='';
Combo_AddDel.Text:='';
Combo_Use.Text:='';
Edit_Origin.Text:='';
Edit_depreciation1.Text:='';
Edit_Netvalue.Text:='';
DateTime_Account.Date:=now;
Edit_Remnant1.Text:='';
Edit_Remnant2.Text:='';
Combo__depreciation2.Text:='';
Edit_UseMonth1.Text:='';
Edit_UseMonth2.Text:='';
Edit_depreciation3.Text:='';
Edit_depreciation4.Text:='';
Edit_Place.Text:='';
end;
Function TFrm_EditEquip.CheckIntegrity:String; // 检查数据完整性
begin
CheckIntegrity:='';
if trim(Edit_Origin.Text)='' then
begin CheckIntegrity:=QuotedStr('入帐原值')+'未录入'; exit; end;
if trim(Edit_Remnant1.Text)='' then
begin CheckIntegrity:=QuotedStr('预计净残值率')+'未录入'; exit;end;
if trim(Edit_UseMonth1.Text)='' then
begin CheckIntegrity:=QuotedStr('预计使用月份')+'未录入'; exit;end;
end;
procedure TFrm_EditEquip.LoadData(Dataset_Equipmen:TADOQuery);
//将数据集中值写入各数据框中
begin
with Dataset_Equipmen do
begin
Edit_Code.Text :=trim(FieldByName('固定资产编号').AsString);
Edit_Name.Text:=trim(FieldByName('固定资产名称').AsString);
Combo_Type.Text:=trim(FieldByName('固定资产类别').AsString);
Edit_model.Text:=trim(FieldByName('规格型号').AsString);
Combo_Depart.Text:=trim(FieldByName('所属部门').AsString);
Combo_AddDel.Text:=trim(FieldByName('增减方式').AsString);
Combo_Use.Text:=trim(FieldByName('使用状况').AsString);
Edit_Origin.Text:=trim(FieldByName('入帐原值').AsString);
Edit_depreciation1.Text:=trim(FieldByName('累计折旧').AsString);
Edit_Netvalue.Text:=trim(FieldByName('净值').AsString);
DateTime_Account.Date:=(FieldByName('入帐日期').AsDateTime );
Edit_Remnant1.Text:=trim(FieldByName('预计净残值率').AsString);
Edit_Remnant2.Text:=trim(FieldByName('预计净残值').AsString);
Combo__depreciation2.Text:=trim(FieldByName('折旧方法').AsString);
Edit_UseMonth1.Text:=trim(FieldByName('预计使用月份').AsString);
Edit_UseMonth2.Text:=trim(FieldByName('已计提月份').AsString);
Edit_depreciation3.Text:=trim(FieldByName('月折旧率').AsString);
Edit_depreciation4.Text:=trim(FieldByName('月折旧额').AsString);
Edit_Place.Text:=trim(FieldByName('存放位置').AsString);
end;
end;
Function TFrm_EditEquip.SaveData(Dataset_Equipmen:TADOQuery):boolean;
//将各数据框中的值写入数据集
Var
My_float1, My_float2, My_float3:single;
Input_Error:string; //数据录入错误提示
begin
result:=True; //保存成功标志初始化
Input_Error:=CheckIntegrity; //检测数据的合法性
if Input_Error<>'' then
begin
application.MessageBox(pchar(Input_Error),'提示',MB_OK);
result:=False;
Exit;
end;
My_float1:=strtoFloat(trim(Edit_Origin.Text)); //入帐原值
My_float2:=strtoFloat(trim(Edit_Remnant1.Text)); //预计净残值率
Edit_Remnant2.Text:=FloatTostr(My_float1*My_float2/100); //残值=入帐原值* 预计净残值率
My_float2:=strtoFloat(trim(Edit_UseMonth1.Text)); //预计使用月份
My_float3:=strtoFloat(trim(Edit_Remnant2.Text)); //残值
Edit_depreciation4.Text:=FloatTostr((My_float1-My_float3)/My_float2); //月折旧额=(入帐原值-残值) /预计使用月份
Edit_depreciation3.Text:=FloatTostr(1/My_float3*100); //月折旧率=1/预计使用月份
Edit_UseMonth2.Text:=IntToStr(monthsbetween(now,DateTime_Account.Date));//已计提月份=now-入帐日期;
My_float1:=strtoFloat(trim(Edit_UseMonth2.Text)); //已计提月份
My_float3:=strtoFloat(trim(Edit_depreciation4.Text)); //月折旧额
Edit_depreciation1.Text:=FloatTostr(My_float1*My_float3); //累计折旧= 已计提月份* 月折旧额
My_float1:=strtoFloat(trim(Edit_Origin.Text)); //入帐原值
My_float2:=strtoFloat(trim(Edit_depreciation1.Text)); //累计折旧
Edit_Netvalue.Text:=FloatTostr(My_float1-My_float2); //净值= 入帐原值- 累计折旧
with Dataset_Equipmen do //保存
begin
edit;
FieldByName('固定资产编号').AsString :=trim(Edit_Code.Text);
FieldByName('固定资产名称').AsString:=trim(Edit_Name.Text);
FieldByName('固定资产类别').AsString:=trim(Combo_Type.Text);
FieldByName('规格型号').AsString:=trim(Edit_model.Text);
FieldByName('所属部门').AsString:=trim(Combo_Depart.Text);
FieldByName('增减方式').AsString:=trim(Combo_AddDel.Text);
FieldByName('使用状况').AsString:=trim(Combo_Use.Text);
FieldByName('入帐原值').AsString:=trim(Edit_Origin.Text);
FieldByName('累计折旧').AsString:=trim(Edit_depreciation1.Text);
FieldByName('净值').AsString:=trim(Edit_Netvalue.Text);
FieldByName('入帐日期').AsDateTime :=DateTime_Account.Date;
FieldByName('预计净残值率').AsString:=trim(Edit_Remnant1.Text );
FieldByName('预计净残值').AsString:=trim(Edit_Remnant2.Text);
FieldByName('折旧方法').AsString:=trim(Combo__depreciation2.Text);
FieldByName('预计使用月份').AsString:=trim(Edit_UseMonth1.Text);
FieldByName('已计提月份').AsString:=trim(Edit_UseMonth2.Text);
FieldByName('月折旧率').AsString:=trim(Edit_depreciation3.Text);
FieldByName('月折旧额').AsString:=trim(Edit_depreciation4.Text);
FieldByName('存放位置').AsString:=trim(Edit_Place.Text);
end;
try
Frm_Equipments.ADOQ_Equipment.Post;
except
result:=False;
application.MessageBox('保存出错','提示',MB_OK);
end;
end;
{ Private declarations }
procedure ClearAllText(); //清除所有框中的值
Function CheckIntegrity:String; // 检查数据完整性
procedure LoadData(Dataset_Equipmen:TADOQuery); //将数据集中值写入个数据框中
Function SaveData(Dataset_Equipmen:TADOQuery):boolean; //将各数据框中值写入数据集
public
{ Public declarations }
List:Tstrings;
TableToUpdate:string; //要插入数据的表
FieldToUpdate:string; //要插入的字段
procedure TransRstToList(TempAdoDataset:TADOQuery;TempFiedName:string); //将AdoDataset中的价值传递给TransRstToList(TStrings)
end;var
Frm_EditEquip: TFrm_EditEquip;implementation
uses Frm_Equipment,Frm_NewItems;
{$R *.dfm}procedure TFrm_EditEquip.TransRstToList(TempAdoDataset:TADOQuery;TempFiedName:string);
//将AdoDataset中的价值传递给TransRstToList(TStrings)
var
TempStr:string;
MyAdoDataset:TADODataSet;
begin
MyAdoDataset:=TADODataSet.Create(self);
MyAdoDataset.Clone(TempAdoDataset);
List:=TStringList.Create ;
List.Clear;
MyAdoDataset.First ;
while not MyAdoDataset.Eof do
begin
TempStr:=trim(MyAdoDataset.FieldByName(TempFiedName).AsString);
if TempStr<>'' then
if List.IndexOf(TempStr)=-1 then List.Add(TempStr);
MyAdoDataset.Next;
end;
//销毁对象
MyAdoDataset.Free;
end;procedure TFrm_EditEquip.ClearAllText();
//清除所有框中的值
var
i: Integer;
begin
Edit_Code.Text :='';
Edit_Name.Text:='';
Combo_Type.Text:='';
Edit_model.Text:='';
Combo_Depart.Text:='';
Combo_AddDel.Text:='';
Combo_Use.Text:='';
Edit_Origin.Text:='';
Edit_depreciation1.Text:='';
Edit_Netvalue.Text:='';
DateTime_Account.Date:=now;
Edit_Remnant1.Text:='';
Edit_Remnant2.Text:='';
Combo__depreciation2.Text:='';
Edit_UseMonth1.Text:='';
Edit_UseMonth2.Text:='';
Edit_depreciation3.Text:='';
Edit_depreciation4.Text:='';
Edit_Place.Text:='';
end;
Function TFrm_EditEquip.CheckIntegrity:String; // 检查数据完整性
begin
CheckIntegrity:='';
if trim(Edit_Origin.Text)='' then
begin CheckIntegrity:=QuotedStr('入帐原值')+'未录入'; exit; end;
if trim(Edit_Remnant1.Text)='' then
begin CheckIntegrity:=QuotedStr('预计净残值率')+'未录入'; exit;end;
if trim(Edit_UseMonth1.Text)='' then
begin CheckIntegrity:=QuotedStr('预计使用月份')+'未录入'; exit;end;
end;
procedure TFrm_EditEquip.LoadData(Dataset_Equipmen:TADOQuery);
//将数据集中值写入各数据框中
begin
with Dataset_Equipmen do
begin
Edit_Code.Text :=trim(FieldByName('固定资产编号').AsString);
Edit_Name.Text:=trim(FieldByName('固定资产名称').AsString);
Combo_Type.Text:=trim(FieldByName('固定资产类别').AsString);
Edit_model.Text:=trim(FieldByName('规格型号').AsString);
Combo_Depart.Text:=trim(FieldByName('所属部门').AsString);
Combo_AddDel.Text:=trim(FieldByName('增减方式').AsString);
Combo_Use.Text:=trim(FieldByName('使用状况').AsString);
Edit_Origin.Text:=trim(FieldByName('入帐原值').AsString);
Edit_depreciation1.Text:=trim(FieldByName('累计折旧').AsString);
Edit_Netvalue.Text:=trim(FieldByName('净值').AsString);
DateTime_Account.Date:=(FieldByName('入帐日期').AsDateTime );
Edit_Remnant1.Text:=trim(FieldByName('预计净残值率').AsString);
Edit_Remnant2.Text:=trim(FieldByName('预计净残值').AsString);
Combo__depreciation2.Text:=trim(FieldByName('折旧方法').AsString);
Edit_UseMonth1.Text:=trim(FieldByName('预计使用月份').AsString);
Edit_UseMonth2.Text:=trim(FieldByName('已计提月份').AsString);
Edit_depreciation3.Text:=trim(FieldByName('月折旧率').AsString);
Edit_depreciation4.Text:=trim(FieldByName('月折旧额').AsString);
Edit_Place.Text:=trim(FieldByName('存放位置').AsString);
end;
end;
Function TFrm_EditEquip.SaveData(Dataset_Equipmen:TADOQuery):boolean;
//将各数据框中的值写入数据集
Var
My_float1, My_float2, My_float3:single;
Input_Error:string; //数据录入错误提示
begin
result:=True; //保存成功标志初始化
Input_Error:=CheckIntegrity; //检测数据的合法性
if Input_Error<>'' then
begin
application.MessageBox(pchar(Input_Error),'提示',MB_OK);
result:=False;
Exit;
end;
My_float1:=strtoFloat(trim(Edit_Origin.Text)); //入帐原值
My_float2:=strtoFloat(trim(Edit_Remnant1.Text)); //预计净残值率
Edit_Remnant2.Text:=FloatTostr(My_float1*My_float2/100); //残值=入帐原值* 预计净残值率
My_float2:=strtoFloat(trim(Edit_UseMonth1.Text)); //预计使用月份
My_float3:=strtoFloat(trim(Edit_Remnant2.Text)); //残值
Edit_depreciation4.Text:=FloatTostr((My_float1-My_float3)/My_float2); //月折旧额=(入帐原值-残值) /预计使用月份
Edit_depreciation3.Text:=FloatTostr(1/My_float3*100); //月折旧率=1/预计使用月份
Edit_UseMonth2.Text:=IntToStr(monthsbetween(now,DateTime_Account.Date));//已计提月份=now-入帐日期;
My_float1:=strtoFloat(trim(Edit_UseMonth2.Text)); //已计提月份
My_float3:=strtoFloat(trim(Edit_depreciation4.Text)); //月折旧额
Edit_depreciation1.Text:=FloatTostr(My_float1*My_float3); //累计折旧= 已计提月份* 月折旧额
My_float1:=strtoFloat(trim(Edit_Origin.Text)); //入帐原值
My_float2:=strtoFloat(trim(Edit_depreciation1.Text)); //累计折旧
Edit_Netvalue.Text:=FloatTostr(My_float1-My_float2); //净值= 入帐原值- 累计折旧
with Dataset_Equipmen do //保存
begin
edit;
FieldByName('固定资产编号').AsString :=trim(Edit_Code.Text);
FieldByName('固定资产名称').AsString:=trim(Edit_Name.Text);
FieldByName('固定资产类别').AsString:=trim(Combo_Type.Text);
FieldByName('规格型号').AsString:=trim(Edit_model.Text);
FieldByName('所属部门').AsString:=trim(Combo_Depart.Text);
FieldByName('增减方式').AsString:=trim(Combo_AddDel.Text);
FieldByName('使用状况').AsString:=trim(Combo_Use.Text);
FieldByName('入帐原值').AsString:=trim(Edit_Origin.Text);
FieldByName('累计折旧').AsString:=trim(Edit_depreciation1.Text);
FieldByName('净值').AsString:=trim(Edit_Netvalue.Text);
FieldByName('入帐日期').AsDateTime :=DateTime_Account.Date;
FieldByName('预计净残值率').AsString:=trim(Edit_Remnant1.Text );
FieldByName('预计净残值').AsString:=trim(Edit_Remnant2.Text);
FieldByName('折旧方法').AsString:=trim(Combo__depreciation2.Text);
FieldByName('预计使用月份').AsString:=trim(Edit_UseMonth1.Text);
FieldByName('已计提月份').AsString:=trim(Edit_UseMonth2.Text);
FieldByName('月折旧率').AsString:=trim(Edit_depreciation3.Text);
FieldByName('月折旧额').AsString:=trim(Edit_depreciation4.Text);
FieldByName('存放位置').AsString:=trim(Edit_Place.Text);
end;
try
Frm_Equipments.ADOQ_Equipment.Post;
except
result:=False;
application.MessageBox('保存出错','提示',MB_OK);
end;
end;
Var
My_Items:Tstrings;
begin
LoadData(Frm_Equipments.ADOQ_Equipment); //将数据写入各数据框中
TransRstToList(ADOQ_Employee,'部门'); //部门组合框中写入数据
Combo_Depart.Items:=List;
end;procedure TFrm_EditEquip.Edit_OriginKeyPress(Sender: TObject;
var Key: Char);
//只能输入数字
begin
with TEdit(Sender) do
begin
if not(Key in ['.', '0'..'9', #8]) then
Key := #0;
if Key = '.' then
if (Pos('.', Text) > 0) then
Key := #0;
end;
end;procedure TFrm_EditEquip.btnSaveClick(Sender: TObject);
//保存数据
begin
if SaveData(Frm_Equipments.ADOQ_Equipment)=True then
close;
end;procedure TFrm_EditEquip.btnAddClick(Sender: TObject);
//保存并添加
begin
if SaveData(Frm_Equipments.ADOQ_Equipment)=True then //保存
begin
Frm_Equipments.ADOQ_Equipment.Append; //追加
ClearAllText; //数据框清空
end;
end;procedure TFrm_EditEquip.btnCancelClick(Sender: TObject);
//取消
begin
if MessageBox(Handle, '请检查数据是否保存,真的退出吗', '提示', MB_YESNO)=idYes then
close;
end;procedure TFrm_EditEquip.Combo_TypeNewItem(Sender: TObject;
var Done: Boolean);
//新增'固定资产类别 '
begin
inherited;
TableToUpdate:='固定资产类别表' ;
FieldToUpdate:='固定资产类别' ;
with Frm_NewItem do
begin
show;
Caption:='固定资产类别';
Label1.Caption:='输入'+QuotedStr('固定资产类别');
end;
end;procedure TFrm_EditEquip.Combo_AddDelNewItem(Sender: TObject;
var Done: Boolean);
//新增'固定资产增减方式 '
begin
inherited;
TableToUpdate:='固定资产增减方式表' ;
FieldToUpdate:='固定资产增减方式' ;
with Frm_NewItem do
begin
show;
Caption:='固定资产增减方式';
Label1.Caption:='输入'+QuotedStr('固定资产增减方式');
end;
end;procedure TFrm_EditEquip.FormDestroy(Sender: TObject);
begin
inherited;
List.Free;
end;procedure TFrm_EditEquip.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
//退出窗体
begin
inherited;
if MessageBox(Handle, '请检查数据是否保存,真的退出吗', '提示', MB_YESNO)=idYes then
CanClose:=True
else
CanClose:=False;
end;
Function TFrm_EditEquip.CheckIntegrity:String; // 检查数据完整性
begin
CheckIntegrity:='';
if trim(Edit_Origin.Text)='' then
begin CheckIntegrity:=QuotedStr('入帐原值')+'未录入'; exit; end;
if trim(Edit_Remnant1.Text)='' then
begin CheckIntegrity:=QuotedStr('预计净残值率')+'未录入'; exit;end;
if trim(Edit_UseMonth1.Text)='' then
begin CheckIntegrity:=QuotedStr('预计使用月份')+'未录入'; exit;end;
end;还有有的变量太繁琐,如Edit_可以简化成edt
通常变量以小写字母开头,函数和方法以大写字母开头,尽量不用下滑线分隔单词,而将单词的头字母大写,这些都是标准,应归入公司开发文档,每个人都要这样做,否则就是错误
不要使用with语句,虽然使用with语句可以使代码简洁,但也会增加代码的出错几率,不知有没有人赞成这一点?
begin
CheckIntegrity:='';
if trim(Edit_Origin.Text)='' then
begin CheckIntegrity:=QuotedStr('入帐原值')+'未录入'; exit; end;
if trim(Edit_Remnant1.Text)='' then
begin CheckIntegrity:=QuotedStr('预计净残值率')+'未录入'; exit;end;
if trim(Edit_UseMonth1.Text)='' then
begin CheckIntegrity:=QuotedStr('预计使用月份')+'未录入'; exit;end;
end;
我一般写成
Function TFrm_EditEquip.CheckIntegrity:String; // 检查数据完整性
begin
CheckIntegrity := '';
if trim(Edit_Origin.Text) = '' then
begin
CheckIntegrity := QuotedStr('入帐原值') + '未录入';
exit;
end;
if trim(Edit_Remnant1.Text) = '' then
begin
CheckIntegrity := QuotedStr('预计净残值率') + '未录入';
exit;
end;
if trim(Edit_UseMonth1.Text) = '' then
begin
CheckIntegrity := QuotedStr('预计使用月份') + '未录入';
exit;
end;
end;
其它的好像都有人说了,
如果有耐性也可去下载一本叫<代码大全>电子书慢慢看(用google找一下)
begin
......
end;
Object Pascal Style Guide - By Charles Calvert概要:
这篇文章展现了一种格式化Delphi代码的标准风格。它的实现是基于Delphi小组的开发习惯。 我们承认许多好的已经确定的工作室或个人,拥有他们自己的和本文里所说的不同的编程习惯, 但是,我们强烈建议你使用一个工具将你的代码转换为Borland风格的代码,然后再提交给Borland,Project JEDI或其他任何公开的源代码知识库。我们不想强迫你改变你的习惯,但我们坚持所有同Borland产品一起工作的的代码遵循本文描述的习惯。 对象Pascal是一种优美的设计语言。较强的可读性就是它的一个优点。本文设计的标准将增强对象Pascal代码的可读性。当开发人员遵从本文展现的这些简单的习惯,他们也将成为标准,这将有益于所有的Delphi开发人员使用统一的易读的代码风格。执行这些标准的努力将增加开发人员的源代码的价值,特别是在维护和调试循环阶段。 尽管我们相信并且赞美本文所宣扬的风格,但我们没有必要支持它,因为它本身是正确的而其它的则是错误的。然而我们相信绝大多数开发人员遵从的标准是有它的功效的,所以我们仍然支持并维护该风格。人类的大脑总在适应标准,并且找寻方法去快速组织所熟悉的模式,从而快速而有效地理解其含义。正是因这种要求而建立的标准将使大量的人尽可能容易的阅读代码。如果在初次使用我们的指导方针是感到陌生,那么我们请你坚持一会儿,你会发现你也变得习惯了。或者,如果你愿意,你也可以保持你自己的风格,并通过一个遵从我们标准的程序来转换,然后你可以将你的代码提交给Borland或其他知识库了。 一些文本编辑器,象Visual SlickEdit可以帮助你按照一定的风格来格式化你的代码。一个免费的由Egbert van Nes开发的格式化程序可以在以下的连接获得:
http://www.slm.wau.nl/wkao/delforexp.html另一个针对Delphi的商业化程序是CrackerJax:
http://www.kineticsoftware.com/html/products.html1.0 介绍
本文不是为Object Pascal语言定义语法规则的一种尝试。例如:在else前面放置封号";"是违法的;编译器不允许这种用法。所以我不会在本文中展示语法规则。本文旨在在语言提供选择的地方定义适当的行为习惯。我通常在只有一种控制方法的地方保持沉默。1.1 背景
在本文出现的指导方针基于Delphi源代码的一部分。Delphi源代码恰好遵循这些指导方针。如果你发现了违反这些原则的情况,那么应该是这些原则而不是那些不确定的源代码成为你的指导方针。然而,你可以使用这些原代码作为这些原则的补充,至少它可以帮助你得到关于你自己的代码的形式的一般看法。1.2 感谢
本文这些格式是基于已完成的为Java语言定义的风格标准的工作的。Java在规则上对格式化Object Pascal源代码是没有任何影响的,但在Sun网站上的文档是本文的基础。 在某些特殊的地方本文的风格和格式受到"A Coding Style Guide for Java WorkShop and Java Studio Programming"(Achut Reddy, 《Java车间和Java工作室的编码向导》)的很大启发。该文章可在该URL找到:http://www.sun.com/workshop/java/wp-coding
Delphi小组为本文的完成做出了重大贡献,事实上,如果没有它们的帮助,本文是无法完成的。2.0 源文件
Object Pascal源代码主要被分成单源文件和项目文件,他们都遵从相同的习惯。Delphi项目文件有一个.DPR的扩展名。它是项目的主文件。任何在项目中使用的单元文件都有一个.PAS的扩展名。其它的文件,象批处理文件、HTML文件或者DLLs也可以在项目中扮演一个角色,但本文只涉及项目文件和单元文件。2.1 源文件命名
Object Pascal支持长文件名。如果你使用几个单词来形成一个单一的名称,那么最好是为每个单词使用大写的开头字母:MyFile.pas。这被认为是插入式大写或驼峰式大写。扩展名应当使用小写形式。由于历史原因,Delphi源代码经常使用8:3式命名模式,但开发人员不必为上述规则所限制而转向Delphi小组的用法。
如果你正在翻译一个C/C++头文件,那么你翻译的Pascal文件要与C/C++头文件保持相同的主文件名,扩展名用.PAS。例如:Windows.h -> Windows.pas。如果Pascal语法强迫你将几个头文件组合到一个单一的单元文件中,那么包含其他头文件的那个头文件的文件名将作为新单元文件的名称。例如:Windows.h包含了WinBase.h文件,则新的单元文件名为Windows.pas.2.2 源文件组织
所有的Object Pascal单元文件应当按照以下的顺序包含下列元素:
版权/标识块注释
单元名
接口段
实现部分
一个结束符"end."每个部分之间至少空一行。其它的元素应当被结构化成你认为最适当的顺序。但版权应当出现在文件的最开始,然后是单元名,然后是任何条件定义、编译器指示符或包含语句,然后是uses字句:
{*******************************************************}
{ }
{ Borland Delphi Visual Component Library }
{ }
{ Copyright (c) 1995,98 Inprise Corporation }
{ }
{*******************************************************}unit Buttons;{$S-,W-,R-}
{$C PRELOAD}interfaceuses
Windows, Messages, Classes,
Controls, Forms, Graphics,
StdCtrls, ExtCtrls, CommCtrl;如果你将type段放到const段之前,或者将它们两者混合,那是没有什么影响的。实现部分需要首先将implementation写出来,然后是uses字句,然后是其它的包含声明或别的指示符:
implementationuses
Consts, SysUtils, ActnList,
ImgList;{$R BUTTONS.RES}
Function TFrm_EditEquip.CheckIntegrity:String; // 检查数据完整性
begin
CheckIntegrity := '';
if trim(Edit_Origin.Text) = '' then
begin
CheckIntegrity := QuotedStr('入帐原值') + '未录入';
exit;
end;
if trim(Edit_Remnant1.Text) = '' then
begin
CheckIntegrity := QuotedStr('预计净残值率') + '未录入';
exit;
end;
if trim(Edit_UseMonth1.Text) = '' then
begin
CheckIntegrity := QuotedStr('预计使用月份') + '未录入';
exit;
end;
end;
自己看起来结构也比较清晰这是我的一个习惯
每一个源文件都应当以一个包含版本信息和标准版权布告块注释开始。版本信息可以象下面这样:
{*******************************************************}
{ }
{ Widgets Galore }
{ }
{ Copyright (c) 1995,98 Your Company }
{ }
{*******************************************************}版权布告至少需要包含以下行:
版权所有(C) 年份 版权所有者如果你是为Borland开发软件的第三方,你可以在版权的最后加入你自己的名字:
{*******************************************************}
{ }
{ Borland Delphi Visual Component Library }
{ Copyright (c) 1995,99 Borland International }
{ Created by Project JEDI }
{ }
{*******************************************************}2.2.2 unit声明
每一个单元文件要有一个unit声明。unit是一个保留字,因此它需要小写。单元的名称可以是大小写混合的,但必须和单元文件的文件名相同。例如:
unit MyUnit;则单元文件的名称应当为MyUnit.pas。在文件系统中,它作为这个文件的入口。2.2.3 uses声明
在单元内部,uses声明应当使用小些的uses引导。被引用的单元名要遵循在他自己的单元中被定义时使用的大写习惯:
uses MyUnit; 每一个单元名被一个逗号同其相邻的单元名分开,最后一个单元名后面跟一个分号:
uses
Windows, SysUtils, Classes, Graphics, Controls, Forms,
TypInfo; 在uses的下一行开始加入单元名和在uses后面直接加入单元名同样都是正确的。
uses Windows, SysUtils, Classes, Graphics, Controls, Forms,
TypInfo; 你可以格式化你的单元名列表,可以在80个字符限制下换行,或者每个单元名一行。2.2.4 类和接口定义
类的定义以两个空格开始,然后是一个前缀"T"。 前缀要大写,每个内嵌的单词要大写开头。不要在Object Pascal源代码中使用制表符"Tab"。例:
TMyClass
在标识符之后接一个空格,然后是等号,然后是class单词,class要小写:
TMyClass = class
如果你的类是从祖先继承来的,则需要加入包含着祖先类的左右括号:
TMyClass = class(TObject)
范围指示符离页边两个空格,并以下面的顺序出现:
TMyClass = clss(TObject)
private
protect
public
published
end; 数据通常只在private段声明,并且它们的标识符以"F"开始。所有此类的声明离页边4个空格:
TMyClass = class(TObject)
private
FMyDate: Integer;
function GetDate: Integer;
procedure SetData(Value: Integer);
public
published
property MyData: Integer read GetData write SetData;
end; 接口遵从同类相同的规则,除了你应当忽略范围指示符和私有数据,并且使用interface单词代替class单词。 命名习惯
除了保留字和指示符是小写外,所有的Pascal标识符应当使用驼峰式格式,即每个标识符开头字母要大写,内嵌单词的首字母也要大写,只取首字母的缩写词也一样。
MyIdentifier
MyFTPClass 对此规则主要的例外是头文件翻译的情况,应当遵循在原头文件中的命名习惯。例如:
WM_LBUTTONDOWN,不要写成wm_LButtonDown. 除了头文件翻译外,不要使用下划线分割单词。类名应当是名词或名词短语。接口或类的名称依赖于接口的显而易见的目的、用途。好的名字:
AddressForm, ArrayIndexOutOfBoundsException
低劣的名字:
ManageLayout //使用动词短语
delphi_is_new_to_me //使用下划线
《DELPHI 5开发人员指南》第6章
維護起來死人;
procedure TFrm_EditEquip.ClearAllText();好像有更簡潔的方法
另界面與數據庫關聯太緊可不好可以把業務分離出來
數據庫的操作放在一個地方A;
做一個類(與介面一點關聯都沒有)B;
介面只做行介面上的事C
C通過B,B調用A;這樣維護起來是不是要方便一點;代碼規範也是要考慮的;
參考別人的代碼是一件好事情
一群人做事,就得先制订一个专门的规则以规范各自的代码,不能随心所欲。
而最重要的是让人明白你的变量或VCL名称是指哪一个东西。
每一段重要的代码前都应有注解,以说明功能和大致的实现方式