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