Jump to content
Belini

Iniciar o ListView com um ítem selecionado. (Resolvido)

Recommended Posts

Criei uma gui que tem 2 ListView e um deles preciso que inicie com o primeiro ítem selecionado e em outra parte preciso que o foco mude para o primeiro ítem do segundo ListView, parecia ser simples usando a função _GUICtrlListView_SetItemSelected que inicia com o ítem escolhido já selecionado mais isto não acontece se tiver 2 ListView na mesma gui, fiz vários testes e só funciona se eu tirar um deles, sei que devo mudar o Handle para o ListView que quero mais não esta funcionando.

Share this post


Link to post
Share on other sites

Olá!

 

Esse código funciona pra mim, tenta ai:

#include <GUIConstantsEx.au3>
#include <GuiListView.au3>

_Main()

Func _Main()
Local $hGUI, $hListView, $hListView1

$hGUI = GUICreate("ListView Set Item Selected", 640, 480)

; First list view
$hListView = GUICtrlCreateListView("", 2, 2, 200, 200)
; Second listview
$hListView1 = GUICtrlCreateListView("", 210, 2, 200, 200)

; Add columns
_GUICtrlListView_AddColumn($hListView, "Items", 100)
_GUICtrlListView_AddColumn($hListView1, "Items", 100)
; Add items
_GUICtrlListView_AddItem($hListView, "Item 1")
_GUICtrlListView_AddItem($hListView, "Item 2")
_GUICtrlListView_AddItem($hListView, "Item 3")
;
_GUICtrlListView_AddItem($hListView1, "Item 1")
_GUICtrlListView_AddItem($hListView1, "Item 2")
_GUICtrlListView_AddItem($hListView1, "Item 3")

; Select item 2 on listview 0
_GUICtrlListView_SetItemSelected($hListView, 1)

; Select item 3 on listview 1
_GUICtrlListView_SetItemSelected($hListView1, 2)

GUISetState()

; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc   ;==>_Main

 

Abraços,

 

João Carlos.

Share this post


Link to post
Share on other sites

 

#include <GUIConstantsEx.au3>
#include <GuiListView.au3>

_Main()

Func _Main()
       Local $hGUI, $hListView, $hListView1

       $hGUI = GUICreate("ListView Set Item Selected", 640, 480)

       ; First list view
       $hListView = GUICtrlCreateListView("", 2, 2, 200, 200)
       ; Second listview
       $hListView1 = GUICtrlCreateListView("", 210, 2, 200, 200)

       ; Add columns
       _GUICtrlListView_AddColumn($hListView, "Items", 100)
       _GUICtrlListView_AddColumn($hListView1, "Items", 100)
       ; Add items
       _GUICtrlListView_AddItem($hListView, "Item 1")
       _GUICtrlListView_AddItem($hListView, "Item 2")
       _GUICtrlListView_AddItem($hListView, "Item 3")
       ;
       _GUICtrlListView_AddItem($hListView1, "Item 1")
       _GUICtrlListView_AddItem($hListView1, "Item 2")
       _GUICtrlListView_AddItem($hListView1, "Item 3")

       ; Select item 2 on listview 0
       _GUICtrlListView_SetItemSelected($hListView, 1)

       ; Select item 3 on listview 1
       _GUICtrlListView_SetItemSelected($hListView1, 2)




       GUISetState() 
     ControlFocus("","",$hListView1);se quiser focar no controle adicione essa linha




       ; Loop until user exits
       Do
       Until GUIGetMsg() = $GUI_EVENT_CLOSE
       GUIDelete()
EndFunc   ;==>_Main

 

 

corrigido linha repetida _GUICtrlListView_SetItemSelected($hListView1, 2)

thanks @JScript

Edited by joelson0007

Share this post


Link to post
Share on other sites

@Joelson0007

 

A seguinte linha está repetida:

_GUICtrlListView_SetItemSelected($hListView1, 2)

Abraços,

 

João Carlos.

Share this post


Link to post
Share on other sites

Usando o _GUICtrlListView_AddColumn e o _GUICtrlListView_AddItem foi resolvido o problema da seleção pórem usando estes comandos para adicionar colunas e ítens não consego pegar os dados da linha que esta selecionada, qual comando devo usar prá pegar estes dados?

Share this post


Link to post
Share on other sites

Não entendi muito bem, mas veja se ajuda...

 

#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include<array.au3>

_Main()

Func _Main()
       Local $hGUI, $hListView, $hListView1

       $hGUI = GUICreate("ListView Set Item Selected", 640, 480)

       ; First list view
       $hListView = GUICtrlCreateListView("", 2, 2, 200, 200)
       ; Second listview
       $hListView1 = GUICtrlCreateListView("", 210, 2, 200, 200)

       ; Add columns
       _GUICtrlListView_AddColumn($hListView, "Items", 100)
       _GUICtrlListView_AddColumn($hListView1, "Items", 100)
       ; Add items
       _GUICtrlListView_AddItem($hListView, "A")
       _GUICtrlListView_AddItem($hListView, "B")
       _GUICtrlListView_AddItem($hListView, "C")
       ;
       _GUICtrlListView_AddItem($hListView1, "D")
       _GUICtrlListView_AddItem($hListView1, "E")
       _GUICtrlListView_AddItem($hListView1, "F")

       ; Select item 2 on listview 0
       _GUICtrlListView_SetItemSelected($hListView, 1)

       ; Select item 3 on listview 1
    _GUICtrlListView_SetItemSelected($hListView1, 2)


GUISetState()
$selecionado_hListView= ControlListView("", "", $hListView, "GetText", ControlListView("", "", $hListView, "GetSelected"))
$selecionado_hListView2= ControlListView("", "", $hListView1, "GetText", ControlListView("", "", $hListView1, "GetSelected"))
MsgBox(4160, "","O item selecionado na lista 1 é = " &$selecionado_hListView&@CRLF&"O item selecionado na lista 2 é = " &$selecionado_hListView2)


; Loop until user exits
       Do
       Until GUIGetMsg() = $GUI_EVENT_CLOSE
       GUIDelete()
EndFunc   ;==>_Main

 

Share this post


Link to post
Share on other sites

@joelson0007 é isto mesmo que eu quero só que preciso das informações da próxima coluna também ou seja do ítem e sub-ítem, criando as colunas e adicionando os sub-ítens de outra forma consigo pegar todos os dados porém não consigo colocar ícones em cada linha, da maneira que você postou dá prá colocar ícone mais não retorna todos os dados, veja o exemplo prá entender melhor:

 

 

#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include<array.au3>

#include <GuiImageList.au3>

Local $hGUI, $hListView, $hListView1

$hGUI = GUICreate("ListView Set Item Selected", 415, 220)
$hListView = GUICtrlCreateListView("coluna 1|coluna 2|coluna 3|", 2, 2, 200, 200, "", $LVS_EX_GRIDLINES)
$hListView1 = GUICtrlCreateListView("", 210, 2, 200, 200)

GUICtrlCreateListViewItem("texto 1|texto 2|texto 3|", $hListView)
GUICtrlCreateListViewItem("texto 4|texto 5|texto 6|", $hListView)

$hImage = _GUIImageList_Create(16, 16, 5, 3)
_GUICtrlListView_SetImageList($hListView1, $hImage, 1)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 86)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 137)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 165)

_GUICtrlListView_AddColumn($hListView1, "Items", 100)
_GUICtrlListView_AddItem($hListView1, "A", 0)
_GUICtrlListView_AddItem($hListView1, "B", 1)
_GUICtrlListView_AddItem($hListView1, "C", 2)

_GUICtrlListView_SetItemSelected($hListView, 0)
_GUICtrlListView_SetItemSelected($hListView1, 2)

GUISetState()
$selecionado_hListView = ControlListView("", "", $hListView, "GetText", ControlListView("", "", $hListView, "GetSelected"))
$selecionado_hListView2 = ControlListView("", "", $hListView1, "GetText", ControlListView("", "", $hListView1, "GetSelected"))
$item_subitem = GUICtrlRead(GUICtrlRead($hListView))
MsgBox(4160, "", "O item selecionado na lista 1 é = " & $selecionado_hListView & @CRLF & "O item selecionado na lista 2 é = " & $selecionado_hListView2)
MsgBox(4160, "", "Os ítens e sub-ítens da lista 1 são: " & $item_subitem)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()

 

Share this post


Link to post
Share on other sites

fiz essa gambiarra aqui meio na pressa, até você acha uma maneira mais eficiente...

não sei se ajuda, mas eu tentei...

 

 

#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include<array.au3>
#include <GuiImageList.au3>

Local $hGUI, $hListView, $hListView1

$hGUI = GUICreate("ListView Set Item Selected", 600, 220)
$hListView = GUICtrlCreateListView("coluna 1|coluna 2|coluna 3|", 2, 2, 200, 200, "",$LVS_EX_GRIDLINES)
$hListView1 = GUICtrlCreateListView("", 205, 2, 400, 200,"",BitOR($LVS_EX_GRIDLINES,$LVS_ICON, Not $LVS_SINGLESEL,$LVS_EX_SUBITEMIMAGES))

GUICtrlCreateListViewItem("texto 1|texto 2|texto 3|", $hListView)
GUICtrlCreateListViewItem("texto 4|texto 5|texto 6|", $hListView)

$hImage = _GUIImageList_Create(16, 16, 5, 3)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 86)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 137)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 165)

_GUICtrlListView_SetImageList($hListView1, $hImage, 1)

;=====================================================
_GUICtrlListView_AddColumn($hListView1, "Items", 100)
_GUICtrlListView_AddItem($hListView1, "A", 0)
_GUICtrlListView_AddItem($hListView1, "B", 1)
_GUICtrlListView_AddItem($hListView1, "C", 2)
_GUICtrlListView_AddColumn($hListView1, "Items2", 100)
_GUICtrlListView_AddSubItem($hListView1, 0, "D", 1, 1)
_GUICtrlListView_AddSubItem($hListView1, 1, "E", 1, 1)
_GUICtrlListView_AddSubItem($hListView1, 2, "F", 1, 1)
_GUICtrlListView_AddColumn($hListView1, "Items3", 100)
_GUICtrlListView_AddSubItem($hListView1, 0, "G", 2, 2)
_GUICtrlListView_AddSubItem($hListView1, 1, "H", 2, 2)
_GUICtrlListView_AddSubItem($hListView1, 2, "I", 2, 2)
;========================================================

_GUICtrlListView_SetItemSelected($hListView, 0)
_GUICtrlListView_SetItemSelected($hListView1, 2)

GUISetState()
$selecionado_hListView = ControlListView("", "", $hListView, "GetText", ControlListView("", "", $hListView, "GetSelected",1))
$selecionado_hListView2 = ControlListView("", "", $hListView1, "GetText", ControlListView("", "", $hListView1, "GetSelected",1))



MsgBox(0, "","O item selecionado na lista 1 é = " & $selecionado_hListView & @CRLF & "O item selecionado na lista 2 é = " & $selecionado_hListView2)
MsgBox(0,"","(LISTA 1) Os sub_itens na linha 1 é = "&_Pega_SubItens_ListView($hListView,0))
MsgBox(0,"","(LISTA 2) Os sub_itens na linha 1 é = "&_Pega_SubItens_ListView($hListView1,0))
MsgBox(0,"","(LISTA 2) Os sub_itens na linha 2 é = "&_Pega_SubItens_ListView($hListView1,1))
MsgBox(0,"","(LISTA 2) Os sub_itens na linha 3 é = "&_Pega_SubItens_ListView($hListView1,2))


Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()



;===============Esta funcão não foi debugada!
Func _Pega_SubItens_ListView($lista,$linha)
Local $_pega_texto
$nI=ControlListView("", "", $lista, "GetSubItemCount")
For $i = 0 To $nI -1
$_texto_linha = ControlListView("", "", $lista, "GetText", $linha,$i)
$_pega_texto&="|"&$_texto_linha
Next
Return StringRegExpReplace($_pega_texto,"^\x7C|\x7C$","")
EndFunc

 

Edited by joelson0007

Share this post


Link to post
Share on other sites

Se fez este as pressas faço idéia se tivesse sido com tempo então, funcionou muito bem para mostrar os dados da linha escolhida e acho que vai dar certo para o que quero pois preciso pegar os dados da linha que estiver selecionada no momento, enquanto procurava eu ví um comando que retorna o número da linha selecionada, então conjugando este comando com a função que você fez acho que conseguirei pegar todos os dados da linha selecionada.

Share this post


Link to post
Share on other sites

ok!, fico feliz que ajudou em algo

e outra agora você modifica a adapta do jeito que você quiser e do jeito que ficar melhor pra voce...

até mais...

Share this post


Link to post
Share on other sites

Consegui encontrar o comando que lista os ítens e sub-ítens como eu queria.

 

 

#include <GUIConstantsEx.au3>
#include <GuiListView.au3>

_Main()

Func _Main()
   Local $hListView

   GUICreate("ListView Set Item Text", 400, 300)
   $hListView = GUICtrlCreateListView("", 2, 2, 394, 268)
   GUISetState()

   _GUICtrlListView_AddColumn($hListView, "Items", 100)
   _GUICtrlListView_AddColumn($hListView, "Items", 100)

_GUICtrlListView_AddItem($hListView, "teste 1")
_GUICtrlListView_AddItem($hListView, "teste 2")
_GUICtrlListView_AddItem($hListView, "teste 3")

_GUICtrlListView_AddSubItem($hListView, 0, "novo 1",1)
_GUICtrlListView_AddSubItem($hListView, 1, "novo 2",1)
_GUICtrlListView_AddSubItem($hListView, 2, "novo 3",1)

   MsgBox(4160, "Information","Ítem linha 1 = " &_GUICtrlListView_GetItemText($hListView, 0) & "    Sub-ítem linha 1 = " & _GUICtrlListView_GetItemText($hListView, 0, 1))
   MsgBox(4160, "Information","Ítem linha 2 = " &_GUICtrlListView_GetItemText($hListView, 1) & "    Sub-ítem linha 2 = " & _GUICtrlListView_GetItemText($hListView, 1, 1))
   MsgBox(4160, "Information","Ítem linha 3 = " &_GUICtrlListView_GetItemText($hListView, 2) & "    Sub-ítem linha 3 = " & _GUICtrlListView_GetItemText($hListView, 2, 1))

   Do
   Until GUIGetMsg() = $GUI_EVENT_CLOSE
   GUIDelete()
EndFunc

 

Share this post


Link to post
Share on other sites

Eu estava tentando resolver problema da barra lateral quando encontrei este comando, para barra vertical ainda não achei a solução pois ela ao ser removida para de rolar os ítens que estiverem fora da janela.

Share this post


Link to post
Share on other sites

Belini, segui o seu código e funcionou muito bem, porém quando eu coloco mais linhas na listview e seleciono uma linha que não está aparecendo na listview ela é selecionada porém continua oculta, como posso fazer ela ficar visível?

 

usei o seguinte código: _GUICtrlListView_SetItemSelected($hListView, 10), como a linha 10 não estava visível na listview, ela é selecionada porém continua escondida na listview, eu preciso que ela fique se possível no meio da listview. obs: posso reescrever o código para refazer a lista a partir de determinada linha, porém gostaria de saber se já existe um comando que coloque a linha selecionada em evidencia.

Share this post


Link to post
Share on other sites

Consegui resolver meu problema, caso alguém tenha a mesma dúvida é só utilizar o _GUICtrlListView_Scrooll( Nome da listview, $horizontal, $Vertical ), observando no help do autoit, verifica-se que ele avançará por pixels, por exemplo: se a altura da linha é de 16 pixels ( eu ainda não procurei ver onde se obtém esta informação, utilizei este valor que está no manual, que deve ser o padrão de cada linha ) e queremos avançar até a linha 25 então fiz coloquei da seguinte forma:

_GUICtrlListView_SetItemSelected($hListView, 25) ;<======== destaca a linha, se nao quiser colocar este comando não precisa

_GUICtrlListView_Scrooll( $hListView, 0, 25*16 ) ;<======== Esta linha já está explicada acima

 

Tenho que destacar o manual do Autoit, estudo informática a anos e nunca ví um manual tão completo. Basta um pouco de paciência.

 

Mesmo assim agradeço se alguém tiver tentado me ajudar

Share this post


Link to post
Share on other sites

Boa tarde, aproveitando este post sobre Listview, gostaria de uma ajuda, pois estou com alguns problemas.

 

De imediato já falo que sou novo no desenvolvimento de Autoit. Estou gerando um relatório sobre chamadas recebidas/finalizadas de cada colaborador, criei abas "A - B", "C - D", "E - F", e assim subsequente, em cada aba eu crio um ListView, o problema é que mesmo sendo ListView diferentes o AutoIt está dando "sequencia na contagem", ou seja, chega um momento que não alimenta os demais ListView's das demais abas porque já atingiu um limite de linhas dentro do Listview. Minha dúvida é, são ListView's diferentes, e mesmo assim tem uma "herança" entre eles, eu gostaria de saber como zerar ou apontar que de uma ListView para outra deveria começar da linha 0, ou algo parecido, alguém poderia me ajudar?

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


×