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

             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是否有效,避免程序异常
 .尽量减少与后端的交互问题
  一些不易变动的配置等应一次取到前端保留,避免与后端的多次交
  互。
 .尽量从使用者的角度考虑来设计界面、焦点控制等
  尽量使频繁的业务操作使用小键盘和箭头键盘即可完成
 .注意当用户按住回车等按键不放(比如键盘开住卡住)时不会出现误
  操作

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值