先给各位拜年! 新春快乐!
以下代码有效,但是光标移动后,必须要再点一下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.
以下代码有效,但是光标移动后,必须要再点一下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.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货