做了幾個項目後發現customer其實關心的並不是你采用了什麼什麼new technology 他們關心的只是能否
實現他們的要求.在C/S結構中,前台的customer關心的是錄入是否人性化,是否復合他們的habit!這是
使用者最最關心的,在Database system 中人性化的設計應該符合Windows的錄入習慣,畢竟大家平時都在用
這樣設計系統可以少很多系統的後期培訓費用和時間,也可以讓customer在最習慣的情況下錄入和刪除數據
而這些人性化的設計我總結了以下幾點:
1:鍵盤事件(快捷鍵的設計,Tab,Enter......)
2:鼠標事件(雙擊,右鍵)
而這兩點中尤其對Tab,Enter的代碼編寫最為重要,其余的Delphi中進行相應的設置即可.
下面就以DBGrid(StringGrid)舉例explain:
相應的ADOConnection,ADOTable(ADOQuer),DataSource,DBGrid(StringGrid)的代碼就不用再說了:)
/////////////DBGrid(Tab和Enter的應用)
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
if DBGrid1.Columns.Grid.SelectedIndex < DBGrid1.Columns.Count - 1 then
DBGrid1.Columns[DBGrid1.Columns.grid.SelectedIndex + 1].FIEld.FocusControl
else
begin
ADOTable1.next;
DBGrid1.Columns[0].fIEld.FocusControl;
end;
end;
/////////////StingGrid(數據添加)
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
i:=1;
stringgrid1.Colcount:=adotable1.FIEldCount+1;
StringGrid1.RowCount:=adotable1.RecordCount+1;
stringgrid1.cells[1,0]:='english'; //caption
stringgrid1.Cells[2,0]:='chinese'; //caption
adotable1.open;
while not adotable1.eof do
begin
stringgrid1.cells[1,i]:=adotable1.fIElds[0].asstring;
stringgrid1.cells[2,i]:=adotable1.fIElds[1].asstring;
i:=i+1;
adotable1.next;
end;
// adotable1.close;
end;
////////雙擊改變顯示大小
procedure TForm1.StringGrid1DblClick(Sender: TObject);
var
p : TPoint;
r : TRect;
ACol, ARow : Integer;
begin
if GetCursor = Screen.Cursors[crHSplit] then
begin
GetCursorPos(p);
p := StringGrid1.ScreenToClIEnt(p);
StringGrid1.MouseToCell(p.X, p.Y, ACol, ARow);
r := StringGrid1.CellRect(ACol, ARow);
if p.X - r.Left < 10 then
ACol := ACol - 1;
if ACol = -1 then
ACol := StringGrid1.ColCount - 1;
StringGrid1.ColWidths[ACol] := 100;
end;
end;
/////////////另付雙擊ADD
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
DataModule3.DataSource2.DataSet.Insert;
DataModule3.ADOTable2.Fields[0] := DataModule3.ADOTable1.FIElds[0];
DataModule3.ADOTable2.Fields[1] := DataModule3.ADOTable1.FIElds[1] ;
form1.Close;
end;