Klávesové zkratky u položek menu

Podpora vývojářů nových pluginů, oznámení o nových pluginech nezávislých autorů a diskuse o nich.
User avatar
stepand76
Plugin Developer
Plugin Developer
Posts: 455
Joined: 16 Apr 2007, 21:22
Location: Pardubice, Czech Republic

Klávesové zkratky u položek menu

Post 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é".
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post 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.
User avatar
stepand76
Plugin Developer
Plugin Developer
Posts: 455
Joined: 16 Apr 2007, 21:22
Location: Pardubice, Czech Republic

Post 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ě?
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post 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.
User avatar
stepand76
Plugin Developer
Plugin Developer
Posts: 455
Joined: 16 Apr 2007, 21:22
Location: Pardubice, Czech Republic

Post 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.
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post 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.
Post Reply