GT80前端程序设计规范(草)
一.界面规范。
1.原则:
.朴实、简洁、统一、实用、方便。
2.屏幕分辨率:
统一为800*600。
3.窗体:
.不支持最大化和最小化,不支持大小改变
(BorderStyle为bsDialog或bsSingle)
.位置一般居中,或用代码实现居中。
.在用户操作过程中弹出的选择表单的位置应以当前焦点为准,
以避免用户视觉焦点的大幅度转移。
3.颜色:
.除特殊情况外,一屏的颜色尽量不要超过三种,
.多使用clBlack,clNacy,clTeal,clGray等冷色,
.少使用clRed,clGreen,clBlue,clYellow等暖色,
(以减少对使用者视觉的刺激)
.Button等标准控件的颜色使用系统颜色。
4.字体:
.尽量使用宋体12号标准字体(中文及英文),及TimesNew
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=newTf_Example_Form(Application);
if(form->NeedShow)
form->ShowModal();
deleteform;
一个典型的信息传入传出代码如下:
//使用ed_zqdm输入的证券拼音简写让用户选择此简写的证券
#defineSHENZHEN0
intmarket=SHENZHEN;
TstringList*zqdm_list=newTstringList();
AnsiStringpy=ed_zqdm->Text.Trim();
AnsiStringzqdm;
GetZqpy(market,py,zqdm_list);
if(zqdm_list->Count==0){
ShowMessage(“NoSuchZqpy!”);
return;
}
elseif(zqdm_list->Count==1)
zqdm=zqdm_list->Strings[0];
else{
Tf_SeleZqdmByPy*form;
//利用构造函数传入信息
form=newTf_SeleZqpyByPy(Application,market,zqdm_list);
intret=form->ShowModal();
//利用Public成员传出信息
if(ret==mrYes){
zqdm=form->zqdm;
deleteform;
}
else{
deleteform;
return;
}
}
……
……
f_SeleZqdmByPy的头文件如下:
Private:
//用以接受传入信息的变量
intmarket;
TStringList*zqdm_list;
Public:
//用以传出信息的变量
AnsiStringzqdm;
//重载构造函数
__fastcallTf_SeleZqdmByPy(Tcomponent*Owner,
intp_market,TstringList*p_zqdm_List);
f_SeleZqdmByPy的源文件如下:
__fastcallf_SeleZqdmByPy::Tf_SeleZqdmByPy(TComponent*
Owner,intp_market,TStringList*p_zqdm_List)
:TForm(Owner)
{
//接受传入信息
market=p_market;
zqdm_list=newTStringList();
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是否有效,避免程序异常
.尽量减少与后端的交互问题
一些不易变动的配置等应一次取到前端保留,避免与后端的多次交
互。
.尽量从使用者的角度考虑来设计界面、焦点控制等
尽量使频繁的业务操作使用小键盘和箭头键盘即可完成
.注意当用户按住回车等按键不放(比如键盘开住卡住)时不会出现误
操作
[C++] 一个真实的 C++ Builder 系统编码规范文档
最新推荐文章于 2023-08-18 11:49:05 发布