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

Вниз

GetAsyncKeyState(VK_LBUTTON)   Найти похожие ветки 

 
Алёшка1900   (2002-11-25 22:01) [0]

Здравствуйте!
Я использую эту функцию в Timer"е с интевалом в 100 мс. То есть каждые 100 мс у меня проверяется:
if Bool(GetAsyncKeyState(VK_LBUTTON)) then

Так вот, если подержать кнопку мышки нажатой немного, то событие OnTimer повторится много раз. А можно проверить, отпустил ли пользователь кнопку мыши, или нет?


 
Cobalt   (2002-11-25 23:44) [1]

Не думаю, что GetAsyncKeyState вообще поможет в таком деле. Посмотрите мой примерчик (Label1 отображает текущее состояние кнопки, а Listbox1 ведет журнал нажатий/отпусканий)

const LB_Down:boolean = false;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if LB_Down
then begin LB_Down:=Bool(GetAsyncKeyState(VK_LBUTTON));
if LB_Down
then Label1.Caption:="LB_Down"
else Label1.Caption:="LB_Up";
if not LB_Down
then ListBox1.Items.Add(TimeToStr(Time)+" LB_Up")
end
else begin LB_Down:=Bool(GetAsyncKeyState(VK_LBUTTON));
if LB_Down
then ListBox1.Items.Add(TimeToStr(Time)+" LB_Down")
end;
if LB_Down
then Label1.Caption:="LB_Down"
else Label1.Caption:="LB_Up";

end;

Честно говоря, я ОЧЕНЬ удивился, но, посмотрев справку по ф-ии GetAsyncKeyState удивился еще больше:
If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. The return value is zero if a window in another thread or process currently has the keyboard focus.
К сожалению, смысл этих (выделенных) слов ускользает от меня...
Функция GetKeyState ведет себя не менее странным образом в этом отношении.
P.S. Все это тестировалось в ВинХР, так что сообщите отом, как это прошло в Вин98.


 
icWasya   (2002-11-26 16:38) [2]

procedure TForm1.Timer1Timer(Sender: TObject);
var W:Word;
S:String;
begin
W:=GetAsyncKeyState(VK_LBUTTON);

if W = $8001 then S := "кнопка отпущена" else
if W = $0001 then S := "кнопка нажата" else
if W = $8000 then S := "кнопка давно нажата" else
if W = $0000 then S := "кнопка давно отпущена" else
S := "учи матчасть";

Label1.Caption:=Format("%s %.4x",[S , W] );


end;


 
Алёшка1900   (2002-11-26 19:56) [3]

Cobalt - спасибо, конечно, но этот вариант не пригоден по крайней мере для вин98, так как он делает тоже, что и
if Bool(GetAsyncKeyState(VK_LBUTTON)) then
Даже если я нажал кнопку и не отпустил, то всё равно пишет, что отпустил. А вот icWasya - спасибо, прикольно! А где ты про эти значения вычитал?



 
Cobalt   (2002-11-26 23:29) [4]

>icWasya © (26.11.02 16:38)
Что значит - опыт!
Поправочка:

if W = $8001 then S := "кнопка нажата" else
if W = $8000 then S := "кнопка давно нажата" else
if W = $0000 then S := "кнопка отпущена" else
S := "учи матчасть";

А комбинации "кнопка давно отпущена" - видать не существует. ;(



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

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

Наверх




Память: 0.45 MB
Время: 0.009 c
14-37382
Clickmaker
2002-12-25 13:47
2003.01.13
Кто как собирается встречать Новый Год?


14-37290
michael_b
2002-12-20 20:08
2003.01.13
Сложная задача по Pascal


3-36949
tomat
2002-12-18 12:07
2003.01.13
Триггер ограничивающий удаление строк.


4-37472
Unknown user
2002-11-26 19:57
2003.01.13
Масштабирование текста


4-37431
vic_774N
2002-11-24 20:23
2003.01.13
Имеется TreeView в некотором приложении. Получить handle





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский