Мерцание экрана. Как убрать?

Предыдущая тема Следующая тема Перейти вниз

Мерцание экрана. Как убрать?

Сообщение  workman в Вт Мар 29, 2011 1:27 pm

Вопрос, собственно, в заголовке темы.
Программа:
в левом нижнем углу находятся поля трех "кнопок", при наведении курсора мыши цвет меняется, при нажатии на левую кнопку мыши появляется прямоугольник. Это тестовая программа, что-то вроде шаблона.


Код:

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: Мерцание экрана. Как убрать?

Сообщение  DEPOzit в Вт Мар 29, 2011 1:51 pm

cls убрать
а вобще алгоритм менять - например, отрисовку ненажатых кнопок делать тоже с условием (if...then)

DEPOzit

Сообщения : 113
Дата регистрации : 2008-05-15
Возраст : 36
Откуда : Смоленская обл.

Посмотреть профиль http://freebasic.ru/

Вернуться к началу Перейти вниз

Re: Мерцание экрана. Как убрать?

Сообщение  trew в Вт Мар 29, 2011 4:41 pm

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: Мерцание экрана. Как убрать?

Сообщение  workman в Ср Мар 30, 2011 7:05 am

trew пишет:

У меня экран не мерцает. Win 7
"Sleep 50" пробовали убирать?

workman

Сообщения : 25
Дата регистрации : 2010-12-03

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Мерцание экрана. Как убрать?

Сообщение  Саня в Ср Мар 30, 2011 12:17 pm

Может так? у меня лично не мерцает..
Код:

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$ = ""
avatar
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 23
Откуда : Екатеринбург

Посмотреть профиль http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

Re: Мерцание экрана. Как убрать?

Сообщение  workman в Ср Мар 30, 2011 1:24 pm

Саня пишет:Может так? у меня лично не мерцает..
У меня так тоже не мерцает. Не понятно тогда: почему раньше мерцало? Посмотрел, через диспетчер задач, загрузку ЦП, показало не более 4%, при том, что кроме работы моей программы, работал internet explorer и др.
Почему без строки "Window ( 0 , 0 ) - ( 640, 480 )", эта версия программы не работает?

workman

Сообщения : 25
Дата регистрации : 2010-12-03

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Мерцание экрана. Как убрать?

Сообщение  Саня в Ср Мар 30, 2011 7:40 pm

тут дело в cls-e и задержке, но как они зависят не знаю. это походу зависит конкретно от кода и/или компа. как у меня сделано, то cls в принципе не особо важно, но убирает лишние элементы, а вот задержка тут оочень важна..
Насчет второго вопроса... у меня она работает, но кнопки появляются в верху слева, а не внизу, однако зажигаться они будут если курсор будет слева внизу экрана, там, где в в версии с этой строкой были кнопки. Связано это с тем, что getmouse возвращает положение мыши относительно первоначальной системы координат( типо физические координаты положения мыши), а для того чтобы стало нормально, необходимо их конвертировать функцией Pmap
и заменить строку "If y > 450 then" на " if y < 30 then".
avatar
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 23
Откуда : Екатеринбург

Посмотреть профиль http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

Re: Мерцание экрана. Как убрать?

Сообщение  crazyleg в Ср Окт 05, 2011 12:50 am

Я сам еще новичек в фрибасике, но попробую помочь.

Попробуйте перед всеми отрисовками в т.ч. и cls поставить команду screenlock, после всех отрисовок команда screenunlock

crazyleg

Сообщения : 9
Дата регистрации : 2011-10-04

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Мерцание экрана. Как убрать?

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения