Вниз
Скачать: 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 - это я так, для примера, что там что-то есть, паскалевская привычка.
r epeat
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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.011 c
1-13652
DKalinin
2002-07-23 13:05
2002.08.05
Подскажите, пожалуйста, как получить список файлов в директории.


14-13790
AlexanderVasjuk
2002-07-10 13:09
2002.08.05
Lame API


14-13815
Felis manul
2002-07-10 09:28
2002.08.05
Значок Мастер Delphi


1-13612
farhad
2002-07-23 15:07
2002.08.05
Просьба


4-13848
a_Lan
2002-05-28 20:45
2002.08.05
Диалоговое окно открытия файла




   Наверх