Use cursor keys in DBGRID CELL

xiaoxiao2021-03-06  43

{///// Grids549 //// ///////////} 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 to zerov_right and vk_left to 0

Call this in DBGridKeyDown procedrueeg: 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; Else if key = VK_L EFT 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.

转载请注明原文地址:https://www.9cbs.com/read-57287.html

New Post(0)