Autor Téma: Klávesové zkratky v aplikaci  (Přečteno 172 krát)

Offline vandrovnik

  • Hrdina
  • ****
  • Příspěvků: 397
  • Karma: 29
    • Verze Delphi: 10.2
Klávesové zkratky v aplikaci
« kdy: 30-01-2018, 18:37:21 »
Excellent
Rated 1 time
Hezký podvečer, v aplikaci, kterou jsem původně měl ještě v Delphi 5, používám tAction s přiřazenými klávesovými zkratkami a občas také událost OnKeyDown na formuláři (má i nastaveno KeyPreview na true).

Některé formuláře si po otevření vytvoří podřízené formuláře, aby uživatel nemusel dlouho čekat na jejich zobrazení. Ty jsou pak v případě potřeby modálně zobrazeny. Zrušeny jsou, až když se ruší jejich nadřízený formulář.

Po převodu do Delphi XE6 a i teď v Delphi 10.2.2 bohužel klávesové zkratky u tAction oněch neviditelných podřízených formulářů mají přednost před OnKeyDown aktivního nadřízeného formuláře. To je samozřejmě velmi nepraktické, protože uživatel stiskne např. F9, a pokud v aktuálním formuláři je klávesa F9 obsloužena jen v OnKeyDown, tak se nezpracuje, místo toho se vykoná akce s klávesovou zkratkou F9 v některém neviditelném formuláři.

Dá se to nějak snadno vyřešit (třeba kdyby existoval nějaký přepínač, kterým bych v aplikaci jen nastavil, že se má pořadí otočit), nebo musím např. ve všech formulářích při jejich zavření (zneviditelnění) nastavit každému ActionManageru State:=asSuspended a po zobrazení to zase vrátit na State:=asNormal? Ono by teda vlastně stačilo, kdyby šlo nastavit, že Action manager v neviditelných formulářích nereaguje na klávesové zkratky...

Díky,

Karel

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 781
  • Karma: 35
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Klávesové zkratky v aplikaci
« Odpověď #1 kdy: 30-01-2018, 21:28:51 »
Dá se to nějak snadno vyřešit (třeba kdyby existoval nějaký přepínač, kterým bych v aplikaci jen nastavil, že se má pořadí otočit), nebo musím např. ve všech formulářích při jejich zavření (zneviditelnění) nastavit každému ActionManageru State:=asSuspended a po zobrazení to zase vrátit na State:=asNormal?

Mam obavu ze ne (za toto chovani muze metoda TCustomForm.IsShortCut resp. jeji vnorena funkce DispatchShortCut). Osobne bych asi presunul kod z udalosti OnKeyDown do OnShortCut (ta je vyvolana pred TAction a da se s ni stisk pripadne "spolknout").
« Poslední změna: 30-01-2018, 21:33:20 od Delfin »
I'm a soldier, so don't panic!

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Křestní jméno zpěváka Gotta: