Что нового

Мерцание элементов GUI

saraconor

Новичок
Сообщения
404
Репутация
3
qm5pc4jo.gif

Подобное мерцание белым происходит чаще всего когда к элементу применен какой-нибудь битмап, и происходит не всегда, но довольно часто при скрывании элементов GUICtrlSetState(-1, $GUI_HIDE), что это и как этого можно избежать?
Даже если элементы в данный момент уже спрятаны, если применить к ним GUICtrlSetState(-1, $GUI_HIDE), то они могут так мигнуть белым.
В приложении пример где подобное наглядно видно.
Кто-нибудь помогите пожалуйста. По поиску в разных ветках форума встречается нечто похожее, но решения именно этой проблемы там найти не удалось(
Код:
#AutoIt3Wrapper_Res_File_Add=1.bmp, rt_rcdata, G1
#AutoIt3Wrapper_Res_File_Add=2.bmp, rt_rcdata, G2
#AutoIt3Wrapper_Res_File_Add=3.bmp, rt_rcdata, G3
#AutoIt3Wrapper_Res_File_Add=4.bmp, rt_rcdata, G4
#AutoIt3Wrapper_Res_File_Add=ANI1.gif, rt_rcdata, ANI1
#include "resources.au3"
#include <ButtonConstants.au3>
#include <GuiConstants.au3>
#include "GIFAnimation.au3"

;~ $hGui = GUICreate('', 330, 144, 330, 144, BitOR($WS_POPUP, $WS_CLIPCHILDREN), BitOR($WS_EX_CONTROLPARENT, $WS_EX_COMPOSITED))
$hGui = GUICreate('', 330, 144, 330, 144, $WS_POPUP, $WS_EX_CONTROLPARENT)
$PicBack1 = GUICtrlCreatePic('', 0, 0, 330, 144)
GUICtrlSetState(-1, $GUI_DISABLE)
_ResourceSetImageToCtrl($PicBack1, "G1")
if Not @Compiled Then GUICtrlSetImage(-1, "1.bmp", -1)
$B1 = GUICtrlCreateButton('', 12, 71, 131, 20, $BS_BITMAP)
_ResourceSetImageToCtrl(-1, "G2")
if Not @Compiled Then GUICtrlSetImage(-1, "2.bmp", -1)

$B2  = _GUICtrlCreateGIF(@ScriptDir & "\ANI1.gif", "", 21, 21)
if @Compiled then $B2  = _GUICtrlCreateGIF(@ScriptFullPath, "10;ANI1", 21, 21)

Dim $B[11], $KS[10][2] = [[5, 5], [50, 5], [95, 5], [140, 5], [185, 5], [5, 26], [50, 26], [95, 26], [140, 26], [185, 26]]
For $i = 0 To UBound($KS) - 1
    $B[$i] = GUICtrlCreateButton('', $KS[$i][0] + 100, $KS[$i][1] + 90, 40, 18, $BS_BITMAP)
    _ResourceSetImageToCtrl(-1, "G4")
    If Not @Compiled Then GUICtrlSetImage(-1, "4.bmp", -1)
Next

GUISetState(@SW_SHOW, $hGui)

do
$msg = GUIGetMsg()
    Switch $msg
        case $B1
        _ResourceSetImageToCtrl($B1, "G3")
        if Not @Compiled Then GUICtrlSetImage($B1,  "3.bmp", -1)
        sleep(100)
        _ResourceSetImageToCtrl($B1, "G2")
        if Not @Compiled Then GUICtrlSetImage($B1, "2.bmp", -1)
        sleep(100)
        exit
    EndSwitch

    For $i = 0 To UBound($KS) - 1
        GUICtrlSetState($B[$i], $GUI_HIDE)
    Next
    For $i = 0 To UBound($KS) - 1
        GUICtrlSetState($B[$i], $GUI_SHOW)
    Next

until $msg = -3
 

Вложения

  • мерцание.zip
    235.9 КБ · Просмотры: 1
Последнее редактирование:

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Зачем вы установили $WS_EX_CONTROLPARENT как обычный стиль?

Попробуйте использовать стили $WS_CLIPCHILDREN и $WS_EX_COMPOSITED ©Справка
Код:
#AutoIt3Wrapper_Res_File_Add=1.bmp, rt_rcdata, G1
#AutoIt3Wrapper_Res_File_Add=2.bmp, rt_rcdata, G2
#AutoIt3Wrapper_Res_File_Add=3.bmp, rt_rcdata, G3
#AutoIt3Wrapper_Res_File_Add=4.bmp, rt_rcdata, G4
#include "resources.au3"
#include <ButtonConstants.au3>
#include <GuiConstants.au3>
$hGui = GUICreate('', 240, 80, 330, 144, BitOR($GUI_SS_DEFAULT_GUI, $WS_CLIPCHILDREN), BitOR($WS_EX_COMPOSITED, $WS_EX_CONTROLPARENT))

Dim $B[11], $KS[10][2] = [[5, 5], [50, 5], [95, 5], [140, 5], [185, 5], [5, 26], [50, 26], [95, 26], [140, 26], [185, 26]]
For $i = 0 To UBound($KS) - 1
    $B[$i] = GUICtrlCreateButton('', $KS[$i][0], $KS[$i][1], 40, 18, $BS_BITMAP)
    _ResourceSetImageToCtrl(-1, "G4")
    If Not @Compiled Then GUICtrlSetImage(-1, "4.bmp", -1)
Next

$PicBack1 = GUICtrlCreatePic('', 0, 0, 330, 144)
GUICtrlSetState(-1, $GUI_DISABLE)
_ResourceSetImageToCtrl($PicBack1, "G1")
If Not @Compiled Then GUICtrlSetImage(-1, "1.bmp", -1)

GUISetState(@SW_SHOW, $hGui)
Do
    $msg = GUIGetMsg()
    For $i = 0 To UBound($KS) - 1
        GUICtrlSetState($B[$i], $GUI_HIDE)
    Next
    For $i = 0 To UBound($KS) - 1
        GUICtrlSetState($B[$i], $GUI_SHOW)
    Next
Until $msg = -3
 
  • Like
Реакции: Norm
Автор
S

saraconor

Новичок
Сообщения
404
Репутация
3
Извините, там был не совсем удачный пример, сейчас во вложении то что нужно, там используется GIFAnimation.au3, и вместе со стилем в вашем примере это приводит как минимум к тому что анимация перестает работать, а по максимуму компьютер просто зависает.
Сообщение автоматически объединено:


В общем поблему удалось решить, все дело в настройках стиля, а точнее в их комбинациях...
$Form1 = GUICreate('', 330, 114, 330, 114, BitOR($WS_CLIPCHILDREN, $WS_POPUP), $WS_EX_CONTROLPARENT)
Tempo, спасибо вам большое, прям от души.
 
Последнее редактирование:
Верх