您的位置:首页 > 编程语言 > C语言/C++

[C++] 一个真实的 C++ Builder 系统编码规范文档

2005-03-13 18:25 351 查看
GT80前端程序设计规范(草)
一.界面规范。

1.原则:
.朴实、简洁、统一、实用、方便。

2.屏幕分辨率:
统一为800*600。

3.窗体:
.不支持最大化和最小化,不支持大小改变
(BorderStyle为bsDialog 或 bsSingle)
.位置一般居中,或用代码实现居中。
.在用户操作过程中弹出的选择表单的位置应以当前焦点为准,
以避免用户视觉焦点的大幅度转移。

3.颜色:
.除特殊情况外,一屏的颜色尽量不要超过三种,
.多使用clBlack,clNacy,clTeal,clGray等冷色,
.少使用clRed,clGreen,clBlue,clYellow等暖色,
(以减少对使用者视觉的刺激)
.Button等标准控件的颜色使用系统颜色。

4.字体:
.尽量使用宋体12号标准字体(中文及英文),及 Times New
Roman 字体(英文、数字)。
.少使用加粗、倾斜、下划线等字体。

4.帮助:
.尽量不要在屏幕上出现繁杂的操作说明,多使用 Help 按钮调出详
细的操作说明或使用控件的 Hint 和 ShowHint属性。

5.热键:
F1 ---- 帮助
F2 ---- 确认、存盘
F4 ---- 修改
F8 ---- 打印
F9 ---- 重录,重输,下一笔
PgUp ---- 多页间的向前翻页
PgDn ---- 多页间的向后翻页
Esc ---- 退出,放弃

其余功能键用于机动,尽量使一屏的功能热键相互之间在键盘上至少
相隔一个键或在不同的区域,如使用:F2、F4 、F5、F8、F9 键。

6.键盘支持:
.前台所有功能、后台常用功能以及对用户的输入要求实时响应的功
能应全面支持键盘,输入、选择控件间焦点的移动必须至少支持回
车、上下箭头,若需要对输入响应的复杂表单,响应代码应写在
KeyDown、Change 等事件中,同时不允许Tab,Shift-Tab的焦点移
动。若各控件横向排列,也可支持左右箭头键的移动(Edit 的左右
箭头键亦可实现,具体参见[前台|业务查询|实时委托查询]的源代
码)。
.Page 控件的翻页必须支持PgUp和PgDn键。若焦点在ListView、
StringGrid 等控件时,必须支持 Alt--PgUp、Alt—PgDn 的翻页。
.多页查询的结果不能因为翻页而丢失,任一页的重新查询必须用F9
等热键或鼠标进行。
.只支持键盘的表单应进入前应使用 InitCursor()函数屏蔽鼠标,退
出后使用 RestoreCursor()函数恢复鼠标。或者程序中进行相应的
检查,避免用户使用鼠标造成程序异常或误操作。

7.焦点控制:
.表单在任何情况下均不能出现焦点丢失的现象
.焦点的移动以业务规范、屏幕布局为依据,总的原则是让用户感到
方便、快捷。
.当焦点在ListView,ListBox,CheckListBox等控件中时,至少应
选中控件中一行,并且退出控件时选中的行在重新进入控件时应亦被
选中。

8.查询结果的显示:

.数量固定的查询结果可使用Label、StaticText等显示(注意对齐、
间距)。
.数量动态的查询结果可使用ListView,StringGrid等显示:
ListView -> 编码简单,但对大数据量结果显示速度慢
StringGrid -> 编码复杂,但适用于大数据量的查询

- 尽量让控件占据较多屏幕空间,不要使其出现横向滚动条。
- 查询结果出来后,焦点应移至结果控件中,除非用户使用鼠标或
热键,否则不得使结果控件丢失焦点(譬如当结果控件的第一行选
中时按上箭头键将焦点移至最后一个条件输入控件,当结果控件
的最后第一行选中时按下箭头键将焦点移至打印按钮等做法都是
错误的)。
- 多页的查询结果不能因页间的切换而丢失,即当某一页的查询结
果出来后,用户切换至另一页,再切换回本页,此页的查询结果
应依然显示。
- 多页的查询结果都出现后,当用户再次切换至本页时,若有查询
果,结果控件应得到焦点,若无查询结果,焦点应保持原地或移
至第一个条件输入控件。
- 对查询结果有逻辑上的上限时,可不限制结果行数,如证券余额、资金余额、股民基本资料浏览等),对逻辑上无上限的查询,
如历史查询等,应规定一个行数上限(如 1000 条),避免后端负
荷过重或前端速度缓慢死机等。原则上不再象GT7.0那样支持翻
页。

多页查询的实例参见[前台|业务查询|历史对帐查询]。

9.对特定控件的控制
.ComboBox
- 处于非下拉状态时,按下箭头键下拉
- 空格键切换下拉状态
- 回车键选中退出

.EditBox
- 上箭头键焦点移至上一控件
- 下箭头键、回车焦点移至下一控件
- 控件横向排列时,可支持左右箭头键的焦点移动
.ListView
- 选中某一行按回车或鼠标双击表示选中

二.编码规范。

1.原则:
书写简单、意义明了、查找方便。尽量使用拼音简写(若英文不复
杂也可使用英文)或拼音与英文的混合。
如:
ed_khzl -> 输入客户资料的Edit
bn_ensure -> 确认Button
cb_market -> 选择市场的ComboBox
ZHZJ_AccessFund -> 客户、资金管理的资金存取模块的单元文件
f_WTGL_BulkWT -> 委托管理的批量委托表单

2.单元文件命名:
普通规则 — 所属子模块名_单元名
公用单元 – G_单元名

所属子模块名全部大写、单元名大小写混合

如: ZHZJ_AddACC -> 客户资金管理的客户开户资金存取模块
YYCX_SswtCx -> 营业查询的实时委托查询模块
G_Comm -> Comm 单元
G_GetAccount-> 输入客户资料通用单元

3.表单命名:
普通规则 — f_所属子模块名_单元名(f_单元文件名)
公用单元 – f_G_单元名

所属子模块名全部大写、单元名大小写混合

如: f_ZHZJ_AddACC -> 客户资金管理的客户开户资金存取模块表单
f_YYCX_SswtCx -> 营业查询的实时委托查询模块表单
f_G_GetAccount-> 输入客户资料通用表单

4.控件命名:
规则:全部小写

控件 前缀
Button,BitBtn -> bn_
Edit,MaskEdit,MultiMaskEdit -> ed_
Label -> l_
StaticText -> st_
Menu,PopMenu -> m_
Memo -> mo_
CheckBox,ComboBox,CheckListBox-> cb_
RadioBox -> rb_
ListBox -> lb_
GroupBox -> gb_
RadioGroup -> rg_
Panel -> pn_
StringGrid,TWStringGrid -> sg_
ListView,TWListView -> lv_
Image -> img_
TabControl -> tab_
PageControl -> pg_
ImageList -> imgl_
ProgressBar -> pb_
Animate -> am_
TreeView -> tv_
StatusBar -> sb_
Timer -> ti_
CGauge -> cg_
OpenDialog -> od_
PrintDialog -> pd_

代码中不涉及的控件,如提示性的Label,可使用系统缺省的名字,
如 Label1,Label2… 表单中只有一个的控件,如Animate,可只使
用前缀(去掉下划线),如 am, 其余的控件,必须使用[前缀+有意
义的后缀名字]来命名。
对多页中的控件,每一页中的控件,最好以[前缀+TabControl后缀
名字+有意义的后缀名字]来命名,以避免和其他页面上的控件混淆

5.表单设计:
.所有非主表单均采用 New() 创建,用 ShowModal() 显示,用
Cancel属性为True,ModalResutl为非mrNone的退出Buttuon
退出(热键Esc)或写代码Close()退出,建议使用前者。用
Delete()删除。
.表单的初始化工作在Create、Show事件中进行,总的原则是界面
的调整在Show中,SQL调用、其余非可视化控件的创建在Create
中。若SQL调用耗时很长,建议显示动画等待窗口(参见前台的
f_Anmi_Wait和 f_JG_SingleJg 表单)。变量的初始化工作在表单
的构造函数或Create事件中进行。
.在表单的Create事件中用New()创建的非可视化控件在Destory事
件中用Delete()删除。
.建议在表单给出一Public成员NeedShow(int 或 Bool),用以判断
表单是否应该显示。例如:若在Create 中的SQL调用出错,则显
示信息框,并置NeedShow为0后False,表示表单不应显示。
.表单信息的传入使用重载表单的构造函数或全局变量进行
表单信息的传出使用表单的 Public 成员或全局变量进行
建议均使用前者。

一个典型的菜单代码(表单创建、显示、删除)如下:

Tf_Example_Form *form=new Tf_Example_Form(Application);

if(form->NeedShow)
form->ShowModal();

delete form;

一个典型的信息传入传出代码如下:

//使用ed_zqdm输入的证券拼音简写让用户选择此简写的证券

#define SHENZHEN 0

int market=SHENZHEN;
TstringList *zqdm_list = new TstringList();

AnsiString py = ed_zqdm->Text.Trim();
AnsiString zqdm;

GetZqpy(market,py,zqdm_list);

if(zqdm_list->Count==0){
ShowMessage(“No Such Zqpy!”);
return;
}
else if(zqdm_list->Count==1)
zqdm = zqdm_list->Strings[0];
else{

Tf_SeleZqdmByPy *form;
//利用构造函数传入信息
form =new Tf_SeleZqpyByPy(Application,market,zqdm_list);
int ret=form->ShowModal();
//利用Public成员传出信息
if(ret==mrYes){
zqdm=form->zqdm;
delete form;
}
else{
delete form;
return;
}
}
……
……

f_SeleZqdmByPy的头文件如下:

Private:
//用以接受传入信息的变量
int market;
TStringList *zqdm_list;
Public:
//用以传出信息的变量
AnsiString zqdm;
//重载构造函数
__fastcall Tf_SeleZqdmByPy(Tcomponent *Owner,
int p_market,TstringList *p_zqdm_List);

f_SeleZqdmByPy的源文件如下:

__fastcall f_SeleZqdmByPy::Tf_SeleZqdmByPy(TComponent*
Owner,int p_market,TStringList *p_zqdm_List)
:TForm(Owner)
{
//接受传入信息
market=p_market;
zqdm_list=new TStringList();
zqdm_list->Assign(p_zqdm_list);
}

在f_SeleZqdmByPy中,使用 ListView 等控件显示zqdm_list,用户选择后设置表单的zqdm成员(用以传出选择结果),同时设置ModalResult为mrYes关闭表单、

6.合法性检查:

.原则上不在控件的Exit事件中,而在KeyDown等事件中写合法性
检查代码。
.所有的合法性检查必须在按确认、存盘等按钮按下后再进行一遍。
避免用户用鼠标移动焦点造成的输入数据非法。
.按下确认、存盘等按钮后合法性检查应依输入次序进行,若非法,
给出明确的提示信息,同时焦点应移至相应的输入控件。

7.一些注意事项:

.注意设置ComboBox的Style属性
.注意给ComboBox的ItemIndex 赋初值
.注意给Edit,Label的Text,Caption 赋初值
.注意一些以外情况的处理:
如:取不到分部时应显示“无分部配置”信息框,而不应显示一个空
的ComboBox.
.注意在重新输入查询条件时将查询结果清空,避免信息显示的混乱
及打印的错误
.取ListView 的Selected 等属性时,注意判断是否为空,避免程序
异常
.注意Button的失效控制
- 若Button 的Click事件中有ProcessMessage()等函数,必须在
Click中先使Button失效,处理完后再恢复,避免Click的重入
- 对Click的热键注意判断Button是否有效,避免程序异常
.尽量减少与后端的交互问题
一些不易变动的配置等应一次取到前端保留,避免与后端的多次交
互。
.尽量从使用者的角度考虑来设计界面、焦点控制等
尽量使频繁的业务操作使用小键盘和箭头键盘即可完成
.注意当用户按住回车等按键不放(比如键盘开住卡住)时不会出现误
操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: