2007. április 9., hétfő

How to make the [Enter] key behave like the [Tab] key


Problem/Question/Abstract:

How to make the [Enter] key behave like the [Tab] key

Answer:

Solve 1:

You need to trap the keystroke and set up your own response to it. Try this: (Note: This will not work within a DBGrid, since the next field is not a separate object.)

procedure TMainForm.FormCreate(Sender: TObject);
begin
  keyPreview := true; {To turn the event "ON"}
end;

procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    Key := #0;
    PostMessage(Handle, WM_NEXTDLGCTL, 0, 0);
  end;
end;


Solve 2:

Use this code for example for an TEdit's OnKeyPress event:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    SelectNext(Sender as TWinControl, True, True);
    Key := #0;
  end;
end;

This causes Enter to behave like tab. Now, select all controls on the form you'd like to exhibit this behavior (not Buttons) and go to the Object Inspector and set their OnKeyPress handler to EditKeyPress. Now, each control you selected will process Enter as Tab. If you'd like to handle this at the form (as opposed to control) level, reset all the controls OnKeyPress properties to blank, and set the form's OnKeyPress property to EditKeyPress. Then, change Sender to ActiveControl and set the form's KeyPreview property to true:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    SelectNext(ActiveControl as tWinControl, True, True);
    Key := #0;
  end;
end;

This will cause each control on the form (that can) to process Enter as Tab.


Solve 3:

Handle this in the OnKeyPress event. The form's KeyPreview property must be set to true.

procedure TFrmEnterTab.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = Chr(VK_RETURN) then
  begin
    if GetKeyState(VK_SHIFT) < 0 then
      SelectNext(ActiveControl, false, true)
    else
      SelectNext(ActiveControl, true, true);
    Key := #0;
  end;
end;

Nincsenek megjegyzések:

Megjegyzés küldése