A. VCLフォームアプリケーションを作成します。TForm.OnKeyDownのKeyPreviewでのキー処理は、TListBoxで動作しません。
C.設定フォームのKeyPreview
プロパティTrue
へ:
B.は、たとえば、フォーム上にTListBoxコンポーネントを入れて、デザイン時にいくつかの項目に記入します
D.フォームのOnKeyDown
イベントハンドラでは、次のコードを記述してください。
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_BACK then
begin
if ListBox1.Focused then
begin
Key := 0;
CodeSite.Send('ListBox1 is focused!');
end;
end;
end;
E.プログラムを実行し、それをクリックすることでItem5を選択:
今ListBox1がフォーカスを持っています。
F.これで、「バックスペース」キーを押します。おそらく、フォームのOnKeyDown
イベントハンドラーのKey := 0;
を設定すると、BackspaceキーがListBox1コントロールによって処理されないようにブロックする必要があります。しかし、これはあなたが見ることができるように、動作しません:BackSpaceキーはItem5からアイテム1に選択を変更させ:
それでは、どのように私は集中ListBoxコントロールに処理されてからBackSpaceキーを防ぐことができますし、リストボックスの選択を変更するには?
デルファイ10.1ベルリンアップデート2
のWindows 7のx64 SP1
WM_GETDLGCODE –
について読む@DavidHeffernan:あなたはそのメッセージから何を返すことを提案しますか?バックスペースキーストロークを無視するというフラグはありません。 'DLGC_WANTALLKEYS'フラグや' DLGC_WANTCHARS'フラグを無効にする、あるいは 'DLGC_WANTMESSAGE'フラグを有効にすることを考えていますか?あなたはより具体的にする必要があります。 –
TranslateMessageはメッセージループのDispatchMessageの前に呼び出されるため、WM_CHAR(WM_KEYDOWNから変換されたもの)をリストボックスに投稿することはできません。したがって、レミーの答え.... –