![]() |
Kompomente "klaut" Pfeiltasten, Keyboard-Hook ?
Hallo #,
ich habe hier eine Komponente (kein Src-Code). Packe ich die auf das Form und gebe ihr den Focus, bekommt mein Form keine Pfeiltasten-Nachrichten mehr, auch bei KeyPreview=True. Sieht so aus, als setzt die einen Hook. Bin ich schlau, setze auch einen, aber die Methode MoveLeft wird jetzt 3mal aufgerufen. Wie kann ich das verhindern ? Danke Heiko
Delphi-Quellcode:
unit Unit3;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ieview, imageenview, hyieutils, hyiedefs, imageenproc; type TForm3 = class(TForm) ImageEnView1: TImageEnView; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormShow(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private-Deklarationen } procedure MoveLeft; public { Public-Deklarationen } end; var Form3: TForm3; KBHook: HHook; function KeyboardHookProc(Code: Integer; WordParam: Word; LongParam: LongInt): LongInt; stdcall; implementation {$R *.dfm} function KeyboardHookProc(Code: Integer; WordParam: Word; LongParam: LongInt): LongInt; stdcall; var Key: Word; begin case WordParam of VK_LEFT: begin Key:= WordParam; LongParam:= 1; Form3.MoveLeft; Result:= 0; Exit; end; end; Result:= CallNextHookEx(KBHook, Code, WordParam, LongParam); end; procedure TForm3.FormCreate(Sender: TObject); begin inherited ; KBHook:= SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, GetCurrentThreadId()); end; procedure TForm3.FormDestroy(Sender: TObject); begin UnHookWindowsHookEx(KBHook) ; end; procedure TForm3.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=VK_ESCAPE then begin Close; end; if Key=VK_LEFT then begin ShowMessage('Left'); Key:= 0; end; if Key=VK_RIGHT then begin ShowMessage('Right'); end; end; procedure TForm3.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=VK_ESCAPE then begin Close; end; if Key=VK_LEFT then begin ShowMessage('Left'); Key:= 0; end; if Key=VK_RIGHT then begin ShowMessage('Right'); end; end; procedure TForm3.FormShow(Sender: TObject); begin ImageEnView1.SetFocus; end; procedure TForm3.MoveLeft; begin ShowMessage('MoveLeft'); end; { MoveLeft } end. |
Re: Kompomente "klaut" Pfeiltasten, Keyboard-Hook
Hallo,
Teil-Lösung:
Delphi-Quellcode:
so in etwa beschrieben bei MSDN
function KeyboardHookProc(Code: Integer; WordParam: Word; LongParam: LongInt): LongInt; stdcall;
begin if Code>0 then begin case WordParam of VK_LEFT: begin WordParam:= 0; Form3.MoveLeft; Result:= 1; Exit; end; end; end; Result:= CallNextHookEx(KBHook, Code, WordParam, LongParam); end; ![]() Problem: Die Form-Methode wird "irgendwie" zweimal aufgerufen. Setze ich dort einen Breakpoint oder ein ShowMessage, nicht. Ein EmptyKeyQueue via PeekMessage klappt auch nicht ;( Heiko |
Re: Kompomente "klaut" Pfeiltasten, Keyboard-Hook
Hallo,
danke für die zahlreichen Hinweise ;) Die Komponente hatte ein zusätzliches OnKey für Pfeil-Tasten. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz