Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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 - это я так, для примера, что там что-то есть, паскалевская привычка.
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 вся ветка

Текущий архив: 2002.08.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
1-13702
AndreiKvin
2002-07-23 15:48
2002.08.05
Что выполняется быстрее


1-13615
Arhelon
2002-07-24 10:01
2002.08.05
Как организовать BackGround в TListView ???


3-13573
RDA
2002-07-16 10:48
2002.08.05
FIBDataSet.pas - где взять


8-13729
Wild Cat
2002-04-01 14:46
2002.08.05
Проблемы с графикой,,,


14-13797
Семен Семеныч
2002-07-09 11:38
2002.08.05
Народ, а из Одессы кто есть????