Delphi - Tab billentyű lenyomásának érzékelése

forráskód letöltése
A címben lévő probléma ránézésre nem is tűnik feladatnak. Hiszen ott a Form OnKeyDown eseménye, valamint a VK_TAB konstans, mely a tab billentyű kódja.

A gond ott kezdődik, hogy hiába próbáljuk ezzel a módszerrel, a VK_TAB kódja el sem jut a Form OnKeyDown eseményéig. Történik ez azért, mert az egyes komponensek között a Tab billentyűvel lépkedhetünk. Vagyis a Tab lenyomása már feldolgozásra került, így a Form OnKeyDown eseménye nem is kerül meghívásra ekkor.

Persze azért van megoldás… Ez a megoldás a CM_DIALOGKEY üzenet. Melyet megkap a Form-unk a Tab lenyomásakor. Így nincs más teendőnk, mint figyelni ezt az üzenetet és ha fut az eseménykezelőnk, akkor ellenőrizni, hogy a paraméterként kapott TCMDialogKey üzenet Charcode mezője VK_TAB értékű-e. Ha igen, akkor a Tab billentyű lett lenyomva.
procedure TForm1.DoDialogKey(var msg: TCMDialogKey);
begin
  inherited;
  if msg.Charcode=VK_TAB then begin
    Panel1.Color:=Random(256*256*256);
  end;
end;