Page 1 of 1
Klávesové zkratky u položek menu
Posted: 03 Nov 2008, 10:17
by stepand76
1. Nějak se mi nedaří nastavovat klávesové zkratky položkám v menu (voláním AddMenuItem). Plugin píšu v Delphi, možná je to tam trochu jinak, tak si to musím srovnat. Jaký má být parametr "hotKey" např. pro klávesovou zkratku Alt+F8?
2. Jak je to vlastně s klávesovou zkratkou v metodě AddMenuItem a nastavením klávesových zkratek v Plugin Manageru? Je to nějak propojené?
3. Jak v Plugin Manageru nastavím klávesové zkratky Alt+Delete, Shift+Delete, Ctrl+Delete? Pokaždké když stisknu Delete, v políčku se objeví "Žádné".
Posted: 03 Nov 2008, 10:50
by Jan Rysavy
Dobrý den, zeptám se na úvod: četl jste dokumentaci shared\spl_base.h?
Konkrétně pro AddMenuItem a pro makro SALHOTKEY?
Pokud používáte headry pro Delphi a ty jsou bez komentářů (pouze odhaduji), chtělo by to stáhnout si naše
originální SDK a číst si v něm.
Posted: 03 Nov 2008, 12:06
by stepand76
Originální SDK používám jako dokumentaci.
Pro překlad používám toto:
http://forum.altap.cz/viewtopic.php?t=2177.
Pro SALHOTKEY je tam toto:
Code: Select all
// makro pro pripravu 'HotKey' pro AddMenuItem()
// LOWORD - hot key (virtual key + modifikatory) (LOBYTE - virtual key, HIBYTE - modifikatory)
// mods: kombinace HOTKEYF_CONTROL, HOTKEYF_SHIFT, HOTKEYF_ALT
// examples: SALHOTKEY('A', HOTKEYF_CONTROL | HOTKEYF_SHIFT), SALHOTKEY(VK_F1, HOTKEYF_CONTROL | HOTKEYF_ALT | HOTKEYF_EXT)
//#define SALHOTKEY(vk,mods,cst) ((DWORD)(((BYTE)(vk)|((WORD)((BYTE)(mods))<<8))|(((DWORD)(BYTE)(cst))<<16)))
function SALHOTKEY( vk : Byte; mods : Word ) : DWORD;
begin
Result:= (vk or (mods shl 8));
end;
Což je podle mě správně.
Předávám tam vk=VK_F8, mods=MOD_ALT, což je ve výsledku 378 (dec). U položky v menu, žádná klávesová zkratka není zobrazená a ani nefunguje. Co dělám špatně?
Posted: 03 Nov 2008, 13:32
by Jan Rysavy
Zkusil jsem cvičně přeložit Demo plugin v Microsoft Visual C++ a vše funguje.
Upravil jsem řádek:
Code: Select all
salamander->AddMenuItem(0, "E&nter Disk Path", SALHOTKEY('Z', HOTKEYF_CONTROL | HOTKEYF_SHIFT), ...
salamander->AddMenuItem(0, "E&nter Disk Path", SALHOTKEY(VK_F8, HOTKEYF_ALT), ...
Výsledek makra SALHOTKEY(VK_F8, HOTKEYF_ALT) je 0x00000477.
Doporučuji minimálně pro tyto testy nainstalovat
Microsoft Visual C++ 2008 EE. Je zdarma a s ním náš Demo plugin chodí. Interface do Delphi zjevně není dostatečně odladěný a takto bychom jen ztráceli čas komunikací na obou stranách.
Posted: 03 Nov 2008, 14:58
by stepand76
Díky. Už jsem na to přišel. Byla to moje chyba, nevím proč jsem si myslel že MOD_ALT je to samé jako HOTKEYF_ALT... Velice se omlouvám za marnění vašeho drahoceného času.
PS: Uvedený interface do Delphi je podle mě dobrý. Co můj třetí dotaz? Je to chyba? V nápovědě jsem o tom nic nenašel.
Posted: 03 Nov 2008, 16:09
by Jan Rysavy
Pro sejmutí kláves používáme standardní Hot Key control z Windows:
http://msdn.microsoft.com/en-us/library ... S.85).aspx
Zřejmě tyto kombinace nepodporuje a bylo by potřeba napsat vlastní control.