![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Узнать, нажата ли кнопка на мыши [D7, XP]
Alex_C © (2011-10-06 16:41:00)Как опросить состояние кнопок мыши в событии OnMouseMove?
И. Павел (2011-10-07 08:17:00) [1]> а почему 128 (0х80) ? разве не первыми идут мышиные?
Младший бит определяет "переключена" ли кнопка (например, горит ли CapsLock), а старший - нажата ли кнопка:
If the high-order bit is 1, the key is down; otherwise, it is up.
If the low-order bit is 1, the key is toggled. A key, such as the CAPS LOCK key, is toggled if it is turned on.
The key is off and untoggled if the low-order bit is 0.
A toggle key's indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled.
( http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx)
KilkennyCat (2011-10-06 23:02:00) [2]
> о высоких материях и идеальных формах это уже в духе Васисуалия
> Лоханкина.
вообще-то, ему достаточно было трех неидеальноформовых и невысокоматериальных: курица, свет в туалете и Варвара.
а почему 128 (0х80) ? разве не первыми идут мышиные?
И. Павел (2011-10-06 21:44:00) [3]Все равно. Главное - автору мой ответ помог. Дискутировать после этого о высоких материях и идеальных формах это уже в духе Васисуалия Лоханкина.
> Игорь Шевченко © (06.10.11 21:11) [17]
Хотел ответить, как обычно и поступаю, тоже, например, какой-нибудь необоснованной ссылкой, но мне вдруг показалось, что я уже вышел из возраста, когда интересно заниматься такими вещами.
Игорь Шевченко (2011-10-06 21:11:00) [4]И. Павел © (06.10.11 20:50) [16]
www.delphilamer.ru
И. Павел (2011-10-06 20:50:00) [5]
> Если ты дёргаешь обработчик события напрямую, то это, мягко
> говоря, тоже говорит о том, что следует подумать об архитектуре.
>
В таком случае вам стоило дать ответ на этот вопрос раньше меня, использовав actionlist, цепочку вызова функций и ООП. Это бы показало ваше интеллектуальное превосходство над автором, который, скорее всего, перешел на Delphi пару недель назад (но ваш пост в этой теме был адресован, почему-то не автору а мне, хотя и дублировал сказанное в [1]).
Я решил не мучить автора вопроса полунамеками и показал то, что он спрашивал.
Shiftstate – это тоже вариант решения, но т.к. его озвучили в [1], я решил предложить альтернативу.
Ega23 (2011-10-06 20:38:00) [6]
> его достаточно только в том случае, если он есть
Если ты дёргаешь обработчик события напрямую, то это, мягко говоря, тоже говорит о том, что следует подумать об архитектуре.
И. Павел (2011-10-06 20:26:00) [7]
> в любом случае шифистейта достаточно
его достаточно только в том случае, если он есть (например, был передан в качестве аргумента).
Омлет (2011-10-06 18:18:00) [8]
if GetAsyncKeyState (VK_LBUTTON) and $8000 <> 0
then Caption := 'Кнопка нажата'
else Caption := 'Кнопка отжата';
Inovet (2011-10-06 18:07:00) [9]> [10] Jeer © (06.10.11 17:45)
> const
> b128 = 128;
b1 = 1;
b2 = 2;
...
b128 = 128;
или из справки, которую автор проигнорировал
if ssLeft in Shift then
...
Dennis I. Komarov (2011-10-06 18:02:00) [10]$80
Jeer (2011-10-06 17:45:00) [11]const
b128 = 128;
:)
Inovet (2011-10-06 17:43:00) [12]> [5] Dennis I. Komarov © (06.10.11 17:10)
> И еще, "128" писать не красиво, ибо не отображается булева сущность...
И вообще число не красиво.
Медвежонок Пятачок (2011-10-06 17:29:00) [13]в любом случае шифистейта достаточно
Бездомный (2011-10-06 17:22:00) [14]
> если кнопку нажали до входа курсора на контрол, тогда маусмува
> вообще не будет.
Это вроде только для левой кнопки, нет?
Ega23 (2011-10-06 17:13:00) [15]
> И. Павел © (06.10.11 16:52) [2]
>
> procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;
> X,
http://docwiki.embarcadero.com/VCL/en/Classes.TShiftState
Dennis I. Komarov (2011-10-06 17:10:00) [16]И еще, "128" писать не красиво, ибо не отображается булева сущность...
Медвежонок Пятачок (2011-10-06 17:04:00) [17]если кнопку нажали до входа курсора на контрол, тогда маусмува вообще не будет.
а если кнопка нажата над контролом, то достаточно шифтстейта чтобы понять какие кнопки зажаты.
Alex_C (2011-10-06 17:00:00) [18]То И.Павел: большое спасибо!
И. Павел (2011-10-06 16:52:00) [19]
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (GetKeyState(VK_LBUTTON) AND 128) = 128
then Caption := 'Кнопка нажата
else Caption := 'Кнопка не нажата';
end;
Медвежонок Пятачок (2011-10-06 16:44:00) [20]F1 + последний абзац