先给各位拜年! 新春快乐!
以下代码有效,但是光标移动后,必须要再点一下mouse,DBEdit才会获得焦点.请教各位,应该怎样做才能使DBEdit立即获得焦点?
多谢指教!unit test1;
interface
uses
  Windows, Messages, Classes, Forms,Dialogs, DBEdit, Grids, DBGrids,
  Mask, DBCtrls, StdCtrls, DB, DBTables, Controls;
type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    Table1: TTable;
    DBGrid1: TDBGrid;
    DBEdit1: TDBEdit;    procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    procedure DBGrid1ColExit(Sender: TObject);
    procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}
//--------
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
  if (gdFocused in State) then
  begin
    if (Field.FieldName = DBEdit1.DataField ) then
    begin
      DBEdit1.Left   := Rect.Left  + DBGrid1.Left+3;
      DBEdit1.Top    := Rect.Top   + DBGrid1.top +3;
      DBEdit1.Width  := Rect.Right - Rect.Left   -2;
      DBEdit1.Height := Rect.Bottom- Rect.Top    -2;
      DBEdit1.Visible:= True;
    end;
  end;
end;//--------
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
  If DBGrid1.SelectedField.FieldName = DBEdit1.DataField then
    begin
      DBEdit1.Visible := false;
    end;
end;//--------!!!比较怀疑的就是这里。 移动焦点时用chr(9)是正道,它反而不给干活.
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if (key<>chr(9)) then
  begin
    if (DBGrid1.SelectedField.FieldName =DBEdit1.DataField) then
    begin
      DBEdit1.SetFocus;
      SendMessage(DBEdit1.Handle,WM_Char,word(Key),0);
    end;
  end;end;
end.