Форум: "Начинающим";
Текущий архив: 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