WEB开发网
开发学院软件开发Delphi DBGrid中用光标键控制Cell 阅读

DBGrid中用光标键控制Cell

 2006-02-04 14:01:43 来源:WEB开发网   
核心提示: {// Grids549 14:33 2005-2-17 //}unit Grids549;interfaceuses DBGrids, Classes, Windows;type TDBGrid549 = class(TDBGrid) public PRoperty InPlaceEditor;
 

{////////////////////////
//           //
//   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.

Tags:DBGrid 中用 光标

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接