Что нового

Элементы GUI Мерцание окна GUI при рисовании графиков.

Ярополк

Новичок
Сообщения
9
Репутация
0
Работаю с графиками, но все окно GUI мерцает после каждого цикла, перелопатил уже все что бы это мерцание убрать, не могу найти информацию. Про GUICtrlSetGraphic(-1, $GUI_GR_REFRESH) в цикле не канает !!!!! Как сделать обновление именно в заданной точке, а не всего графика!!!! До чёртиков уже взбесился. Допустим обновление $GUI_GR_REFRESH в точке х и y. Не дайте разочароваться в языке. Либо что, график в массиве рисовать.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Ярополк, желателен пример кода, в котором происходит это "неудобство"
еще момент, здесь стол заказов, то есть, "сделайте все за меня". Если нужно помощь с кодом, то лучше создавать тему в "Общие вопросы" или "Графический интерфейс...."
 
Автор
Я

Ярополк

Новичок
Сообщения
9
Репутация
0
Ярополк, желателен пример кода, в котором происходит это "неудобство"
еще момент, здесь стол заказов, то есть, "сделайте все за меня". Если нужно помощь с кодом, то лучше создавать тему в "Общие вопросы" или "Графический интерфейс...."
Продолжать обсуждать тему в этом разделе ? Код:
AutoIt код:
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <Misc.au3>
#include <AVIConstants.au3>
#include <ListviewConstants.au3>
#include <WindowsConstants.au3>
#include <GraphGDIPlus.au3>

$k2 = 200
$Form = GUICreate ("ZipTechnology (С).",($k2+1),($k2+1), -1, -1, -1, -1)
GUICtrlCreateGraphic((($k2/2)+1),(($k2/2)+1))
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, 0)

Func color()
$Rand = Random(0x0000ff, 0xff0000)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $Rand)
EndFunc

$rad=1
$r = 0

For $i = 0 to 1300 Step +1
color()
$r += 0.1
$x=Cos($rad)*$r
$y=Sin($rad)*$r
Sleep(10)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, +$x, -$y)
GUICtrlSetGraphic(-1, $GUI_GR_REFRESH)
GUISetState()
$rad += 0.1

if _IsPressed('01') Then
   Okno()
EndIf



Next


Okno ()

Func Okno ()
While 1
    $msg = GUIGetMsg()
        Switch $msg
        Case $GUI_EVENT_CLOSE
            Exit
         EndSwitch
      WEnd
   EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
@Ярополк
Код:
#include <GUIConstants.au3>
#include <Misc.au3>

$k2 = 200
$Form = GUICreate("ZipTechnology (С).", ($k2 + 1), ($k2 + 1), -1, -1, -1, -1)
GUICtrlCreateGraphic(0, 0, $k2, $k2)
$cX = $k2 / 2
$cY = $k2 / 2
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, $cX, $cY)
GUISetState()

GUIRegisterMsg($WM_ERASEBKGND, "WM_ERASEBKGND")

$rad = 1
$r = 0
For $i = 0 To 1300 Step +1
  color()
  $r += 0.1
  $x = Cos($rad) * $r
  $y = Sin($rad) * $r
  Sleep(10)
  GUICtrlSetGraphic(-1, $GUI_GR_LINE, +$x + $cX, -$y + $cY)
  GUICtrlSetGraphic(-1, $GUI_GR_REFRESH)
  $rad += 0.1
  If _IsPressed('01') Then Okno()
Next

Okno()

Func Okno()
  While 1
    $msg = GUIGetMsg()
    Switch $msg
      Case $GUI_EVENT_CLOSE
        Exit
    EndSwitch
  WEnd
EndFunc   ;==>Okno

Func color()
  $Rand = Random(0x0000ff, 0xff0000)
  GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $Rand)
EndFunc   ;==>color

Func WM_ERASEBKGND()
  Return 0
EndFunc   ;==>WM_ERASEBKGND
 
Автор
Я

Ярополк

Новичок
Сообщения
9
Репутация
0
@Ярополк
Код:
#include <GUIConstants.au3>
#include <Misc.au3>

$k2 = 200
$Form = GUICreate("ZipTechnology (С).", ($k2 + 1), ($k2 + 1), -1, -1, -1, -1)
GUICtrlCreateGraphic(0, 0, $k2, $k2)
$cX = $k2 / 2
$cY = $k2 / 2
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, $cX, $cY)
GUISetState()

GUIRegisterMsg($WM_ERASEBKGND, "WM_ERASEBKGND")

$rad = 1
$r = 0
For $i = 0 To 1300 Step +1
  color()
  $r += 0.1
  $x = Cos($rad) * $r
  $y = Sin($rad) * $r
  Sleep(10)
  GUICtrlSetGraphic(-1, $GUI_GR_LINE, +$x + $cX, -$y + $cY)
  GUICtrlSetGraphic(-1, $GUI_GR_REFRESH)
  $rad += 0.1
  If _IsPressed('01') Then Okno()
Next

Okno()

Func Okno()
  While 1
    $msg = GUIGetMsg()
    Switch $msg
      Case $GUI_EVENT_CLOSE
        Exit
    EndSwitch
  WEnd
EndFunc   ;==>Okno

Func color()
  $Rand = Random(0x0000ff, 0xff0000)
  GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $Rand)
EndFunc   ;==>color

Func WM_ERASEBKGND()
  Return 0
EndFunc   ;==>WM_ERASEBKGND
Оооооооо.... Огромное спасибо!!! Выручили!!! Не все закаулки языка знаю.... А можно поподробнее, что делает "GUIRegisterMsg($WM_ERASEBKGND, "WM_ERASEBKGND")", т.е что за коды сообщения помогли остановить перерисовку всего графика. И если можно, покажите пожалуйста пример, как установить толщину линии с "$GUI_GR_PENSIZE
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Автор
Я

Ярополк

Новичок
Сообщения
9
Репутация
0
Справка: AutoIt - Appendix - Windows Message Codes

Код:
...
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, $cX, $cY)
GUICtrlSetGraphic(-1, $GUI_GR_PENSIZE, 3) ; <=== толщина 3 пикселя
GUISetState()
...
Нашел только список кодов, но что каждый значит - не могу найти. https://www.autoitscript.com/autoit3/docs/appendix/WinMsgCodes.htm
И если вставить в цикл GUICtrlSetGraphic(-1, $GUI_GR_PENSIZE, 3) то линии увеличится не сразу, только примерно через 128 повторений.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
что каждый значит - не могу найти
Роскомнадзор заблокировал Google? Попробуйте Яндекс
И если вставить в цикл GUICtrlSetGraphic(-1, $GUI_GR_PENSIZE, 3) то линии увеличится не сразу
Вы или кодом подтверждайте или подобные голословные высказывания будут игнорироваться. Я у себя в цикл добавил - прекрасно работает.
 
Автор
Я

Ярополк

Новичок
Сообщения
9
Репутация
0
Нашел только список кодов, но что каждый значит - не могу найти. https://www.autoitscript.com/autoit3/docs/appendix/WinMsgCodes.htm
И если вставить в цикл GUICtrlSetGraphic(-1, $GUI_GR_PENSIZE, 3) то линии увеличится не сразу, только примерно через 128 повторений.
На счет цвета отбой, просто нужно было изменить сразу в цикле, если черный цвет. Если же рандом, то сразу же меняет толщину.
 
Верх