Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2015.04.05;
Скачать: [xml.tar.bz2];

Вниз

Как отловить нажатия на стрелки, не блокируя их?   Найти похожие ветки 

 
Alex80   (2014-02-03 07:02) [0]

Кидаю на форму TActionList, создаю в нём экшены на нажатия стрелок, чтобы их отлавливать. Создают событие OnExecute. Всё нормально отлавливаются стрелки. ... Но в других контролах стрелки перестали работать. Как починить?


 
Dimka Maslov ©   (2014-02-03 11:25) [1]

Если копнуть поглубже в механизм передачи клавиатурного ввода от операционной системы в активное окно, то мы увидим замечательную картину: система сначала посылает окну сообщение WM_GETDLGCODE, дабы узнать, хочет ли окно само отбрабатывать стрелки, табы и прочий управляющий ввод, либо же передавать фокус в другое окно.


 
Йа   (2014-02-03 12:40) [2]

WTF стрелки?


 
sniknik ©   (2014-02-03 12:57) [3]

> WTF стрелки?
http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B8_%28%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B0%29


 
brother ©   (2014-02-03 13:03) [4]

> Но в других контролах стрелки перестали работать

[3]
Правильно, ибо нефиг делить их с другими :)

> Как починить?

Когда девочки ломаются, мальчики обязаны найти пути ремонта ;)


 
Alex80   (2014-02-04 01:09) [5]


> Dimka Maslov ©   (03.02.14 11:25) [1]
> Если копнуть поглубже в механизм передачи клавиатурного
> ввода от операционной системы в активное окно, то мы увидим
> замечательную картину: система сначала посылает окну сообщение
> WM_GETDLGCODE, дабы узнать, хочет ли окно само отбрабатывать
> стрелки, табы и прочий управляющий ввод, либо же передавать
> фокус в другое окно.

А как это использовать чтобы отловить стрелки, но не заблокировать их?


 
Alex80   (2014-02-04 01:44) [6]

Ещё проблема. Нужно, чтобы приходили повторения нажатия на стрелки, когда держишь их слишком долго.

Неужели я первый кто с этим д*** сталкиваюсь? Неужели нет какого-нибудь давно найденного решения или компонента?


 
Inovet ©   (2014-02-04 01:58) [7]

> [6] Alex80   (04.02.14 01:44)
> Неужели я первый кто с этим д*** сталкиваюсь?

Видимо, никто так не делает, а если делает, так не нужны они в «других контролах».


 
Alex80   (2014-02-04 02:32) [8]

Например, человек ставит GLScene. Когда фокус находится на TGLSceneViewer, то у него нет событий OnKeyPress, OnKeyDown, OnKeyUp.


 
sniknik ©   (2014-02-04 08:16) [9]

> Неужели я первый кто с этим д*** сталкиваюсь?
ну, так, редко находятся индивиды желающие "на моторной лодке по красной площади"... большинство понимают, что значит предназначение используемого средства.

> Неужели нет какого-нибудь давно найденного решения или компонента?
решение как раз не в поиске новых, а в "убрании" лишних компонентов, раз не подходит как они работают. или поменять логику программы на ту под которую они предназначены.

>ставит GLScene ... то у него нет событий OnKeyPress, OnKeyDown, OnKeyUp.
?
вот прям таки всех перечисленных? пусть поставит простой TEdit, в новом проекте, и проверит еще раз все эти события. а то может проблема и не в акциях вовсе.


 
Alex80   (2014-02-04 08:25) [10]


> пусть поставит простой TEdit, в новом проекте

А такие советы вы будете давать создателям Ассассинс Крид.
Пусть вместо нормального решения Теедиты ставят.


 
sniknik ©   (2014-02-04 09:55) [11]

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


 
Alex80   (2014-02-05 07:38) [12]


> осмотреть на другой (лишний, неправильный???, классический)
> компонент

GLScene не является "лишним" компонентом. Это основной компонент программы.


 
brother ©   (2014-02-05 07:43) [13]

> Это основной компонент программы.

не программы, а игрового движка...


 
Inovet ©   (2014-02-05 07:44) [14]

> [12] Alex80   (05.02.14 07:38)
> GLScene не является «лишним» компонентом.

Ты даже не понимаешь ответов, советов.


 
Alex80   (2014-02-05 11:07) [15]


> Ты даже не понимаешь ответов, советов.

"Телепаты в отпуске." ©


 
Alex80   (2014-02-05 11:31) [16]


> brother ©   (05.02.14 07:43) [13]
> > Это основной компонент программы.не программы, а игрового
> движка...

Программа не является игровым движком. GLScene используется для отображения 3D-графики.


 
Inovet ©   (2014-02-05 11:35) [17]

> [15] Alex80   (05.02.14 11:07)
> «Телепаты в отпуске.» ©

Для понимания предложенного выше способности к телепатии не требуются.


 
Плохиш ©   (2014-02-05 12:41) [18]


> Alex80   (05.02.14 11:07) [15]
>
>
> > Ты даже не понимаешь ответов, советов.
>
> "Телепаты в отпуске." ©

Так это сугубо твои проблемы.

> Alex80   (04.02.14 08:25) [10]
>
>
> > пусть поставит простой TEdit, в новом проекте
>
> А такие советы вы будете давать создателям Ассассинс Крид.
>

Не знаю кто это-такие, но судя по вопросам их сотрудников, тот ещё детский сад сантехников.


 
Alex80   (2014-02-05 13:54) [19]


> Inovet ©   (05.02.14 11:35) [17]
> > [15] Alex80   (05.02.14 11:07)> «Телепаты в отпуске.»
> ©Для понимания предложенного выше способности к телепатии
> не требуются.

Докажите кодом.


 
Inovet ©   (2014-02-05 14:55) [20]

> [19] Alex80   (05.02.14 13:54)
> Докажите кодом.

Вот так бы сразу и сказал. А то разёл тут философию.


 
Alex80   (2014-02-06 06:04) [21]

Посмотрел, что:

TGLSceneViewer = class(TWinControl)

А у TWinControl есть события OnKeyDown, OnKeyPress, OnKeyUp . Открыл их. Прицепил к ним код.

Но всё равно когда нажимаю на стрелки - OnKeyDown и OnKeyPress не проходит. Ну, так как их включить-то? Мастера?


 
Alex80   (2014-02-06 06:06) [22]

Посмотрел, что:

TGLSceneViewer = class(TWinControl)

А у TWinControl есть события OnKeyDown, OnKeyPress, OnKeyUp . Открыл их. Прицепил к ним код.

Но всё равно когда нажимаю на стрелки - OnKeyDown и OnKeyPress не проходит. Ну, так как их включить-то? Мастера?


 
sniknik ©   (2014-02-06 08:02) [23]

> Ну, так как их включить-то?
убрать то, что их "выключает"... разве не очевидно? или переписывать на низком уровне. или обходится тем, что все таки работает, не смотря на твои заявления.


 
brother ©   (2014-02-06 08:56) [24]

KeyPreview:= True; у формы?


 
Alex80   (2014-02-06 12:19) [25]


> brother ©   (06.02.14 08:56) [24]
>
> KeyPreview:= True; у формы?

Конечно.


 
Alex80   (2014-02-06 12:32) [26]

Ещё один не работающий код.

http://www.pascalgamedevelopment.com/showthread.php?3712-%28OnKeyPress%29-Is-arrow-key-pressed


> sniknik ©   (06.02.14 08:02) [23]
>
> > Ну, так как их включить-то?
> убрать то, что их "выключает"... разве не очевидно? или
> переписывать на низком уровне. или обходится тем, что все
> таки работает, не смотря на твои заявления.

А что их выключает? А как переписать на низком уровне? Какой код?


 
sniknik ©   (2014-02-06 13:56) [27]

>> KeyPreview:= True; у формы?
> Конечно.
это не уточняющий вопрос был, это ответ. альтернатива т.сказать.

> А что их выключает?
> TActionList, создаю в нём экшены на нажатия стрелок
акции по сути централизованы, сделаны чтобы в них писать код, а в остальных местах и просто указывать.

> А как переписать на низком уровне?
ну, найти место/событие/сообщение которое перехватывают акции, и "встроится" до них, или вместо них, написать свою систему сообщений в конце концов. вариантов много... и все они глупые (вместо изучения и использования системы пытаться ее менять не зная всегда глупо).


 
Inovet ©   (2014-02-06 17:55) [28]

Я вот не зная ничего о TGLSceneViewer, предположим — беру и назначаю обработку неких клавиш, которые должны использоваться в этом самом компоненте на этой самой форме. Какой в этом смысл? Нажимаю клавиши курсора — в одном месте формы происходит одно, в другом другое. Что-то в этом неправильно.


 
Alex80   (2014-02-06 21:32) [29]

Вот так советуют отлавливать нажатия на клавиши.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm1 = class(TForm)
 private

 public
   procedure WMKeyDown(var Message : TWMKeyDown); message WM_KEYDOWN;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMKeyDown(var Message: TWMKeyDown);
begin
 if message.CharCode = VK_LEFT then
   form1.Left := form1.Left- 2;
 if message.CharCode = VK_RIGHT then
   form1.Left := form1.Left+ 2;
 if message.CharCode = VK_UP then
   form1.top := form1.top- 2;
 if message.CharCode = VK_DOWN then
   form1.top := form1.top+ 2;
end;

end.


Вставил эту процедуру в свою TForm1, но не проходят нажатия. Просто не вызывается функция WMKeyDown . Почему?

Похоже не меня одного достала эта проблема.


 
MBo ©   (2014-02-06 22:22) [30]

Дядя Петя Белов тут пару слов набросал про отлов клавиш:
http://edn.embarcadero.com/article/38447

Можно также посмотреть обсуждения, ссылающиеся на название этой статьи


 
Alex80   (2014-02-07 08:51) [31]


> MBo ©   (06.02.14 22:22) [30]
> Дядя Петя Белов тут пару слов набросал про отлов клавиш:
> http://edn.embarcadero.com/article/38447

Хочется пожелать Пете освоить русский язык.

Чего нам оттуда может пригодиться?


 
brother ©   (2014-02-07 09:08) [32]

> Чего нам оттуда может пригодиться?

а ты не принаглел уже?
иди прочитай, там поговорим...


 
Alex80   (2014-02-07 09:53) [33]


> а ты не принаглел уже?
> иди прочитай, там поговорим...

А по поводу [29] разве уже поговорили?
Почему не работает?


 
brother ©   (2014-02-07 10:29) [34]

[29] все работает...


 
sniknik ©   (2014-02-07 10:34) [35]

> [29] все работает...
у тебя да(и у всех да), а ты "сломай" как топикастер, после будешь говорить. ;)


 
sniknik ©   (2014-02-07 10:36) [36]

p.s. да и у него все работает... работает именно так, как положено используемым им компонентам, но не так как ему хочется.


 
Alex80   (2014-02-07 23:57) [37]

Кстати, а зачем вообще придумали разделение на KeyPress и KeyDown? Для чего?


 
Германн ©   (2014-02-08 02:27) [38]


> Alex80   (07.02.14 08:51) [31]
>
>
> > MBo ©   (06.02.14 22:22) [30]
> > Дядя Петя Белов тут пару слов набросал про отлов клавиш:
>
> > http://edn.embarcadero.com/article/38447
>
> Хочется пожелать Пете освоить русский язык.

Желай сколько тебе влезет.

> Чего нам оттуда может пригодиться?

Всё. От начала и до конца. Если научишься читать то, что пишут специалисты высшего класса. В т.ч. и на английском. И даже в первую очередь на английском.

> Alex80   (07.02.14 23:57) [37]
>
> Кстати, а зачем вообще придумали разделение на KeyPress
> и KeyDown? Для чего?

Ооо. В таком случае надо начинать с чтения букварей. Причём не только по Дельфи и по Windows. Но и вообще по компьютерам.


 
Alex80   (2014-02-08 03:04) [39]


> Германн ©   (08.02.14 02:27) [38]

Удивительно как много можно написать никому не нужного текста.


 
Германн ©   (2014-02-08 03:30) [40]


> Alex80   (08.02.14 03:04) [39]
>
>
> > Германн ©   (08.02.14 02:27) [38]
>
> Удивительно как много можно написать никому не нужного текста.
>
>  

Угу. Только заметь. Не я это начал, а ты.


 
Alex80   (2014-02-08 03:40) [41]

Удалено модератором


 
Inovet ©   (2014-02-08 09:50) [42]

> [38] Германн ©   (08.02.14 02:27)
> > Хочется пожелать Пете освоить русский язык.
>
> Желай сколько тебе влезет.

Не, не так. Надо: Желай другим того, что пожелал бы себе. Так что — учить англицкий.


 
Inovet ©   (2014-02-08 09:54) [43]

> [39] Alex80   (08.02.14 03:04)
> Удивительно как много можно написать никому не нужного текста.

А ты всё ждёшь готовый код? Ну может и сжалится кто, но непонятно что там тебе надо. А так тебе дают источники информации, где сказано как и чего, но многа букафф незнакомых.


 
Alex80   (2014-02-09 05:52) [44]

Удалено модератором
Примечание: обсуждение модерирования



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2015.04.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.003 c
4-1270793885
Kolan
2010-04-09 10:18
2015.04.05
Нe удается открыть вирт. ком-порт, работающий через usbser.sys


15-1407771480
Пит
2014-08-11 19:38
2015.04.05
Windows 7 на MacBook Pro


15-1408429305
47RONYN
2014-08-19 10:21
2015.04.05
IP-телефония и Е1


2-1391624635
dehkanin
2014-02-05 22:23
2015.04.05
Пишет "Fatal Error" File not found: "System.pas"


3-1303981058
OW
2011-04-28 12:57
2015.04.05
Oracle: опять про null. почему ответ "-"?!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский