Тема: Як задати гарячі клавіші для TMenuItem?

Навпроти пунктів меню зʼявляються відповідні позначки про гарячі клавіші, але натиснення на клавіші нічого не дає.

const
    functionalKeysCodes: array [0..10] of String = ('F1', 'F2', 'F3', 'F4', 'F5',
        'F6', 'F7', 'F8', 'F9', 'F10', 'F11');
var
    mi: TMenuItem;
begin

    for I := 0 to iu.Count - 1 do
    begin
        mi := TMenuItem.Create(PopupMenu1);
        
        if I <= 10 then
            mi.ShortCut := TextToShortCut(functionalKeysCodes[i]);

        PopupMenu1.Items.Add(mi);
        mi.OnClick := MenuItemClick;
    end;

end;

2

Re: Як задати гарячі клавіші для TMenuItem?

HotKey у властивостях TMenuItem або його подпункта

3

Re: Як задати гарячі клавіші для TMenuItem?

javascriptIsLife написав:

Навпроти пунктів меню зʼявляються відповідні позначки про гарячі клавіші, але натиснення на клавіші нічого не дає.

const
    functionalKeysCodes: array [0..10] of String = ('F1', 'F2', 'F3', 'F4', 'F5',
        'F6', 'F7', 'F8', 'F9', 'F10', 'F11');
var
    mi: TMenuItem;
begin

    for I := 0 to iu.Count - 1 do
    begin
        mi := TMenuItem.Create(PopupMenu1);
        
        if I <= 10 then
            mi.ShortCut := TextToShortCut(functionalKeysCodes[i]);

        PopupMenu1.Items.Add(mi);
        mi.OnClick := MenuItemClick;
    end;

end;
PopupMenu1.Items.Add(mi);
mi.OnClick := MenuItemClick;

дійно цікаво, чому

4

Re: Як задати гарячі клавіші для TMenuItem?

вам простіше буде призначити обробника OnKeyPress для форми, ніж морочитися з ShortCut. Для F-к - VK_F1

5

Re: Як задати гарячі клавіші для TMenuItem?

Натискання гарячих клавіш перевіряє форма, але якщо ви призначили PopupMenu1 не формі, а якомусь іншому компоненту, то вона не буде перевіряти чужі гарячі клавіші.
Якщо треба, щоб працювало глобально, то киньте на форму TActionList, і створіть TAction з потрібними гарячими клавішами. Потім ці екшени можна вибрати в своїх пунктах меню, кнопках і будь де, де вони мають спрацьовувати.

Подякували: PeSePol, javascriptIsLife, leofun013

6

Re: Як задати гарячі клавіші для TMenuItem?

Гарячі клавіші все одно не спрацьовують.

7

Re: Як задати гарячі клавіші для TMenuItem?

А вам треба, щоб воно працювало, коли вікно сховане, чи що? Це трохи інша тема, бо тут уже потрібна взаємодія з чужими процесами. В найпростішому випадку треба використати системну функцію RegisterHotKey: https://stackoverflow.com/questions/411 … snt-active

Подякували: javascriptIsLife, leofun012

8

Re: Як задати гарячі клавіші для TMenuItem?

Так. Форма схована. PopupMenu приєднане до TrayIcon.

9

Re: Як задати гарячі клавіші для TMenuItem?

Звичайні гарячі клавіші працюють лише коли ваша програма активна. Якби це було не так, то ви б не знали яка з декількох програм збереже файл, коли ви натискаєте Ctrl+S. Для глобальних гарячих клавіш дивіться приклад за посиланням вище.

10

Re: Як задати гарячі клавіші для TMenuItem?

А як створюються клавіші швидкого виклику (ті що пікреслені) пунктів меню? Вони працюють завжди.

11

Re: Як задати гарячі клавіші для TMenuItem?

Подивіться тут

12

Re: Як задати гарячі клавіші для TMenuItem?

javascriptIsLife написав:

А як створюються клавіші швидкого виклику (ті що пікреслені) пунктів меню? Вони працюють завжди.

Перед потрібною літерою додається символ "&". Але якщо ви бачите меню, значить ваша програма активна.

Подякували: leofun011