We know that, generally, pressing the Tab key moves the input focus to
next control and Shift-Tab to previous in the tab order of the form.
When working with Windows applications, most users intuitively expect
the Enter key to behave like a Tab key.
Over the past few years, I've seen a lot of third-party code for implementing better data entry processing in Delphi. In this article, I'll try to bring you the best methods I have found (with some modifications of my own).
Examples below are written with the assumption that there is no default button on the form. When your form contains a button whose Default property is set to True, pressing Enter at runtime executes any code contained in the button's OnClick event handler.
The next code causes Enter to behave like Tab, and Shift+Enter like Shift+Tab:
~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TForm1.Edit1KeyPress (Sender: TObject; var Key: Char) ;
begin
If Key = #13 Then Begin
If HiWord(GetKeyState(VK_SHIFT)) <> 0 then
SelectNext(Sender as TWinControl,False,True)
else
SelectNext(Sender as TWinControl,True,True) ;
Key := #0
end;
end;
~~~~~~~~~~~~~~~~~~~~~~~~~
If you want to have similar Enter (Shift+Enter) processing in DBGrid:
Over the past few years, I've seen a lot of third-party code for implementing better data entry processing in Delphi. In this article, I'll try to bring you the best methods I have found (with some modifications of my own).
Examples below are written with the assumption that there is no default button on the form. When your form contains a button whose Default property is set to True, pressing Enter at runtime executes any code contained in the button's OnClick event handler.
Enter as Tab
The next code causes Enter to behave like Tab, and Shift+Enter like Shift+Tab:
~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TForm1.Edit1KeyPress (Sender: TObject; var Key: Char) ;
begin
If Key = #13 Then Begin
If HiWord(GetKeyState(VK_SHIFT)) <> 0 then
SelectNext(Sender as TWinControl,False,True)
else
SelectNext(Sender as TWinControl,True,True) ;
Key := #0
end;
end;
in DBGrid
~~~~~~~~~~~~~~~~~~~~~~~~~
If you want to have similar Enter (Shift+Enter) processing in DBGrid:
procedure TForm1.DBGrid1KeyPress (Sender: TObject; var Key: Char) ;
begin
If Key = #13 Then Begin
If HiWord(GetKeyState(VK_SHIFT)) <> 0 then begin
with (Sender as TDBGrid) do
if selectedindex > 0 then
selectedindex := selectedindex - 1
else begin
DataSource.DataSet.Prior;
selectedindex := fieldcount - 1;
end;
end else begin
with (Sender as TDBGrid) do
if selectedindex < (fieldcount - 1) then
selectedindex := selectedindex + 1
else begin
DataSource.DataSet.Next;
selectedindex := 0;
end;
end;
Key := #0
end;
end;
~~~~~~~~~~~~~~~~~~~~~~~~~
begin
If Key = #13 Then Begin
If HiWord(GetKeyState(VK_SHIFT)) <> 0 then begin
with (Sender as TDBGrid) do
if selectedindex > 0 then
selectedindex := selectedindex - 1
else begin
DataSource.DataSet.Prior;
selectedindex := fieldcount - 1;
end;
end else begin
with (Sender as TDBGrid) do
if selectedindex < (fieldcount - 1) then
selectedindex := selectedindex + 1
else begin
DataSource.DataSet.Next;
selectedindex := 0;
end;
end;
Key := #0
end;
end;
~~~~~~~~~~~~~~~~~~~~~~~~~
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου