Ir para conteúdo


Foto

Criação de label


Melhor Resposta Manimal, 21 julho 2016 - 10:43

Olá Pedro.

 

A melhor maneira de fazer isso é usar um vetor (ou array) dinâmico para armazenar as referências de controles.

Usando teu exemplo:

  1.  
  2. #include <Array.au3>
  3. $itens_menu=15
  4. $posicion=130
  5. $count=1
  6. $espaco_inicial=0
  7. $espaco_entre=40
  8. $game_list = "blablabla "
  9. $RECUO=0
  10. GUICreate("Janela", 800, 800)
  11. Local $MeusLabels[0]
  12. For $count = 1 to $itens_menu
  13. _ArrayAdd($MeusLabels, GUICtrlCreateLabel($game_list & $count, $RECUO, $posicion+$espaco_inicial, 309, 30))
  14. $espaco_inicial+=$espaco_entre
  15. GUISetState(@SW_SHOW)
  16. GUICtrlSetData($MeusLabels[3], "NOVO LABEL")
  17. _ArrayDisplay($MeusLabels)
  18.  

Assim o array $MeusLabels vai conter exatamente a quantidade e o nro de controle de labels que a sua GUI especificar.

Este conceito pode ser aplicado a praticamente qualquer controle.

Outra grande vantagem deste método, é que como os arrays são por definição "ponteiros", eles são sempre passados por referência para outras funções.

Na prática, ao chamar funções passando como parâmetro o $MeusLabels, vc tem acesso a ver e/ou modificar quaisquer elementos do controle. Por exemplo:

  1.  
  2. #include <Array.au3>
  3. $itens_menu=15
  4. $posicion=130
  5. $count=1
  6. $espaco_inicial=0
  7. $espaco_entre=40
  8. $game_list = "blablabla "
  9. $RECUO=0
  10. GUICreate("Janela", 800, 800)
  11. Local $MeusLabels[0]
  12. For $count = 1 to $itens_menu
  13. _ArrayAdd($MeusLabels, GUICtrlCreateLabel($game_list & $count, $RECUO, $posicion+$espaco_inicial, 309, 30))
  14. $espaco_inicial+=$espaco_entre
  15. GUISetState(@SW_SHOW)
  16. GUICtrlSetData($MeusLabels[3], "NOVO LABEL")
  17. _ArrayDisplay($MeusLabels)
  18. DESATIVA_LABELS($MeusLabels)
  19. _ArrayDisplay($MeusLabels)
  20.  
  21. Func DESATIVA_LABELS ($ListaLabels)
  22. For $Controle in $ListaLabels
  23. GUICtrlSetState($Controle, $GUI_HIDE)
  24. EndFunc
  25.  
  26.  

Ou se quiser modificar algum label específico:

  1.  
  2. GUICtrlSetData($MeusLabels[3], "NOVO TEXTO PARA O LABEL 3")
  3.  

E assim por diante.

Uso isso no meu sistema de Delivery por conta dos ingredientes  ;)

Visualizar todo o conteúdo do post


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

#1 Pedro Pinheiro

Pedro Pinheiro

    Membro Nível 2

  • Membros
  • PipPipPip
  • 212 posts
  • LocationBrazil

Postado 21 julho 2016 - 07:48

Uma duvida. Se eu quiser criar uma quantidade de Gui definida pelo .ini ou por qualquer outra coisa (um valor variável), eu vou ter de criar um while de 1 até a quantidade de itens?

exemplo, meu GUI decidiu que quer ter 15 itens (labels) nele:


Como vou criar 15 labels?
;tem que ser $L1 até $L15 e $game_list1 até $game_list15

 

$L1=GUICtrlCreateLabel ($game_list1 $RECUO, $posicion+$espaco_inicial, 309,30)

$L2=GUICtrlCreateLabel ($game_list2 $RECUO, $posicion+$espaco_inicial, 309,30)

$L3=GUICtrlCreateLabel ($game_list3 $RECUO, $posicion+$espaco_inicial, 309,30)

 

até o $L15, mas esse valor pode mudar sempre que eu abrir o programa, então como vou fazer o $L virar um $L1,2,3,4,5...e o $game_list virar $game_list1,2,3,4?

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


Editado por Pedro Pinheiro, 21 julho 2016 - 07:50 .


#2 Manimal

Manimal

    Membro Nível 3

  • Administradores (Adm)
  • PipPipPipPip
  • 358 posts
  • LocationVideira/SC

Postado 21 julho 2016 - 10:43   Melhor Resposta

Olá Pedro.

 

A melhor maneira de fazer isso é usar um vetor (ou array) dinâmico para armazenar as referências de controles.

Usando teu exemplo:

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

Assim o array $MeusLabels vai conter exatamente a quantidade e o nro de controle de labels que a sua GUI especificar.

Este conceito pode ser aplicado a praticamente qualquer controle.

Outra grande vantagem deste método, é que como os arrays são por definição "ponteiros", eles são sempre passados por referência para outras funções.

Na prática, ao chamar funções passando como parâmetro o $MeusLabels, vc tem acesso a ver e/ou modificar quaisquer elementos do controle. Por exemplo:

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

Ou se quiser modificar algum label específico:

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

E assim por diante.

Uso isso no meu sistema de Delivery por conta dos ingredientes  ;)



#3 Pedro Pinheiro

Pedro Pinheiro

    Membro Nível 2

  • Membros
  • PipPipPip
  • 212 posts
  • LocationBrazil

Postado 21 julho 2016 - 11:04

@

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

 

Nossa. Valeu mesmo. Só me tira 1 dúvidas?

 

 

Como eu adiciono isso em "$game_list" para seguir também a sequencia "$game_list [1],[2],[3],[4],[5]"?

 

 

 _ArrayAdd($MeusLabels, GUICtrlCreateLabel($game_list,  $RECUO, $posicion+$espaco_inicial, 309, 30))


Editado por Pedro Pinheiro, 21 julho 2016 - 11:06 .


#4 Manimal

Manimal

    Membro Nível 3

  • Administradores (Adm)
  • PipPipPipPip
  • 358 posts
  • LocationVideira/SC

Postado 21 julho 2016 - 12:02

Pelo que eu entendi, vc tem uma "lista de games" que vc quer mostrar na tela e ir colocando o nome do game em cada label, isso?

 

O que é $game_list? É a lista dos games? Seus nomes ou o que?

 

Teoricamente vc poderia usar o atributo Caption do Label para o nome do jogo, mas se vc já tem a relação de nomes no $game_list...

 

É aí que eu me perdi... :mad2:

 

Alternativa 1 onde $Game_List é um array contendo os nomes dos jogos previamente preenchido:

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

Alternativa 2 onde o $game_list é preenchido JUNTO com a criação dos controles e seus labels:

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

Sempre levando em conta que estamos usando arrays unidimensionais!

Se formos usar arrays bidimensionais (matrizes), facilita pois temos no mesmo elemento todas as características de cada controle.

Melhor que isso só usando objeto.  ;)



#5 Manimal

Manimal

    Membro Nível 3

  • Administradores (Adm)
  • PipPipPipPip
  • 358 posts
  • LocationVideira/SC

Postado 21 julho 2016 - 12:07

Ops, esqueci de incluir o arquivo GAMES.INI do último exemplo

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



#6 Luigi

Luigi

    Administrador

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

Postado 21 julho 2016 - 02:49

Isso lembra "Lan house" ^^



#7 Pedro Pinheiro

Pedro Pinheiro

    Membro Nível 2

  • Membros
  • PipPipPip
  • 212 posts
  • LocationBrazil

Postado 21 julho 2016 - 09:55

Valeu mesmo @

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

. Muito Obrigado!


Editado por Pedro Pinheiro, 22 julho 2016 - 05:58 .





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