对一般超过2秒的操作要在函数中
TCursor OldCursor;
OldCursor = Screen->Cursor;
Screen->Cursor = crSQLWait;
try{...} __finally{Screen->Cursor = OldCursor;}
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
begin
if (Shift = []) and (Key = VK_RETURN) then //以回车键代替Tab键
Perform(WM_NEXTDLGCTL, 0, 0);
if Key = VK_NEXT then //按PageUp PageDown使TPageControl切换页面
begin
if PageControl.ActivePageIndex = PageControl.PageCount - 1 then
PageControl.ActivePageIndex := 0
else
PageControl.ActivePageIndex := PageControl.ActivePageIndex + 1;
end
else if Key = VK_PRIOR then
begin
if PageControl.ActivePageIndex = 0 then
PageControl.ActivePageIndex := PageControl.PageCount - 1
else
PageControl.ActivePageIndex := PageControl.ActivePageIndex - 1;
end;
end;
end.
6 按钮互徹
当每完成一个操作动作时 有些按钮要变成无效状态,在什么情况下又恢复有效。虽然只有一段话,如果不设置无效的话会经常带来各种致命错误!因为你是无法预测用户将会如何去操作你的软件,可用Rose来画出状态图或者用Word来表示!
7 性能
当数据多时超过100条,ComboBox Listbox TreeView ListView DBGrid 等数据显示组件边输入边查询
支持模糊查询 模糊查询无非就是 Like ‘%XXX%’可以做个单独的窗口把查到的数据显示在窗口中
void __fastcall TfrmGather760::Edt_NameKeyPress(TObject *Sender,char &Key)
{
if(Key != VK_RETURN)
return;
String sSQL;
sSQL =" Select Name as 姓名, Sales as 薪水 , from employee";
sSQL +=" where Name like '%"+ LowerCase(Edt_Name->Text.Trim()) + "%' ";
TfrmPubDlg *pubDlg = new TfrmPubDlg(this);
pubDlg->ExecuteQuery(sSQL);
pubDlg->ShowModal();
.....
}
8 其他
在开发一个模块时会单独使用个单元和DFM用作公共单元。会在单元里面 作个字符传结构体
Struct TableName
{
String Name;
String FiledName;
......
}; //主要的是在更多的单元里保持一致 尤其是当表名发生改变时
std::vector sErrorArry //统一出错提示 而Delphi ResoucString 段 可以被资源化更容易本地化
新增修改时 对数据的检查 全部集中在保存按钮下
void __fastcall TForm3::Btn_SaveClick(Sender)
{
if(Edt_Name->Text.IsEmpty())
{
ShowMessage(“”);
Edit_Name->SetFocus(); //焦点要定位
return;
}
ModalResult = mrOk;
} 在校的学生们大部分的毕业设计都是数据库之类的不是两层就是三层。要认真去做毕业设计的程序,要花钱请同学帮你做测试,提出更多的操作便利性。只有通过别人的测试,使用你的能力才会提高,代码大多数是异常处理和用户友好性!你带着作品去找工作会非常容易找到好的公司
其实从事数据库前台开发,重要的是写用户友好性代码!作程序员不仅仅是智力劳动 更是体力和心力的劳动!
|