Ir para conteúdo


Foto

Bug no GUI?


Melhor Resposta Luigi, 19 julho 2016 - 10:26

  1.  
  2. #include-once
  3. #include <WindowsConstants.au3>
  4. #include <Array.au3>
  5. #include <GUIConstantsEx.au3>
  6.  
  7. OnAutoItExitRegister("_on_exit")
  8.  
  9. Opt("GUIOnEventMode", 1)
  10. Opt("GUIEventOptions", 1)
  11. Opt("MustDeclareVars", 1)
  12.  
  13. Global $aGuiSize[2] = [800, 600]
  14. Global $sGuiTitle = "GuiTitle"
  15. Global $hGui, $hCounter, $iTemp
  16. Global $iCount = 0
  17.  
  18. $hGui = GUICreate($sGuiTitle, $aGuiSize[0], $aGuiSize[1], -1, -1, Default, $WS_EX_COMPOSITED)
  19. GUISetFont(38, -1, -1, "arial")
  20. GUISetOnEvent($GUI_EVENT_CLOSE, "_quit")
  21. $hCounter = GUICtrlCreateLabel($iCount, 100, 80, 100, 60, Default, $WS_EX_TRANSPARENT)
  22. GUICtrlSetBkColor($hCounter, $GUI_BKCOLOR_TRANSPARENT)
  23. GUISetState(@SW_SHOW, $hGui)
  24.  
  25. Global $Background = GUICtrlCreatePic("back.jpg", 0, 0, 800, 600)
  26.  
  27. AdlibRegister("_update", 50)
  28.  
  29. While Sleep(25)
  30. WEnd
  31.  
  32. Func _update()
  33. $iTemp = GUICtrlRead($hCounter)
  34. GUICtrlSetData($hCounter, $iTemp + 1)
  35. EndFunc ;==>_update
  36.  
  37. Func _on_exit()
  38. AdlibUnRegister("_update")
  39. GUISetState($hGui, @SW_HIDE)
  40. GUIDelete($hGui)
  41. EndFunc ;==>_on_exit
  42.  
  43. Func _quit()
  44. EndFunc ;==>_quit
  45.  
  46.  
Visualizar todo o conteúdo do post


  • Por favor, faça o login para responder
9 respostas neste tópico

#1 Pedro Pinheiro

Pedro Pinheiro

    Membro Nível 2

  • Membros
  • PipPipPip
  • 212 posts
  • LocationBrazil

Postado 19 julho 2016 - 05:55

Eu fiz uma GUI e coloquei uma imagem de background. Sempre que eu mudo um valor de um label transparente, as vezes o valor vem com uma piscada branca mostrando a área do label. Alguem sabe arrumar isso?

 

PGfekD3.gif9HBSuhs.gif

 

Dar sleep no while não evita esse bug. Além do mais meu while não pode ter sleep.

 

 

Exemplo:

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

Imagem para test.

ZxTqZ3b.jpg


Editado por Pedro Pinheiro, 19 julho 2016 - 06:10 .


#2 Luigi

Luigi

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 664 posts
  • LocationCWB

Postado 19 julho 2016 - 10:26   Melhor Resposta

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido


Editado por Luigi, 19 julho 2016 - 10:28 .


#3 Pedro Pinheiro

Pedro Pinheiro

    Membro Nível 2

  • Membros
  • PipPipPip
  • 212 posts
  • LocationBrazil

Postado 19 julho 2016 - 12:09

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

 

Nussa. Valeu Luigi. Tenho vários scripts que precisam ser atualizados agora. Obrigado mesmo! Mais uma duvida...O meu script tem vários elementos desse tipo, eu preciso criar um AdlibRegister("_update", 50) para todas as função  de Guictrlsetdata?



#4 Fábio iGames

Fábio iGames

    AutoIt MVP

  • AutoIt MVPs (MVP)
  • PipPip
  • 183 posts

Postado 19 julho 2016 - 12:11

É isso mesmo @Luigi lembrei que você já havia resolvido isso em outro tópico que o mutleey perguntou sobre o cronometro regressivo  ficar piscando,

e a solução era um simples $WS_EX_COMPOSITED 7º Parâmetro do GUICreate.

 

 

Tópico aqui: 

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

 

Isso já tinha me ajudado antes e agora solucionou a questão do nosso amigo Pedro.

 

Valeu Luigi.



#5 Luigi

Luigi

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 664 posts
  • LocationCWB

Postado 19 julho 2016 - 02:26

 

Nussa. Valeu Luigi. Tenho vários scripts que precisam ser atualizados agora. Obrigado mesmo! Mais uma duvida...O meu script tem vários elementos desse tipo, eu preciso criar um AdlibRegister("_update", 50) para todas as função  de Guictrlsetdata?

 

@Pedro Pinheiro, se precisa de um AdlibRegistar para cada GuiCtrlSetData, não sei dizer...

 

Mas o exemplo acima eu fiz com um loop vazio, pois não precisa (isso vale para os meus códigos), tenho uma urticária nervosa com um loop cheio de coisas, mas isso é muito pessoal.

 

Mas é algo de cada um.

 

Se você pensar que criar um AdLibRegister para cada atualização de função do GuiCtrlSetData ajuda o código a ter mais separação, e não encher tanto o conteúdo do While...Wend, pode ser uma vantagem.

 

Consegui explicar?

 

Mas o importante acima de tudo, entre o certo e o errado, é você aprender, e fazer seus scripts funcionarem.

 

Abraço.



#6 Pedro Pinheiro

Pedro Pinheiro

    Membro Nível 2

  • Membros
  • PipPipPip
  • 212 posts
  • LocationBrazil

Postado 23 julho 2016 - 05:38

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

 

 

 

 

@Luigi. Eu tentei fazer com o GuiCtrlSetImage, mas não funcionou. Ele fica com o mesmo efeito dos números piscando. O exemplo é o mesmo, tirando o GuiCtrlCreatePic e o GUICtrlSetImage. Quando eu fico trocando de imagens, a precisão não é boa e acaba a imagem piscando que não da nem pra ver ela totalmente as vezes.

 

 

Na Gif eu fico variando entre 2 imagens, mas elas acabam não aparecendo totalmente.

 

ebESq7P.gif

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido



#7 Fábio iGames

Fábio iGames

    AutoIt MVP

  • AutoIt MVPs (MVP)
  • PipPip
  • 183 posts

Postado 23 julho 2016 - 11:47

@Pedro Pinheiro ...  Retirei do Help , Traduzi pelo Google Tradutor.
 
Usando $WS_EX_COMPOSITED ele Pinta Todos os descendentes de uma Janela, a Fim de Pintura de Baixo para Cima, Usando o Buffer Duplo.
 
Pelo que Entendi tem que colocar a posição dos objetos, Labels e Etc, Tudo Invertido dentro Da GuiCreate se for usar $WS_EX_COMPOSITED.
O Fundo por Exemplo tem que ser a Última coisa da GuiCreate antes de GUISetState(@SW_SHOW, $hGui) com nesse Exemplo:

 

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

 
Mas tem coisas que não funcionam como por exemplo exemplo, não consegui colocar imagem em PNG com GDI+, e já Coloquei em Todas as Posições Possíveis do Srcipt.
Dá um Help ai @Luigi.

 

@Luigi  no momento a minha dúvida é sobre colocar imagem PNG usando $WS_EX_COMPOSITED ???

 

Exemplo:

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido


Editado por Fábio iGames, 23 julho 2016 - 11:54 .


#8 Pedro Pinheiro

Pedro Pinheiro

    Membro Nível 2

  • Membros
  • PipPipPip
  • 212 posts
  • LocationBrazil

Postado 23 julho 2016 - 12:54

@

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

Usa Gif Animation para mostrar imagem png ou gif na gui, mas se você quiser algo com GuiCtrlSetImage, então use a UDF

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

. Sobre a imagem na GUI, sempre que eu trocava de imagem ele dava uma piscada branca que nem o contador sem o $WS_EX_COMPOSITED


Editado por Pedro Pinheiro, 23 julho 2016 - 01:06 .


#9 Fábio iGames

Fábio iGames

    AutoIt MVP

  • AutoIt MVPs (MVP)
  • PipPip
  • 183 posts

Postado 23 julho 2016 - 04:25

Valeu @Pedro Pinheiro

 

Não lembro se já tenho essa UDF aqui, uso muito a UDF GIFAnimation.au3, mas nunca testei com PNG, vou ver.

 

Quanto a pisca branca, ou você aumenta o delay da Chamada da Função AdlibRegister ou Deixa ela sem Delay.

 

Testa essas opções:

AdlibRegister("_update", 50)   ; Assim Fica Piscando com Fundo Branco.
AdlibRegister("_update", 500) ; Assim Fica Bom Sem a Piscada do Fundo Branco.
AdlibRegister("_update")          ; Assim Fica Também Fica Bom Sem a Piscada do Fundo Branco.

Editado por Fábio iGames, 23 julho 2016 - 04:28 .


#10 Pedro Pinheiro

Pedro Pinheiro

    Membro Nível 2

  • Membros
  • PipPipPip
  • 212 posts
  • LocationBrazil

Postado 23 julho 2016 - 06:48

 

Valeu @Pedro Pinheiro

 

Não lembro se já tenho essa UDF aqui, uso muito a UDF GIFAnimation.au3, mas nunca testei com PNG, vou ver.

 

Quanto a pisca branca, ou você aumenta o delay da Chamada da Função AdlibRegister ou Deixa ela sem Delay.

 

Testa essas opções:

AdlibRegister("_update", 50)   ; Assim Fica Piscando com Fundo Branco.
AdlibRegister("_update", 500) ; Assim Fica Bom Sem a Piscada do Fundo Branco.
AdlibRegister("_update")          ; Assim Fica Também Fica Bom Sem a Piscada do Fundo Branco.

 

 

Ai que ta. Eu não quero chamar a função de troca de imagem constantemente. Eu dei um sleep na função de trocar a imagem, mas a imagem continua piscando.


Editado por Pedro Pinheiro, 23 julho 2016 - 09:39 .





0 usuário(s) está(ão) lendo este tópico

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

Documentação OnLine de referência