Delphi开发宝典Word格式文档下载.docx
《Delphi开发宝典Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Delphi开发宝典Word格式文档下载.docx(72页珍藏版)》请在冰点文库上搜索。
单表编辑界面继承,写入具体的界面操作
BillEditForm
多表编辑界面继承,写入具体的界面操作
SimplePropForm
注意:
不是属于以上几类窗体的,就自行设计窗体,但一定要从BaseForm窗体继承。
二、类及其实例
1.类的结构:
(下例为主从表的类)
unitCssClas;
基础数据类单元
系统变量单元
基类单元
interface
uses
BizClas,Classes,SysUtils,Variables,BaseDataClas;
constThisPackage='
cssman'
;
//传递给后台,调用那一个Java包
type
TCssSalebillHeader=class;
//销售部配件发货单表头
TCssSaleBillLine=class;
//销售部配件发货单明细
基类
TCssSalebillHeader=class(TBizObject)
private
FSalebillHeaderId:
integer;
//单据Id,作为主键,必须在第一个声明,发布
FSalebillHeaderNo:
string;
//单据编号
FSalebillHeaderDate:
//单据日期
FSaleDeptId:
//发货部门
FSaleDeptCode:
//发货部门编码
FSaleDeptName:
//发货部门名称
FExcRate:
Double;
//汇率
FCreateOperatorId:
//制单人ID
FCreateTime:
//制单时间
FNote:
//备注
FStat:
//单据状态
FIdpath:
//权限
FSqlWhere:
//条件语句
对Tlist容器的理解
FImportDataFlag:
//导入标志
FMaxSearchRltCmt:
//最大查询数
FCssSalebillLineofCssSalebillHeader:
TList;
此参数设定,在类对象Create的时候,要不要同时创建关联对象
protected
//继承覆盖创建一个类函数
//输入参数类名:
//AClassName用于决定创建什么类,如果为空创建本身
functionCreateNewObject(AClassName:
string='
'
):
TObject;
override;
此三个函数是构造一个类的基本要素
public
//构建
constructorCreate(IsCreateCssSalebillLine:
Boolean=False);
//析构
destructorDestroy;
自定义新方法
//根据部门和仓库,获得销售部库存(DeptStock)
procedureDoGetDeptStock(ptType:
TPostType=ptStrWait);
published//属性如何发布
propertySalebillHeaderId:
integerreadFSalebillHeaderIdwriteFSalebillHeaderId;
propertySalebillHeaderNo:
stringreadFSalebillHeaderNowriteFsalebillHeaderNo;
propertySalebillHeaderDate:
stringreadFSalebillHeaderDatewriteFSalebillHeaderDate;
propertySaleDeptId:
integerreadFSaleDeptIdwriteFSaleDeptId;
propertySaleDeptCode:
stringreadFSaleDeptCodewriteFSaleDeptCode;
propertySaleDeptName:
stringreadFSaleDeptNamewriteFSaleDeptName;
propertyExcRate:
DoublereadFExcRatewriteFExcRate;
propertyCreateOperatorId:
integerreadFCreateOperatorIdwriteFCreateOperatorId;
propertyCreateTime:
stringreadFCreateTimewriteFCreateTime;
propertyNote:
stringreadFNotewriteFNote;
propertyStat:
integerreadFStatwriteFStat;
propertyIdpath:
stringreadFIdpathwriteFIdpath;
propertySqlWhere:
stringreadFSqlWherewriteFSqlWhere;
propertyImportDataFlag:
integerreadFImportDataFlagwriteFImportDataFlag;
propertyMaxSearchRltCmt:
integerreadFMaxSearchRltCmtwriteFMaxSearchRltCmt;
propertyCssSalebillLineofCssSalebillHeader:
TListreadFCssSalebillLineofCssSalebillHeader
writeFCssSalebillLineofCssSalebillHeader;
end;
TCssSalebillLine=class(TBizObject)
//销售部配件发货单Id
FSeq:
//行号
FCssItemId:
//配件ID
FCssItemCode:
//配件编码
FCssItemName:
//配件名称
FQty:
//数量
FPrice:
//单价
FAmount:
//金额
constructorCreate;
published
propertySeq:
integerreadFSeqwriteFSeq;
propertyCssItemId:
integerreadFCssItemIdwriteFCssItemId;
propertyCssItemCode:
stringreadFCssItemCodewriteFCssItemCode;
propertyCssItemName:
stringreadFCssItemNamewriteFCssItemName;
propertyQty:
DoublereadFQtywriteFQty;
propertyPrice:
DoublereadFPricewriteFPrice;
propertyAmount:
DoublereadFAmountwriteFAmount;
implementation
usesAuthClas,ResConst;
//---TCssSalebillHeader类开始---------------------------------------------
constructorTCssSalebillHeader.Create(IsCreateCssSalebillLine:
begin
inheritedCreate;
{在此处键入创建该子类时需要初始化的变量和对象}
//对象在资源文件中的名称代号
//主键个数
PKNum:
=1;
//包代号
注意关联对象列表的创建
PackageId:
=ThisPackage;
//关联是结果集
bRelationIsRecord:
=True;
//创建TCssSalebillLineOfCssSalebillHeader对象列表
ifIsCreateCssSalebillLinethen
FCssSalebillLineOfCssSalebillHeader:
=TList.Create;
end;
//析构
destructorTCssSalebillHeader.Destroy;
注意关联对象列表的释放
vari:
{在此处键入释放该子类前需要释放的对象}
//释放FCssSalebillLineOfCssSalebillHeader对象列表
ifAssigned(FCssSalebillLineOfCssSalebillHeader)then
begin
fori:
=0toFCssSalebillLineOfCssSalebillHeader.Count-1do
TCssSalebillLine(FCssSalebillLineOfCssSalebillHeader[i]).Free;
FCssSalebillLineOfCssSalebillHeader.Free;
inheritedDestroy;
//继承覆盖创建一个类函数
//为了确保父类创建正确的子类
//输入参数类名:
//AClassName用于决定创建什么类,如果为空创建本身
functionTCssSalebillHeader.CreateNewObject(AClassName:
if(AClassName='
)orSameText(AClassName,'
TCssSalebillHeader'
)then
result:
=TCssSalebillHeader.Create
常用的字符串比较
elseifSameText(AClassName,'
TCssSalebillLine'
=TCssSalebillLine.Create
注意关联对象(子表)的创建
else
=nil;
procedureTCssSalebillHeader.DoGetDeptStock(ptType:
TPostType);
自定义方法需要传递给后台的参数
Action:
='
getdeptstock'
Post(paSelect,sSelect,ptStr);
//---TCssSalebillHeader类结束---------------------------------------------
//---TCssSalebillLine类开始---------------------------------------------
constructorTCssSalebillLine.Create;
destructorTCssSalebillLine.Destroy;
functionTCssSalebillLine.CreateNewObject(AClassName:
//---TCssSalebillLine类结束---------------------------------------------
end.
2.类的注册
//功能:
注册客户端使用到的所有业务类
//基类在对业务类进行解析时,要在BizReg单元寻找业务类的注册.若没有,则会解析失败
必须Uses类单元才能找到相应的类
unitBizReg;
usesclasses;
usesLoginClas,VaultClas,AuthClas,BaseDataClas,FinClas,CssClas,DrpClas,MktClas,
RptClas,WhClas,ErpClas;
initialization
RegisterClasses([TCPCVault,TLoginUser,TModal_Class,TSys_Menu,TSys_Func,Toperator_ext_menu_ctrl,TCssSalebillHeader,TCssSalebillLine,TDept]);
2.类实例的使用
类建立,注册以后,必须通过其实例才能存储数据和进行其他处理,如:
procedureTCssProvBillTotalSearchForm.SearchBillObj(strSqlWhere:
string);
1.类实例的声明
varRptObj:
TRptSqlTool;
Begin
2.类实例的创建
RptObj:
=TRptSQLTool.Create;
RptObj.DSId:
//1号数据连结
3.类属性的赋值
RptObj.SQLType:
=0;
//0-查询
//执行查询
4.类方法的调用
RptObj.SQL:
=‘Select*FromDept’;
RptObj.ExecSQL(ptstr);
5.类数据的显示
//显示结果集在DataStringGrid上
dgView.LoadFromDataSet(RptObj.ResultSet,True);
6.类实例的释放
RptObj.Free;
三、命名规则
1.控件前缀:
由于系统基类和一些通用方法在对控件进行数据处理时,会结合控件类型,前缀,名称(对应类属性名)进行解析.故控件的命名必须标准.
控件
命名前缀
前缀长度
命名
Tedit
edt
3位字符
前缀+对应类属性名
Tmemo
mm
2位字符
TbuttonEdit
bedt
4位字符
TmaskEdit
medt
TspinEdit
sedt
TcheckBox
cbx
TcomboBox
cb
TDataStringGrid
dg
2.文件命名:
Unit单元文件名称:
模块前缀+通用名+Frm
对应Form名称:
模块前缀+通用名+Form
3.类命名:
模块前缀+通用名+Clas,注意要与后台Java类同名
四、控件的使用
系统使用的控件除TLabel、TEdit、Tcheck、Tmemo等基本控件外,还有公司自行开发的控件。
现介绍几个常用的控件(如:
TButtonEdit,TdataStringGrid)的一些用法。
1、TbuttomEdit的用法
TbuttomEdit控件是在TEdit的基础上增加了一些功能而开发出来的编辑框控件,最大的优点是可以显示多种格式及数据形式。
下面介绍它的一些重要的属性及相关方法。
a)AddOnId和AddOnIdFieldName属性
AddOnId这个属性是根据整个系统的特点而设计的一个非常有用的属性,由于数据库的设计中很多数据表中用一个ID值来作为数据的唯一标识,所以很多字段有相应的Id,Code和Name。
如商品则有ItemId,ItemCode,ItemName。
那么在存放ItemCode字段这个的TbuttonEdit中就可以在AddOnId属性中存放ItemId字段了。
AddOnIdFieldName这个属性是存放Id的字段的名称的。
如在存放ItemCode字段的TbuttonEdit的控件中赋给AddOnIdFieldName属性值为ItemId,这样TbuttonEdit就会在从对象中取数据时自动根据AddOnIdFieldName属性值来把ItemId的值保存到AddOnId属性中,也会在保存数据时根据AddOnIdFieldName属性值取的AddOnId属性中的ItemId的值来保存到对象中。
b)AutoClearAddon属性
这个属性的作用是当TbuttonEdit的Text的值改变了的时候,控件会自动清空AddOn属性的值,即字段的Id值。
当该属性为True时,给TbuttonEdit赋值时一定要将给AddOn赋值的语句写在给其Text赋值之后。
下面的语句是错误的:
BedtItemCode.AddOn:
=ItemTmp.ItemId;
BedtItemCode.Text:
=ItemTmp.ItemCode;
两句应该调换位置才是正确的。
c)ButtonStyle属性
这个属性设置TbuttonEdit的显示形式的。
它有四个值,分别是:
lsDropdown,lsEllipsis,lsNormal,lsSelect。
当是lsDropdown值时,TbuttonEdit是下拉框的形式,在属性Items中写入要显示的值;
当是lsEllipsis值时,TbuttonEdit的编辑框右边有出现一个小按钮,可以在OnButtenClick事件中为小按钮写入事件;
当是lsNormal值时,TbuttonEdit是一个普通的编辑框;
当是lsSelect值时,TbuttonEdit也是下拉框的形式,但是和lsDropdown的区别是在属性Items中是要显示的值,在属性Values中是字段真正要传回后台的值。
d)DataFormat属性
DataFormat这个属性是设置TbuttonEdit的数据类型的。
它有五个值,分别是:
dfDate,dfDateTime,dfInteger,dfNumber,dfString。
当是dfDate值时,TbuttonEdit的数据类型是日期型;
当是dfDateTime值时,TbuttonEdit的数据类型是日期时间型;
当是dfInteger值时,TbuttonEdit的数据类型是整数型;
当是dfNumber值时,TbuttonEdit的数据类型是实数型;
当是dfString值时,TbuttonEdit的数据类型是字符串型。
e)FocusControl属性
FocusControl这个属性的作用是在设置焦点控