{//////////////////////// // // // Grids549 // // // // 14:33 2005-2-17 // // // }//////////////////////// unit Grids549;
interface
uses DBGrids, Classes, Windows;
type TDBGrid549 = class(TDBGrid) public property InPlaceEditor; end ; procedure CursorCtrl(Sender: TObject; var Key: Word; Shift: TShiftState);
implementation
{ TDBGrid549 }
procedure CursorCtrl(Sender: TObject; var Key: Word; Shift: TShiftState); { Warn: This procedure may change VK_RIGHT and VK_LEFT to 0
Call this in DBGridKeyDown procedrue eg: procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin Grids549.CursorCtrl(Sender, Key, Shift); end; } var GridEditorMode: Boolean; begin if Shift <> [] then Exit; if (Key <> VK_RIGHT) and (Key <> VK_LEFT) then Exit; GridEditorMode := TDBGrid(Sender).EditorMode; if not GridEditorMode then TDBGrid(Sender).EditorMode := True; if Key = VK_RIGHT then begin if GridEditorMode and (TDBGrid549(Sender).InplaceEditor.SelStart <> Length(TDBGrid549(Sender).InplaceEditor.Text)) then begin Exit; end; //Last field, move to next record if TDBGrid(Sender).SelectedIndex = TDBGrid(Sender).FieldCount - 1 then begin TDBGrid(Sender).DataSource.DataSet.Next; TDBGrid(Sender).SelectedIndex := 0; end else //Focus on next field if TDBGrid(Sender).EditorMode then begin TDBGrid(Sender).SelectedIndex := TDBGrid(Sender).SelectedIndex + 1; end; end else if Key = VK_LEFT then begin if GridEditorMode and(TDBGrid549(Sender).InplaceEditor.SelStart <> 0) then Exit; //First field, move to prior record if TDBGrid(Sender).SelectedIndex = 0 then begin TDBGrid(Sender).DataSource.DataSet.Prior; TDBGrid(Sender).SelectedIndex := TDBGrid(Sender).FieldCount - 1; end else //Focus on prior field if TDBGrid(Sender).EditorMode then begin TDBGrid(Sender).SelectedIndex := TDBGrid(Sender).SelectedIndex - 1; end; end; Key := 0; end;
end. 
|