Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
1 / 1 / 0
Регистрация: 14.10.2012
Сообщений: 95
1

Сочетание клавиш в программе

16.11.2012, 21:01. Показов 3565. Ответов 40
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте уважаемые знатоки Delphi!
Помогите пожалуйста осуществить следующее:
При наборе слова xaker в программе(ни в компоненте а именно в самой прогамме при нажатии на клавиши клавиатуры) чтобы у меня выходило сообщение к примеру 'активировано'.
Меня интересует как можно это описать.
Ну как в GTA San Andreas там читы же есть, вот я усебя в программе тоже хочу такое сделать.
заранее спасибо.

Добавлено через 4 часа 28 минут
Прошу помогите, если чето не понятно спрашивайте.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2012, 21:01
Ответы с готовыми решениями:

Как программно послать сочетание клавиш?
НА форме есть MsRdpClient (mstscax.dll) нужно этому компоненту послать сочетание клавиш. как это...

Хук - как отловить сочетание клавиш?
Долго над этим бьюсь, никак не могу понять, во-первых - lparam меняется только при зажатом Альт, на...

При нажатии на кнопку вызвать сочетание клавиш
Можно ли сделать так, чтобы при нажатии на кнопку было вызвано сочетание клавиш. Нужно: Ctrl+Del,...

Как отменить сочетание клавиш в RichEdit, Delphi 7
На форме есть кнопка и у свойства ShortCut этой кнопки стоит сочетание клавиш Ctrl + Z. Но когда я...

40
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
16.11.2012, 21:04 2
Лови сообщения с клавиатуры.
0
1 / 1 / 0
Регистрация: 14.10.2012
Сообщений: 95
16.11.2012, 21:21  [ТС] 3
Каким образом? код не набросаешь?)
0
Модератор
3491 / 2614 / 741
Регистрация: 19.09.2012
Сообщений: 7,976
16.11.2012, 21:24 4
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
............
var
  Form1: TForm1;
  i: integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  'x': if i = 0 then inc(i);
  'a': if i = 1 then inc(i);
  'k': if i = 2 then inc(i);
  'e': if i = 3 then inc(i);
  'r': ShowMessage('xaker');
  else i := 0;
  end;
end;
.............
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
16.11.2012, 21:30 5
Цитата Сообщение от hardik Посмотреть сообщение
Каким образом? код не набросаешь?)
Ну конечноже по образу и подобию Drag&Drop:
Delphi
1
procedure WMKeyDown(Var Msg:TWMKeyDown); message WM_KeyDown; //сообщения с клавиатуры
Добавь модуль ShellAPI в uses.
Код процедуры пиши по условию:
Delphi
1
2
3
4
if Msg.CharCode=...{Код клавиши} then
begin
//что-то произошло.
end;
Добавлено через 28 секунд
Цитата Сообщение от hardik Посмотреть сообщение
Ну как в GTA San Andreas там читы же есть, вот я усебя в программе тоже хочу такое сделать.

Не по теме:

Только не говори, что это чит?

1
1 / 1 / 0
Регистрация: 14.10.2012
Сообщений: 95
16.11.2012, 21:43  [ТС] 6
Цитата Сообщение от gorfil Посмотреть сообщение
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
............
var
  Form1: TForm1;
  i: integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  'x': if i = 0 then inc(i);
  'a': if i = 1 then inc(i);
  'k': if i = 2 then inc(i);
  'e': if i = 3 then inc(i);
  'r': ShowMessage('xaker');
  else i := 0;
  end;
end;
.............
Данная процедура не работает.
0
Модератор
3491 / 2614 / 741
Регистрация: 19.09.2012
Сообщений: 7,976
16.11.2012, 21:45 7
Я проверял, все работает. Ты куда ее вставил?
0
1 / 1 / 0
Регистрация: 14.10.2012
Сообщений: 95
16.11.2012, 21:49  [ТС] 8
Цитата Сообщение от саша40 Посмотреть сообщение
Ну конечноже по образу и подобию Drag&Drop:
Delphi
1
procedure WMKeyDown(Var Msg:TWMKeyDown); message WM_KeyDown; //сообщения с клавиатуры
Добавь модуль ShellAPI в uses.
Код процедуры пиши по условию:
Delphi
1
2
3
4
if Msg.CharCode=...{Код клавиши} then
begin
//что-то произошло.
end;
Добавлено через 28 секунд

Не по теме:

Только не говори, что это чит?

А не могли бы вы расписать прям как должно быть со словом xaker.
Это не читы У меня есть тест, ну так вот хочу при нажатии определенного кода чтобы показывались все верные ответы) Поэтому напишите код пожалуйста)

Добавлено через 1 минуту
Цитата Сообщение от gorfil Посмотреть сообщение
Я проверял, все работает. Ты куда ее вставил?
в form1.keypress
вот мой код

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  'x': if i = 0 then inc(i);
  'a': if i = 1 then inc(i);
  'k': if i = 2 then inc(i);
  'e': if i = 3 then inc(i);
  'r': ShowMessage('xaker');
  else i := 0;
  end;
end;
i описана глобально как integer
0
Заблокирован
16.11.2012, 21:57 9
Достаточно переключить на латинскую раскладку и нажать 'r'
0
250 / 155 / 31
Регистрация: 07.10.2012
Сообщений: 401
16.11.2012, 22:04 10
Достаточно головой подумать.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  'x': if i = 0 then inc(i);
  'a': if i = 1 then inc(i);
  'k': if i = 2 then inc(i);
  'e': if i = 3 then inc(i);
  'r': if i = 4 then begin
         ShowMessage('xaker');
         i := 0;
       end
  else i := 0;
  end;
end;
0
1 / 1 / 0
Регистрация: 14.10.2012
Сообщений: 95
16.11.2012, 22:05  [ТС] 11
Не понимаю, создал новый проект там все робит, а вот у меня в проекте работать не хочет(
0
Модератор
3491 / 2614 / 741
Регистрация: 19.09.2012
Сообщений: 7,976
16.11.2012, 22:12 12
Походу мой вариант и вариант с перехватом работают только на пустой форме. Если есть компоненты, то нажатия адресуются им напрямую.
В моем варианте можно TForm1.FormKeyPress назначить каждому компоненту, но это кривое решение.
0
Заблокирован
16.11.2012, 22:21 13
Цитата Сообщение от DaMortum Посмотреть сообщение
Достаточно головой подумать.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  'x': if i = 0 then inc(i);
  'a': if i = 1 then inc(i);
  'k': if i = 2 then inc(i);
  'e': if i = 3 then inc(i);
  'r': if i = 4 then begin
         ShowMessage('xaker');
         i := 0;
       end
  else i := 0;
  end;
end;
xxxaker
xaaaker
xxxxaaaaakkkeeerrr
...
xakkkkkkeeeerr
я так понимаю это всё одно слово xaker
0
Модератор
3491 / 2614 / 741
Регистрация: 19.09.2012
Сообщений: 7,976
16.11.2012, 22:25 14
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  'x': if i = 0 then inc(i) else i := 0;
  'a': if i = 1 then inc(i) else i := 0;
  'k': if i = 2 then inc(i) else i := 0;
  'e': if i = 3 then inc(i) else i := 0;
  'r': if i = 4 then begin
         ShowMessage('xaker');
         i := 0;
       end
  else i := 0;
  end;
end;
Но вопрос сейчас не в этом.
0
1 / 1 / 0
Регистрация: 14.10.2012
Сообщений: 95
16.11.2012, 22:26  [ТС] 15
Цитата Сообщение от gorfil Посмотреть сообщение
Походу мой вариант и вариант с перехватом работают только на пустой форме. Если есть компоненты, то нажатия адресуются им напрямую.
В моем варианте можно TForm1.FormKeyPress назначить каждому компоненту, но это кривое решение.
Именно(
А других вариантов нет?)_
0
Модератор
3491 / 2614 / 741
Регистрация: 19.09.2012
Сообщений: 7,976
16.11.2012, 22:36 16
Вот полностью рабочий вариант:
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
.....
type
  TForm1 = class(TForm)
.....
    procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
    procedure FormCreate(Sender: TObject);
....
var
  Form1: TForm1;
  i: integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
  if Msg.message = WM_Char then
    begin
      case Chr(Msg.wParam) of
      'x': if i = 0 then inc(i) else i := 0;
      'a': if i = 1 then inc(i) else i := 0;
      'k': if i = 2 then inc(i) else i := 0;
      'e': if i = 3 then inc(i) else i := 0;
      'r': if i = 4 then begin
         ShowMessage('xaker');
         i := 0;
       end
       else i := 0;
      end;
    end;
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := AppMessage; // Ïåðåõâàò÷èê ñîáûòèé
end;
 
end.
1
1 / 1 / 0
Регистрация: 14.10.2012
Сообщений: 95
16.11.2012, 23:12  [ТС] 17
Цитата Сообщение от gorfil Посмотреть сообщение
Вот полностью рабочий вариант:
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
.....
type
  TForm1 = class(TForm)
.....
    procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
    procedure FormCreate(Sender: TObject);
....
var
  Form1: TForm1;
  i: integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
  if Msg.message = WM_Char then
    begin
      case Chr(Msg.wParam) of
      'x': if i = 0 then inc(i) else i := 0;
      'a': if i = 1 then inc(i) else i := 0;
      'k': if i = 2 then inc(i) else i := 0;
      'e': if i = 3 then inc(i) else i := 0;
      'r': if i = 4 then begin
         ShowMessage('xaker');
         i := 0;
       end
       else i := 0;
      end;
    end;
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := AppMessage; // Ïåðåõâàò÷èê ñîáûòèé
end;
 
end.
Именно это я и имел ввиду, а не подскажете источник(откуда взято это)?)
Спасибо!)
0
Модератор
3491 / 2614 / 741
Регистрация: 19.09.2012
Сообщений: 7,976
16.11.2012, 23:19 18
У Application есть событие OnMessage которому можно назначить свою процедуру обработки.
Остальное из головы.
0
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
16.11.2012, 23:33 19
Цитата Сообщение от gorfil Посмотреть сообщение
У Application есть событие OnMessage которому можно назначить свою процедуру обработки.
Для этого у формы есть специальное событие OnShortCut
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
procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
 if msg.Result = 0 then exit;
 
    case Chr(Msg.CharCode) of
      'X':
        if int = 0 then
          inc(int)
        else
          int := 0;
      'A':
        if int = 1 then
          inc(int)
        else
          int := 0;
      'K':
        if int = 2 then
          inc(int)
        else
          int := 0;
      'E':
        if int = 3 then
          inc(int)
        else
          int := 0;
      'R':
        if int = 4 then
          begin
            ShowMessage('xaker');
            int := 0;
          end
        else
          int := 0;
    end;
 
end;
0
1 / 1 / 0
Регистрация: 14.10.2012
Сообщений: 95
16.11.2012, 23:35  [ТС] 20
Ясно, теперь след. проблема у меня есть 2 формы
1 нужная
2 титульник
ну так вот как запретить ввод этого кода на титульнике?
т.е отключить onmessage на form2 чтоли и как?
0
16.11.2012, 23:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2012, 23:35
Помогаю со студенческими работами здесь

Как сделать сочетание "горячих клавиш" на клик по кнопке?
Доброго времени суток! Нужен такой результат: по нажатию определённого сочетания клавиш на...

Нажатие клавиш в другой программе по PID
Приветствую всех:) сразу прошу прощения если написал некорректно или не в той теме:) собсна сам...

Как реализовать несколько горячих клавиш в программе?
Это моя первая программа на Delphi, я нашёл в интернете способ использования назначаемой из хоткея...

Как можно блокировать сочетание клавиш?
Как с помошью Delphi7 можно отключить сочетание клавиш alt+ctrl+delete?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru