Мерцание экрана. Как убрать?
Участников: 5
Страница 1 из 1
Мерцание экрана. Как убрать?
Вопрос, собственно, в заголовке темы.
Программа:
в левом нижнем углу находятся поля трех "кнопок", при наведении курсора мыши цвет меняется, при нажатии на левую кнопку мыши появляется прямоугольник. Это тестовая программа, что-то вроде шаблона.
Без использования команды sleep, мерцание сильнее. Видимо это связано с загрузкой процессора компьютера (работаю под win7).
Программа:
в левом нижнем углу находятся поля трех "кнопок", при наведении курсора мыши цвет меняется, при нажатии на левую кнопку мыши появляется прямоугольник. Это тестовая программа, что-то вроде шаблона.
- Код:
DIM x AS INTEGER, y AS INTEGER, buttons AS Integer, e As integer
SCREEN 12
do
Cls
Line (0,450)-(30,480),7,bf
Line (31,450)-(60,480),7,bf
Line (61,450)-(90,480),7,bf
GETMOUSE x, y,, buttons
If x>0 Then
If x<30 Then
If y>449 Then
Line (0,450)-(30,480),2,bf ' левая кнопка
IF buttons AND 1 Then
Line (100,450)-(130,480),6,bf ' реакция на нажатие левой кнопки мыши
endif
EndIf
EndIf
EndIf
If x>30 Then
If x<61 Then
If y>449 Then
Line (31,450)-(60,480),2,bf ' средняя кнопка
Endif
EndIf
EndIf
If x>60 Then
If x<91 Then
If y>449 Then
Line (61,450)-(90,480),2,bf ' правая кнопка
endif
EndIf
EndIf
Sleep 50
LOOP WHILE INKEY$ = ""
end
Без использования команды sleep, мерцание сильнее. Видимо это связано с загрузкой процессора компьютера (работаю под win7).
workman- Сообщения : 25
Дата регистрации : 2010-12-03
Re: Мерцание экрана. Как убрать?
cls убрать
а вобще алгоритм менять - например, отрисовку ненажатых кнопок делать тоже с условием (if...then)
а вобще алгоритм менять - например, отрисовку ненажатых кнопок делать тоже с условием (if...then)
Re: Мерцание экрана. Как убрать?
workman пишет:Вопрос, собственно, в заголовке темы.
Программа:
в левом нижнем углу находятся поля трех "кнопок", при наведении курсора мыши цвет меняется, при нажатии на левую кнопку мыши появляется прямоугольник. Это тестовая программа, что-то вроде шаблона.
- Код:
DIM x AS INTEGER, y AS INTEGER, buttons AS Integer, e As integer
SCREEN 12
do
Cls
Line (0,450)-(30,480),7,bf
Line (31,450)-(60,480),7,bf
Line (61,450)-(90,480),7,bf
GETMOUSE x, y,, buttons
If x>0 Then
If x<30 Then
If y>449 Then
Line (0,450)-(30,480),2,bf ' левая кнопка
IF buttons AND 1 Then
Line (100,450)-(130,480),6,bf ' реакция на нажатие левой кнопки мыши
endif
EndIf
EndIf
EndIf
If x>30 Then
If x<61 Then
If y>449 Then
Line (31,450)-(60,480),2,bf ' средняя кнопка
Endif
EndIf
EndIf
If x>60 Then
If x<91 Then
If y>449 Then
Line (61,450)-(90,480),2,bf ' правая кнопка
endif
EndIf
EndIf
Sleep 50
LOOP WHILE INKEY$ = ""
end
Без использования команды sleep, мерцание сильнее. Видимо это связано с загрузкой процессора компьютера (работаю под win7).
У меня экран не мерцает. Win 7
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Мерцание экрана. Как убрать?
"Sleep 50" пробовали убирать?trew пишет:
У меня экран не мерцает. Win 7
workman- Сообщения : 25
Дата регистрации : 2010-12-03
Re: Мерцание экрана. Как убрать?
Может так? у меня лично не мерцает..
- Код:
SCREEN 12
Window ( 0 , 0 ) - ( 640, 480 )
Dim As UInteger x, y, buttons, e
Dim As Integer flag = -1 ' -1 - перекрашивать, 0 - нет.
Do
GetMouse x, y,, buttons
If flag Then
Line (0, 30)-(90, 0 ),7,bf
flag = 0
EndIf
If y > 450 Then
Select Case x
Case Is < 30
Line (0, 30 )-(30, 0 ),2,bf ' левая кнопка
If buttons = 1 Then
Line (100, 30 )-(130, 0 ),6,bf ' реакция на нажатие левой кнопки
EndIf
Case 30 To 60
Line ( 31, 30)-(60, 0 ),2,bf ' средняя кнопка
Case 61 To 90
Line (61, 30)-(90, 0),2,bf ' правая кнопка
End Select
flag = -1
EndIf
Sleep 50
Loop While INKEY$ = ""
Re: Мерцание экрана. Как убрать?
У меня так тоже не мерцает. Не понятно тогда: почему раньше мерцало? Посмотрел, через диспетчер задач, загрузку ЦП, показало не более 4%, при том, что кроме работы моей программы, работал internet explorer и др.Саня пишет:Может так? у меня лично не мерцает..
Почему без строки "Window ( 0 , 0 ) - ( 640, 480 )", эта версия программы не работает?
workman- Сообщения : 25
Дата регистрации : 2010-12-03
Re: Мерцание экрана. Как убрать?
тут дело в cls-e и задержке, но как они зависят не знаю. это походу зависит конкретно от кода и/или компа. как у меня сделано, то cls в принципе не особо важно, но убирает лишние элементы, а вот задержка тут оочень важна..
Насчет второго вопроса... у меня она работает, но кнопки появляются в верху слева, а не внизу, однако зажигаться они будут если курсор будет слева внизу экрана, там, где в в версии с этой строкой были кнопки. Связано это с тем, что getmouse возвращает положение мыши относительно первоначальной системы координат( типо физические координаты положения мыши), а для того чтобы стало нормально, необходимо их конвертировать функцией Pmap
и заменить строку "If y > 450 then" на " if y < 30 then".
Насчет второго вопроса... у меня она работает, но кнопки появляются в верху слева, а не внизу, однако зажигаться они будут если курсор будет слева внизу экрана, там, где в в версии с этой строкой были кнопки. Связано это с тем, что getmouse возвращает положение мыши относительно первоначальной системы координат( типо физические координаты положения мыши), а для того чтобы стало нормально, необходимо их конвертировать функцией Pmap
и заменить строку "If y > 450 then" на " if y < 30 then".
Re: Мерцание экрана. Как убрать?
Я сам еще новичек в фрибасике, но попробую помочь.
Попробуйте перед всеми отрисовками в т.ч. и cls поставить команду screenlock, после всех отрисовок команда screenunlock
Попробуйте перед всеми отрисовками в т.ч. и cls поставить команду screenlock, после всех отрисовок команда screenunlock
crazyleg- Сообщения : 9
Дата регистрации : 2011-10-04
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|