![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
флаг, показывающий положение кнопки мыши ? [D6, WinME]
Извращенец © (2002-07-14 20:04:00)Доброго времени суток! вот проблема:
в процедуре-обработчике событий ЩтMouseDown у меня нужен такой цикл:
repeat
writeln("Ответьте на вопрос, плиз");
until кнопка мыши поднята;
есть ли такой флаг, показывающий положение кнопки мыши (нажата/опущена)
Юрий Зотов (2002-07-23 23:10:00) [1]> Извращенец © (23.07.02 19:07)
> не будет пахать,...
А Вы пробовали?
Тут не нужно рассуждать, проще взять - и проверить. И удивиться тому, что, как ни странно, но работает. А странного ничего нет, если подумать над тем, как работают СОБЫТИЙНЫЕ программы.
Естественно, переменная Flag НЕ должна быть локальной. И, естественно, в цикле должна быть строка Application.ProcessMessages - о чем и напомнил TTCustomDelphiMaster.
Батенька, это, извините, азы. Спорить тут просто не о чем.
TTCustomDelphiMaster (2002-07-23 21:26:00) [2]Извращенец © (23.07.02 19:07)
Там же написано
> procedure ... OnMouseDown(...);
> begin
> Flag := True;
> while Flag do
> begin
> .. .
> end
> end;
Если сделать Print Screen, а затем полученное изображение увеличить с помощью PhotoShop в 500 раз, то вместо жирной точки можно разглядеть Application.ProcessMessages;-)
Извращенец (2002-07-23 19:07:00) [3]а извратиться надо
> Юрий Зотов
не будет пахать, так как Flag измениться должен в самом цикле, а так как он меняется в другой процедуре, то происходит зацикливание, до той процедуры не доходит и эха её надобности.
Я такое проделывал. Цикл повторяется, пока флаг не меняется, а он меняется в другой процедуре, но для проверки цикл в жизни не прервется.
> Song
проверю
Song (2002-07-15 23:09:00) [4]Тем не менее извратиться как заказал автор вопроса всё таки можно через GetAsyncKeyState()
Юрий Зотов (2002-07-15 21:59:00) [5]Перефразируя Ваш же код:
...
until возникло_событие_OnMouseUp;
Вы ведь OnMouseDown ловите вполне успешно, верно? А почему тогда проблемы с отловом OnMouseUp? Оно точно такое же.
// =========================
var
Flag: boolean;
procedure ... OnMouseDown(...);
begin
Flag := True;
while Flag do
begin
...
end
end;
procedure ... OnMouseUp(...);
begin
Flag := False // И после завершения текущего витка цикл прервется.
end;
Извращенец (2002-07-15 20:12:00) [6]writeln - это я так, для примера, что там что-то есть, паскалевская привычка.
repeat
x:=x+2;
y:=y+2;
Sprite.Draw(x,y,1,3,true);
until кнопка_мыши_не_отпущена;
не надо все в прямом смысле..
Builder (2002-07-15 01:33:00) [7]Совет(IMHO):
Измени задачу - юзверу отвечать на такое по моему будет не приятно
Anatoly Podgoretsky (2002-07-14 22:48:00) [8]OnMouseDown подразумевает GUI приложение, обработчик какого нибудь оконного элемента, но в нем не работает writeln, который выводит только на консоль
Если GUI то делай вывод в мемо, но правда зачем тогда нужно завязываться не нажатие кнопки мышки?
Извращенец (2002-07-14 22:40:00) [9]
> Anatoly Podgoretsky © (14.07.02 20:16)
> Так у тебя онсоль или гуи
^^^^^^ ^^^
не понял, это как?
Извращенец (2002-07-14 20:57:00) [10]???
Anatoly Podgoretsky (2002-07-14 20:16:00) [11]Так у тебя онсоль или гуи