0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 8

Горячие клавиши

30.11.2014, 14:03. Показов 15027. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, как прикрепить горячие клавиши к Button. Например есть процедура:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button2Click(Sender: TObject);
var
  s:real;
  i:integer;
begin
SumEdit.Text:=FloatToStr(0);
s:=0;
for i:=Memo1.Lines.Count-1 downto 0 do
if StrToFloat(Memo1.Lines[i])>=100 then
  begin
  s:=s+StrToFloat(Memo1.Lines[i]);
  SumEdit.Text:=FloatToStr(s)
  end
else
if SumEdit.Text=FloatToStr(0) then
SumEdit.Text:=('Íåò çíà÷åíèé!')
end;
Она прикреплена к button2, как сделать так, чтобы при нажатии клавиши, делфи выполнял процедуру?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.11.2014, 14:03
Ответы с готовыми решениями:

Горячие клавиши
Здравствуйте скажите как можно реализовать горячие клавиши без таймера нужно что бы допустим нажал какую то клавишу сработала процедура...

Горячие клавиши
Вот такая проблемка. Нужно мне настроить горячие клавиши на "Exit" - esc, "About" - f1, "Open" - Ctrl+О. Не могу понять как это...

Горячие клавиши
Здраствуйте уважаемые программисты! У меня просьба, я вылаживаю исходники небольшой программки (делал не я) и хочу чтобы вы сделали в...

18
Эксперт Pascal/Delphi
 Аватар для droider
4887 / 2821 / 865
Регистрация: 04.10.2012
Сообщений: 10,261
30.11.2014, 14:26
Цитата Сообщение от kirosaki Посмотреть сообщение
как сделать так, чтобы при нажатии клавиши, делфи выполнял процедуру?
какой клавиши?
0
0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 8
30.11.2014, 14:29  [ТС]
Любой клавиши, любого хот кей сочетания.
0
Эксперт Pascal/Delphi
 Аватар для droider
4887 / 2821 / 865
Регистрация: 04.10.2012
Сообщений: 10,261
30.11.2014, 14:52
Во-первых, процедуру необязательно привязывать к кнопке. Ее можно просто отдельно оформить.
Delphi
1
2
3
4
5
6
7
8
9
10
type
  TForm1 = class(TForm)
    ...
  private
    { Private declarations }
  public
    { Public declarations }
    procedure MyProc; //например так
//ставим напротив названия процедуры курсор и нажимаем сочетание клавиш Shift+Ctrl+C.
//Будет создан шаблон процедуры. Добавьте в него свой код
Во-вторых, регистрируем ""горячие" клавиши.
Delphi
1
2
3
4
5
6
7
8
9
type
  TForm1 = class(TForm)
    ...
  private
    { Private declarations }
  public
    { Public declarations }
procedure MyProc;
    procedure hot_key(var Message: TMessage); message WM_HOTKEY;//для этой процедуры также создаем шаблон
При создании формы регистрируем команду ("горячую" клавишу):
Delphi
1
2
3
4
procedure TForm1.FormCreate(Sender: TObject);
begin
 RegisterHotKey(Handle, 0, MOD_CONTROL, $41); // для команды Ctrl+A
end;
Внутри созданного шаблона для hot_key, вызываем первоначально созданную основную процедуру MyProc.

Delphi
1
2
3
4
5
procedure TForm1.hot_key(var Message: TMessage);
begin
    // обработчик
    MyProc;
end;
В этом случае, при нажатии клавиш Ctrl+A, будет вызываться Ваша процедура.

В-третьих, при закрытии формы обязательно удаляем зарегистрированную команду

Delphi
1
2
3
4
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    UnRegisterHotKey(Handle, 0);
end;
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
30.11.2014, 17:27
Альтернатива горячим клавишам http://msdn.microsoft.com/ru-R... s.85).aspx (в потоке, таймере).
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
01.12.2014, 02:54
Лучший ответ Сообщение было отмечено kirosaki как решение

Решение

Цитата Сообщение от kirosaki Посмотреть сообщение
Любой клавиши, любого хот кей сочетания.
1
Delphi
1
2
3
  private
    { Private declarations }
       procedure MyProc;
2.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.MyProc;
var
  s:real;
  i:integer;
begin
  SumEdit.Text:=FloatToStr(0);
  s:=0;
  for i:=Memo1.Lines.Count-1 downto 0 do
  if StrToFloat(Memo1.Lines[i])>=100 then
  begin
  s:=s+StrToFloat(Memo1.Lines[i]);
  SumEdit.Text:=FloatToStr(s)
  end
else
  if SumEdit.Text=FloatToStr(0) then
  SumEdit.Text:=('Нет значений!')
 
end;
3
Delphi
1
2
3
4
procedure TForm1.Button1Click(Sender: TObject);
begin
   MyProc;
end;
4) На пример при нажатие F2 вызываю это процедуру
Delphi
1
2
3
4
5
6
7
8
procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
 If Msg.CharCode = 113 then  // F2
  begin
     MyProc;
     Handled := True;
  end
end;
Вложения
Тип файла: rar T1.rar (165.0 Кб, 39 просмотров)
1
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
04.12.2014, 19:59
Цитата Сообщение от kirosaki Посмотреть сообщение
Любой клавиши, любого хот кей сочетания
события OnShortCut смотрим и реализовать уже не сложно
Миниатюры
Горячие клавиши  
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
04.12.2014, 20:53
...упускается тот момент, что определенные комбинации "горячих клавиш" уже могут быть заняты определенными программами, винампом/аимпом, к примеру.

И нюансы Работа в приложении с использованием клавиш
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
04.12.2014, 21:14
Цитата Сообщение от raxp Посмотреть сообщение
что определенные комбинации "горячих клавиш" уже могут быть заняты определенными программами
Как может заняты ? как это представить ?
0
Эксперт Pascal/Delphi
 Аватар для droider
4887 / 2821 / 865
Регистрация: 04.10.2012
Сообщений: 10,261
04.12.2014, 21:24
Цитата Сообщение от xxbesoxx Посмотреть сообщение
Как может заняты ? как это представить ?
А так, что определенная комбинация может повлиять на работу другой программы.
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
04.12.2014, 22:00
Цитата Сообщение от droider Посмотреть сообщение
А так, что определенная комбинация может повлиять на работу другой программы.
Нет, нечего не вляеть если форма активном режиме! То выполняется то операция который мы прописали . Я демонстрирую маленький пример . Повторяю если форма активное ! То выполняется ТОЛЬКО это деиствия который у меня написано
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
  If Msg.CharCode = 113 then // F2
  begin
    ShowMessage(' Вы нажали клавишу  F2 ');
    Handled := True;
  end
  else If Msg.CharCode = 114 then // VK_F3
  begin
    ShowMessage(' Вы нажали клавишу  F3 ');
    Handled := True;
  end
  else If Msg.CharCode = 115 then // VK_F4
  begin
    ShowMessage(' Вы нажали клавишу  F4 ');
    Handled := True;
  end
  else If Msg.CharCode = 116 then // VK_F5
  begin
    ShowMessage(' Вы нажали клавишу  F5 ');
    Handled := True;
  end
  else If Msg.CharCode = 117 then // VK_F6
  begin
    ShowMessage(' Вы нажали клавишу  F6 ');
    Handled := True;
  end
  else If Msg.CharCode = 118 then // VK_F7
  begin
    ShowMessage(' Вы нажали клавишу  F6 ');
    Handled := True;
  end
    else If Msg.CharCode = 20 then // Caps Lock
  begin
    ShowMessage(' Вы нажали клавишу  Caps Lock ');
    Handled := True;
  end
end;
 
end.
А вы меня покажите пожалуйста пример . когда и как он влияет ?
Вложения
Тип файла: rar Form_OnShortCut.rar (2.19 Мб, 47 просмотров)
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
04.12.2014, 22:46
Цитата Сообщение от xxbesoxx Посмотреть сообщение
Нет, нечего не вляеть если форма активном режиме!
А нафига тогда горячие клавиши?
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
04.12.2014, 22:54
Цитата Сообщение от northener Посмотреть сообщение
А нафига тогда горячие клавиши?
Вы наверно не поняли о чем мы раговориваем . и смотрите только ShowMessage(' .................. '); да ? почитайте #8 и #10

Не по теме:

Добавлено через 2 минуты

Цитата Сообщение от northener Посмотреть сообщение
А нафига
(А нафига и Пофига) вы скажите ваших друзей !!!!!!!!! КОМУ ЭТО НРАВИТСЯ .... А СДЕСЬ МЫ ПРОСТО ОБСУЖДАЕМ что то элементарный и следите за ваши ЯЗИКЕ

0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
04.12.2014, 22:54
Цитата Сообщение от xxbesoxx Посмотреть сообщение
Вы наверно не поняли о чем мы раговориваем
Я понимаю. Это вы не понимаете возражения в постах 8 и 10. А также не понимаете чем отличается горячая клавиша от шортката.
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
04.12.2014, 23:06
Цитата Сообщение от northener Посмотреть сообщение
чем отличается горячая клавиша от шортката.
Что вы понимайте ? Ну покажите как он ( повлиять на работу другой программы )

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от northener Посмотреть сообщение
А также не понимаете чем отличается горячая клавиша от шортката
Рассказчик рассказывает сказку :D понятное дела

0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
04.12.2014, 23:42
А вы меня покажите пожалуйста пример . когда и как он влияет ?
Вложения Form_OnShortCut.rar
запустите любую программу, в которую можно назначить горячие клавиши, винамп, к примеру (конфигурация/настройки/установки/клавиатура). Назначьте клавишу на PLay/Pause - F6. Теперь запустите Project1.exe из архива, нажмите F6 - будет работать только для винампа, а в программе никакой реакции, работать не будет, в фокусе она или нет.

Следует различать глобальные "горячие" клавиши и локальные "горячие" клавишы. В винампе регистрируются глобальные и эти клавиши будут работать для того приложения, которое первое встало (кто раньше встал - того и тапки) вне зависимости от того свернуто оно или нет, а ваше приложение обломается, ибо запустилось позже и мало того, не регистрировало глобально.

Ссылку я не просто так выше давал, почитали бы, а то спор тут развели.
1
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
05.12.2014, 00:08
Цитата Сообщение от raxp Посмотреть сообщение
примеру (конфигурация/настройки/установки/клавиатура). Назначьте клавишу на PLay/Pause - F6. Теперь запустите Project1.exe из архива, нажмите F6 -
На Winamp да . Правильно так и есть . Даа вы меня удивили
Цитата Сообщение от raxp Посмотреть сообщение
Ссылку я не просто так выше давал
Почитаю
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
05.12.2014, 12:41
Цитата Сообщение от raxp Посмотреть сообщение
Следует различать глобальные "горячие" клавиши и локальные "горячие" клавишы. В винампе регистрируются глобальные и эти клавиши будут работать для того приложения, которое первое встало (кто раньше встал - того и тапки) вне зависимости от того свернуто оно или нет
Да Вы прав . Вот зарегисстрировал F6 и действительно (кто раньше встал - того и тапки) если открыть моего приложения в начале то он работаеть , А если открыть Winamp то он работает .
1)
Delphi
1
2
3
4
  private
    { Private declarations }
     id1, id2, id3, id4, F6: Integer;
     procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
2)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
 if Msg.HotKey = id1 then
     ShowMessage('Ctrl + A pressed !');
   if Msg.HotKey = id2 then
     ShowMessage('Ctrl + Alt + R pressed !');
   if Msg.HotKey = id3 then
     ShowMessage('Win + F4 pressed !');
   if Msg.HotKey = id4 then
     ShowMessage('Print Screen pressed !');
    if Msg.HotKey = F6 then
   ShowMessage('Вы нажали F6 !');
end;
3)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
procedure TForm1.FormCreate(Sender: TObject);
// Different Constants from Windows.pas
const
   MOD_ALT = 1;
   MOD_CONTROL = 2;
   MOD_SHIFT = 4;
   MOD_WIN = 8;
   VK_A = $41;
   VK_R = $52;
   VK_F4 = $73;
   VK_F6 = $75; //   F6
begin
 // Register Hotkey Ctrl + A
  id1 := GlobalAddAtom('Hotkey1');
   RegisterHotKey(Handle, id1, MOD_CONTROL, VK_A);
 
   // Register Hotkey Ctrl + Alt + R
  id2 := GlobalAddAtom('Hotkey2');
   RegisterHotKey(Handle, id2, MOD_CONTROL + MOD_Alt, VK_R);
 
   // Register Hotkey Win + F4
  id3 := GlobalAddAtom('Hotkey3');
   RegisterHotKey(Handle, id3, MOD_WIN, VK_F4);
 
   // Globally trap the Windows system key "PrintScreen"
  id4 := GlobalAddAtom('Hotkey4');
   RegisterHotKey(Handle, id4, 0, VK_SNAPSHOT);
   // Register Hotkey Win + F6 +++++++++++++++++++++++++++++++++++++
  F6 := GlobalAddAtom('Hotkey5');
   RegisterHotKey(Handle, F6, 0, $75);
 
end;
4)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.FormDestroy(Sender: TObject);
begin
   UnRegisterHotKey(Handle, id1);
   GlobalDeleteAtom(id1);
   UnRegisterHotKey(Handle, id2);
   GlobalDeleteAtom(id2);
   UnRegisterHotKey(Handle, id3);
   GlobalDeleteAtom(id3);
   UnRegisterHotKey(Handle, id4);
   GlobalDeleteAtom(id4);
   GlobalDeleteAtom(F6); //+++++++++++
end;
Это беспредел ) Надо как то придумать так, что всегда работал мой приложения .
Вложения
Тип файла: rar системную горячую клавиш.rar (2.20 Мб, 37 просмотров)
0
Эксперт Pascal/Delphi
 Аватар для droider
4887 / 2821 / 865
Регистрация: 04.10.2012
Сообщений: 10,261
05.12.2014, 13:24
Цитата Сообщение от xxbesoxx Посмотреть сообщение
Это беспредел
Это не беспредел. Просто ShortCut и HotKey - это разные понятия.

Не по теме:

ТС' у видно это тоже все равно

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.12.2014, 13:24
Помогаю со студенческими работами здесь

Горячие клавиши
Подскажите пожалуйста как мне назначить какоето действие на горячие клавиши : F1,F2..ну и тд..

Горячие клавиши
Как сделать так, чтобы, например, по нажатию нескольких клавиш открывалось диалоговое окно "Открыть"? Для одной клавиши...

Горячие клавиши
Как прописать вызов горячих клавиш? Например, вызов печати на CTRL+P или поиска на CTRL+F? Спасибо.:)

Горячие клавиши
Как сделать что бы при нажатии клавиш Ctrl+Z выполнялось a:=a+1;

Горячие клавиши
Всем привет. Есть вопрос - можно ли в Delphi использовать комбинации клавиш Alt+1, Alt+2, Alt+3, Alt+4, Alt+5, Alt+6? Есть 6...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru