Jump to content
Sign in to follow this  
Luigi

Você sabe pra que serve o GUICtrlCreateDummy() ?

Recommended Posts

Bem...
Segundo o Google Translator, DUMMY é um adjetivo que significa:

  • simulado
  • simulated, dummy, mock, sham, assumed, feigned
  • falso
  • false, untrue, bogus, phony, wrong, dummy
  • postiço
  • false, dummy

Mas e no AutoIt, pra que serve?

Se você usar um GuiCtrlCreateButton, ele retorno o id do elemento, e você vê um botão na GUI (Graphic User Interface ou apenas janela).

Se você usar um GuiCtrlCreateLabel, ele retorno o id do elemento, e você vê um label na GUI.

E assim por diante...

Se você usar um GuiCtrlCreateDummy, ele retorno o id do elemento, e você  não vê nada na GUI.

Como assim? Ele cria e não retorna nada? Sim! Isso mesmo! É um controle fake, falso.

Ah, mas e isso tem utilidade?

Pior que tem...

Vou mostrar aqui 1 exemplo:

Você quer fazer uma GUI, mas nessa GUI tem várias "telas", por exemplo:

  • tela de login
  • tela de cadastro
  • tela de logout

Cada tela tem seus elementos (buttons, edit, radio, combobox, etc)...

São muitas telas, e cada tela tem seus elementos, pronto, virou um salseiro! Uma confusão!

Como fazer para @GUI_SHOW e @GUI_HIDE nesses controles?

É nessa questão que venho mostrar esse exemplo.

Ocultar o que não precisa, e exibir o que precisa.

Outra alternativa simples, seria usar um GuiCtrlCreateTab... Mas fica para outro tópico, vou me ater no Dummy().

A ideia é simples.

Antes de começar a criar os comandos da tela da primeira "tela de login", você cria um Dummy antes:

#Region Tela de login

Global $dummy1 = GuiCtrlCreateDummy()

GuiCtrlCreateLabel("Nome de usuário", x1, y1, w1, h1)

GuiCtrlCreateInput("digite seu nome de usuario", x2, y2, w2, h2)

GuiCtrlCreateLabel("Senha", x3, y3, w3, h3)

GuiCtrlCreateInput("digite sua senha", x4, y4, w4, h4)

Global $dummy2 = GuiCtrlCreateDummy()

#EndeRegion Tela de login

E assim... Eu desenho todas as telas que eu preciso: Tela de login, Tela de cadastro, Tela de logout, etc...

O segredo é, um Dummy antes do primeiro controle, e um Dummy depois do último controle para cada tela ou sessão.

E preciso de um jeito, de manipular cada sessão, isto é, fazer que quando eu quiser a sessão "Tela de login", ele exiba todos os elementos da "Tela de login", e oculte todos os outros elementos que não fazer parte da "Tela de login".

Por isso um Dummy antes, e um Dummy depois!

O Dummy nada mais é, do que um número qualquer...

E qualquer que seja o próximo controle que você criar, ele terá um número a mais do que o Dummy, nesta tela.

E o próximo controle, terá um número a mais do que o anterior, até você colocar o Dummy no fim.

Então todos os controles da sessão "Tela de login", estarão entre um Dummy (número inicial) e outro Dummy (número final).

Agora, já é possível sair ocultando e exibindo os controles.

;~ #AutoIt3Wrapper_AU3Check_Parameters= -q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7
;~ #Tidy_Parameters=/sf

#include-once
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>


OnAutoItExitRegister("OnExit")

Opt("GUIOnEventMode", 1)
Opt("GUIEventOptions", 1)
Opt("MustDeclareVars", 1)

Global $sLoremIpsum = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."

Global $aGuiSize[2] = [800, 600]
Global $sGuiTitle = "GuiTitle"
Global $hGui

$hGui = GUICreate($sGuiTitle, $aGuiSize[0], $aGuiSize[1])
GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
GUISetFont(11, 400, 0, "DOSLike", $hGui)

#Region VIEWS
Global $VIEW = 1
Global $aVIEWS[][4] = [[0, "login"], [0, "account"], [0, "exit"]]
Global $pos[4] = [10, 10, 100, 25]
For $ii = 0 To UBound($aVIEWS, 1) - 1
    $aVIEWS[$ii][0] = GUICtrlCreateRadio($aVIEWS[$ii][1], $pos[0] + $ii * $pos[2], $pos[1], $pos[2], $pos[3])
    GUICtrlSetOnEvent($aVIEWS[$ii][0], "View_Click")
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)

#EndRegion VIEWS

#Region Tela0
$aVIEWS[0][2] = GUICtrlCreateDummy()

Global $hLabel_Tela0_Texto = GUICtrlCreateLabel("Tela de login", 10, 50, 780, 25, BitOR($SS_CENTER, $SS_SUNKEN))
GUICtrlSetBkColor($hLabel_Tela0_Texto, 0xccbbaa)
Global $hLabel_Tela0_Usuario = GUICtrlCreateLabel("usuario", 10, 83, 80, 25, $ES_RIGHT)
Global $hInput_Tela0_Usuario = GUICtrlCreateInput("", 100, 83, 200, 25)
Global $hLabel_Tela0_Senha = GUICtrlCreateLabel("senha", 10, 113, 80, 25, $ES_RIGHT)
Global $hInput_Tela0_Senha = GUICtrlCreateInput("", 100, 113, 200, 25)
Global $hButton_Tela0_TryLogin = GUICtrlCreateButton("Login", 100, 140, 80, 25)

$aVIEWS[0][3] = GUICtrlCreateDummy()
#EndRegion Tela0

#Region Tela1
$aVIEWS[1][2] = GUICtrlCreateDummy()

Global $hLabel_Tela1_Texto = GUICtrlCreateLabel("Tela de cadastro", 10, 50, 780, 25, BitOR($SS_CENTER, $SS_SUNKEN))
GUICtrlSetBkColor($hLabel_Tela1_Texto, 0x889922)
Global $hLabel_Tela1_Nome = GUICtrlCreateLabel("Nome completo", 10, 83, 160, 25, $ES_RIGHT)
Global $hInput_Tela1_Nome = GUICtrlCreateInput("", 180, 80, 200, 25)
Global $hLabel_Tela1_Usuario = GUICtrlCreateLabel("Nome de usuário", 10, 113, 160, 25, $ES_RIGHT)
Global $hInput_Tela1_Usuario = GUICtrlCreateInput("", 180, 110, 200, 25)
Global $hLabel_Tela1_Senha = GUICtrlCreateLabel("Senha", 10, 143, 160, 25, $ES_RIGHT)
Global $hInput_Tela1_Senha = GUICtrlCreateInput("", 180, 140, 200, 25)

$aVIEWS[1][3] = GUICtrlCreateDummy()
#EndRegion Tela1

#Region Tela2
$aVIEWS[2][2] = GUICtrlCreateDummy()
Global $hLabel_Tela2_Texto = GUICtrlCreateLabel("Tela de logout", 10, 50, 780, 25, BitOR($SS_CENTER, $SS_SUNKEN))
GUICtrlSetBkColor($hLabel_Tela2_Texto, 0xff0011)
Global $hLabel_Tela2_Texto = GUICtrlCreateEdit($sLoremIpsum, 10, 83, 780, 400, $ES_MULTILINE)
$aVIEWS[2][3] = GUICtrlCreateDummy()
#EndRegion Tela2

GUISetState(@SW_SHOW, $hGui)
View_Click($VIEW)

While Sleep(25)
WEnd

Func OnExit()
    GUISetState($hGui, @SW_HIDE)
    GUIDelete($hGui)
EndFunc   ;==>OnExit

Func Quit()
    Exit
EndFunc   ;==>Quit

Func View_Click($input = -1)
    $VIEW = IsDeclared("input") ? $input : @GUI_CtrlId - $aVIEWS[0][0]
    GUICtrlSetState($aVIEWS[$VIEW][0], $GUI_CHECKED)
    For $ii = 0 To UBound($aVIEWS, 1) - 1
        For $jj = $aVIEWS[$ii][2] + 1 To $aVIEWS[$ii][3] - 1
            GUICtrlSetState($jj, $ii = $VIEW ? $GUI_SHOW : $GUI_HIDE)
        Next
    Next
EndFunc   ;==>View_Click

 

Como disse... eis o segredo:
 

Global $aVIEWS[][4] = [ _
        [0, "login", "Dummy 0 inicio", "Dummy 0 fim"], _
        [0, "account", "Dummy 1 inicio", "Dummy 1 fim"], _
        [0, "exit", "Dummy 2 inicio", "Dummy 2 fim"] _
        ]
  • coluna 0 $aVIEWS, recebe o handle do CheckBox da tela
  • coluna 1 $aVIEWS, recebe o nome do CheckBox da tela
  • coluna 2 $aVIEWS, recebe o Dummy inicial
  • coluna 3 $aVIEWS, recebe o Dummy final

E a cada vez que você chama a função View_Click, ele sabe qual a tela que é pra mostrar, exibindo a tela solicitada, e ocultado tudo o que não é solicitado.

Agora para pirar um pouco, os controles não são deletados da tela, eles apenas são ocultados e exibidos!

Outra coisa, nem todo o controle pode responder bem aqui...

Todos os controles básicos funcionam bem, quero dizer: GuiCtrlCreateButton, GuiCtrlCreateLabe, etc..

Os controles plus não respondem bem: _GuiCtrlCreateButton, _GuiCtrlCreateEdit, etc...

Em tempo...

Se você precisa executar uma função toda a vez que entrar em uma tela, adicine uma coluna no $aVIEWS, contendo o nome da função que deseja chamar:

Func View_Click($input = -1)
    $VIEW = IsDeclared("input") ? $input : @GUI_CtrlId - $aVIEWS[0][0]
    GUICtrlSetState($aVIEWS[$VIEW][0], $GUI_CHECKED)
    CALL($aVIEWS[$VIEW][5])
    For $ii = 0 To UBound($aVIEWS, 1) - 1
        For $jj = $aVIEWS[$ii][2] + 1 To $aVIEWS[$ii][3] - 1
            GUICtrlSetState($jj, $ii = $VIEW ? $GUI_SHOW : $GUI_HIDE)
        Next
    Next
EndFunc   ;==>View_Click

Então, toda a vez que você mudar de tela, ele chama a função programada, graças à:

CALL($aVIEWS[$VIEW][5])

 

Você pode fazer a execução de saída de tela... Adicione mais uma coluna, rss...

Acredito que mostro aqui um exemplo prático do uso do GuiCtrlCreteDummy, e para pequenos projetos e devido à sua simplicidade se adapta muito bem.

 

É isso! 8D

 

  • Thanks 2

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×