TEdit (VisualCLX コンポーネント) があり、onKeyPress イベントで TAB キーの動作をオーバーライドしたいのですが、KeyPress イベントで TAB キーをインターセプトしようとしても機能しません。 Tab キーが TEdit で押されます。
TEdit Control の KeyPress イベントで TAB キーをインターセプトするにはどうすればよいですか?
Tab
ナビゲーション キーはキーボード イベントをトリガーしないため、編集イベントはナビゲーション キーには適用されません。この事実を指摘する唯一の場所。Delphi ヘルプ TCustomForm.KeyPreview
テストするには、フォームに 3 つの TEdit (CLX) と TMemo を配置します。
タブ オーダーは Edit1、Edit2、Edit3
です。使用できる唯一のイベントは KeyUp イベントです。
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Memo1.Lines.Add('Edit1KeyUp');
end;
procedure TForm1.Edit2KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Memo1.Lines.Add('Edit2KeyUp');
end;
procedure TForm1.Edit3KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Memo1.Lines.Add('Edit3KeyUp');
if Key = VK_TAB then begin
Edit2.SetFocus;
end;
end;
シフトタブを押す
メモ1ショー
Edit1KeyUp
Edit1KeyUp
タブを押す
メモ1ショー
Edit2KeyUp
タブを押す
Edit2.SetFocus;
メモ1ショー
Edit3KeyUp
したがって、TAB キーを使用すると、ユーザーは edit2 を離れることはできません
例: Edit3KeyUp イベントでは、#9 を Edit2.Text に追加できます。
if Key = VK_TAB then begin
Edit2.SetFocus;
Edit2.Text := Edit2.Text+#9+'<- a Tab here';
end;