Ajuda com ListView

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

judeujedi
Posts: 2
Joined: 14 Oct 2018, 07:05

Ajuda com ListView

14 Oct 2018, 08:22

Bom dia, pessoal.

Estou iniciando no AHK. Li os tutoriais do GIO, excelentes aliás.
Com isso consegui fazer o script até o ponto que está.

Code: Select all

Gui, add, ListView, x42 y100 w160  h250, PESQUISADOS
Gui, add, Text, x42 y10, NUMERO DO PROCESSO
Gui, Add, Edit, x42 y25 w160 h20 vCAMPO_NUMERO_DO_PROCESSO
Gui, Add, Button, x210 y23 w75 h25 gLABEL_BOTAO_PESQUISAR, PESQUISAR
Gui, Add, Button, x210 y53 w75 h25 gLABEL_BOTAO_LIMPAR, LIMPAR
Gui, add, Text, x210 y120, LANÇAR NUMEROS DE PROCESSOS?
Gui, Add, Button, x355 y133 w50 h25 , SIM 
Gui, add, Text, x210 y260, EXCLUIR PROCESSO
Gui, Add, Button, x210 y273 w100 h25 gLABEL_BOTAO_EXCLUIR, EXCLUIR
Gui, Show, w430 h400, Pesquisa de RPV
Run www.google.com.br
Sleep 300
WinActivate Pesquisa de RPV
Return




ESC:: 
ExitApp
Return 

GuiClose:
ExitApp
Return


;================================================================================================================================================
;__________________________________________________________________LABEL's_______________________________________________________________________
;================================================================================================================================================

LABEL_BOTAO_PESQUISAR:
Gui, submit, nohide
Lv_Add("", CAMPO_NUMERO_DO_PROCESSO)
Run, https://processual.trf1.jus.br/consultaProcessual/processoOriginario/listar.php?secao=TRF1&opTrf=pOrig&proc=%CAMPO_NUMERO_DO_PROCESSO%&uf=RO&enviar=Ok#
#IfWinActive ahk_class Chrome_WidgetWin_1
Sleep, 500
Send, {CTRLDOWN}{u}{CTRLUP}
Sleep 500
Send, {TAB 31}
Sleep 100
Send, {ENTER}
Sleep 500
Send, {TAB 26}
Sleep 100
Send, {ENTER}
Return

LABEL_BOTAO_LIMPAR:
WinActivate ahk_class Chrome_WidgetWin_1
#IfWinActive ahk_class Chrome_WidgetWin_1
Sleep 300
Loop, 3
{
	Sleep 100
	SEND, {CTRLDOWN}{w}{CTRLUP}
}
WinActivate Pesquisa de RPV
return

LABEL_BOTAO_EXCLUIR:
LV_Delete ()
return
O que o código faz é basicamente realizar um consulta em um determinado site (atividade do meu trabalho) e inserir o número pesquisado na ListView. Após todos os números pesquisados eu irei utilizar os dados da ListView para digitar automaticamente esses dados na tela que estiver aberta (será basicamente um ctrl+c, ctrl+v automático).

A interface está funcionando ok, aprendi bem a colocar botões, g-label, v-variante. Agora estou apanhando da ListView, rs.
Preciso fazer o botam "SIM" e o botão "EXCLUIR" funcionar...

1) O botão excluir deve retirar da ListView o item selecionado. O comando LV_Delete() apaga todas as linhas se estiver em branco "()". Mas, não está fazendo isso por que?

2) O botão SIM eu precisarei fazer o aplicativo ler a ListView, selecionar a primeira linha, ctrl+c, alt+tab, ctrl+v, enter e então passar para a segunda linha e assim até terminar a ListView. Muita coisa neste item :crazy: , mas se puderem deixar os comandos eu já terei de onde partir. :D

Já vou agradecendo, pessoal. Pelo que notei o fórum é muito bom. :bravo:
User avatar
Ria
Posts: 23
Joined: 03 Sep 2018, 17:54

Re: Ajuda com ListView

14 Oct 2018, 20:50

Olá,
Penso que deve dar uma olhada no código abaixo.
Vai aproveitar algo do que você precisa.
Abraço

Code: Select all

#warn
setworkingdir,%a_scriptdir%
F1=%A_scriptdir%\PT_adress.txt
MainWindowTitle=ListView_Test1
transform,T,chr,09                   ;- TAB
Gui,1:default
gosub,testfile
Gui, Font, s8 cBlack, Tahoma
Gui Add, GroupBox, cBlue x12 y5 w215 h143, DADOS: 
Gui, add, ListView, x20 y20 h120 w200 gLVa vLV1 +altsubmit , Nome|Telefone
Lv_ModifyCol(1, 130)                                                   ; Dimensão a atribuir ao tamanho da coluna 1
Lv_ModifyCol(2, 60)                                                    ; Dimensão a atribuir ao tamanho da coluna 2
gosub,fill
Gui, add, text,  x20  y240, Telefone:                                   ; Texto de campo telefone
Gui, add, Edit,  x20  y255 w100 h20 vFONE,                             ; Edit  campo telefone
Gui, Add, Button,x12  y155 w215 h20 gEliminarx, Eliminar selecionados(as)   ;-Botão Apagar 
Gui Add, GroupBox, -cBlue x12 y185 w215 h100, REGISTO: 
Gui, add, Text,  x20  y200, Nome:                                       ; Texto de campo nome
Gui, Add, Edit,  x20  y215 w120 h20 vNOME,                               ; Edit  campo nome
Gui, Add, Button,x160 y215 w60  h20 gAdd     , Guardar                  ; Botão Guardar
Gui, Add, Button,x160 y255 w60  h20 gLimpa     , Limpar                  ; Botão Limpar
Gui Add, GroupBox, cBlue x12 y290 w215 h45, PESQUISAR:
Gui, Add, Edit,  x20  y305 w200 h22 gFind vSrc,                        ;-Pesquisar
Gui, +Alwaysontop
Gui, show, w240 h350, LISTA TELEFÓNICA                                     ; Tela  geral
Menu, CMenu, Add, Eliminar, menuDo
Menu, CMenu, Add, Editar , menuDo
Return


Add:
Gui, submit, nohide                                                  ; Atualiza com os dados do campo
Fileappend,%nome%`;%fone%`r`n,%f1%
gosub,fill
sleep,1000
GuiControl,1:,fone,
GuiControl,1:,nome,
Return

GuiClose:
ExitApp
;----------------------------------------

;-------------- Fill Listview -----------
Fill:
Gui,1:default
gui,1:listview,LV1
LV_Delete()
loop,read,%F1%
  {
  LR=%A_loopReadLine%
  if LR=
     continue
          C1 =
          C2 =
         stringsplit,C,LR,`;,
   LV_Add("", c1,c2)
  }
LV_ModifyCol(1, "Sort CaseLocale")   ; or "Sort CaseLocale"
LV_Modify(LV_GetCount(), "Vis")      ;scrolls down
return
;----------------------------------------

;----------- Listview click on row -------
LVa:
Gui,1:Submit,nohide
if A_GuiEvent = Normal
  {
  LV_GetText(C1,A_EventInfo,1)
  LV_GetText(C2,A_EventInfo,2)
  cx=%c1%;%c2%
  RN:=LV_GetNext("C")
  RF:=LV_GetNext("F")
  GC:=LV_GetCount()
  }

if A_GuiEvent = Rightclick
  {
  LV_GetText(C1,A_EventInfo,1)
  LV_GetText(C2,A_EventInfo,2)
  cx=%c1%;%c2%
  RN:=LV_GetNext("C")
  RF:=LV_GetNext("F")
  GC:=LV_GetCount()
  goto,menux 
  }
return  
;----------------------------

;------------- MENU when rightclick on row ----------
menux:
MouseGetPos, musX, musY
Menu, CMenu, Show, %musX%,%musY%
return
menudo:
If (A_ThisMenuItem = "Eliminar")
   gosub,Eliminarx2
If (A_ThisMenuItem = "Editar")
   gosub,Editarx
return
;-------------------------------
Limpa:                                                      ; Limpar
Gui, submit, nohide                                                  ; Limpa os dados do campo

return
;--------------------------------
Eliminarx2:
Gui,1:default
gui,1:listview,LV1
   if RF=0
      return
   LV_GetText(C1, RF, 1)
   LV_GetText(C2, RF, 2)
   CT=%c1%;%c2%
   msgbox, 262180,DELETE ,Tem a certeza que deseja eliminar: %C1% ?
   IfMsgBox,No
      Return
   LV_Delete(RF)
      FileRead,AA,%F1%
      Filedelete,%F1%
      StringReplace,BB,AA,%ct%`r`n,,
      FileAppend,%BB%,%F1%
return	  

;--------------- DELETE multiple selected rows --------------
Eliminarx:
C1 =
RF = 0
RFL =
Loop
   {
   RF:=LV_GetNext(RF)
   if RF=0
      break
   RFL = %RF%|%RFL%
   LV_GetText(C1_Temp, RF, 1)
   C1 = %C1%`n%C1_Temp%
  }
if C1 !=
 {
   msgbox, 262180,DELETE , Tem a certeza que deseja eliminar: %C1% ?
   IfMsgBox,No
      Return
   Else
   {
      Loop, parse, RFL, |
       LV_Delete(A_LoopField)
     filedelete,%F1%
     Loop % LV_GetCount()
        {
        BX1=
        BX2=
        LV_GetText(BX1,A_INDEX,1)
        LV_GetText(BX2,A_INDEX,2)
        fileappend,%BX1%`;%BX2%`r`n,%F1%
       }
   }
      C1=
      C2=
 }
return

;--------------- modify ----------------
Editarx:
Gui,1:submit,nohide
Gui,3:Font,  S13 CBlack , Lucida Console
Gui,3:Add,Text   ,  x10   y5  w80     ,  Nome: 
Gui,3:Add,Edit   ,  x65  y5  w255 h20 vA31, %C1%
Gui,3:Add,Text   ,  x12   y40 w80     , Contacto: 
Gui,3:Add,Edit   ,  x108 y40 w120 h20 vA32, %C2%
Gui,3:Add, Button,  x280 y35 w40  h27, OK
Gui,3:Show, x1470 y1000 w335 h70, Dados pessoais
GuiControl,3:Focus,A31
send,^{end}
return
;--------
3GuiClose:
3GuiEscape:
Gui, 3:Destroy
return
3ButtonOK:
Gui,3:submit
if A31=
   {
   Gui,3: Destroy
   return
   }
FileRead, FileContent, %f1%
FileDelete, %f1%
StringReplace, FileContent, FileContent, %C1%`;%C2%, %A31%`;%A32%
FileAppend, %FileContent%, %f1%
GoSub,fill
Gui,3:destroy
return
;----------------------------------------------------------

;------------------- SEARCH -------------------------------
Find:
Gui,1: Submit, Nohide
Gui,1:listview, LV1
checkempty:
if (src="")
   {
   settimer,checkempty,off
   goto,fill
   return
   }
settimer,checkempty,1000

LV_Delete()
  loop,read,%f1%
  {
  LR=%A_loopReadLine%
  if SRC<>
     {
     if LR contains %src%
       {
       stringsplit,C,A_LoopReadLine,`;
       LV_Add("",C1,C2)
       }
     }
  else
   continue
   }
LV_Modify(LV_GetCount(), "Vis")
if (SRC="")
  goto,Fill
return
;------------------------------------------------------

;--------------- create testfile ----------------------
testfile:
ifnotexist,%f1%
{
  e1=
  (Ltrim Join`r`n
  
  )
Fileappend,%e1%`r`n,%f1%
e1=
}
return
;============ END script ====================================
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…! :superhappy:
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Ajuda com ListView

15 Oct 2018, 11:09

Bom dia JudeuJedi.

Seja bem-vindo ao fórum da comunidade do AutoHotkey.
Estou iniciando no AHK. Li os tutoriais do GIO, excelentes aliás.
Obrigado, fico feliz que tenham ajudado :thumbup:
1) O botão excluir deve retirar da ListView o item selecionado. O comando LV_Delete() apaga todas as linhas se estiver em branco "()". Mas, não está fazendo isso por que?
Lv_Delete() é uma função. Os parêntesis devem estar posicionados logo após o nome de uma função e sem espaços em branco entre eles.

Além disso, se a função Lv_Delete() for chamada sem nenhum parâmetro, ela vai deletar todo o conteúdo da listview, e não somente as linhas em branco. Para deletar as linhas em branco, você teria que fazer várias chamadas à função Lv_Delete(), passando o número das linhas que devem ser deletada uma a uma, pois este é o parâmetro que esta função aceita (número da coluna a deletar).

Isso significa então que, para deletar somente as linhas em branco, você deve fazer um loop percorrer todas as linhas uma a uma, checando através de uma condicional o conteúdo da linha (vendo se está vazia) e depois direcionando um Lv_Delete() com o número daquela linha se (e somente se) o conteúdo da linha da checagem atual do loop estiver em branco.

Veja o que fiz dentro da label LABEL_BOTAO_EXCLUIR no código abaixo.

Code: Select all

Gui, add, ListView, x42 y100 w160  h250, PESQUISADOS
Gui, add, Text, x42 y10, NUMERO DO PROCESSO
Gui, Add, Edit, x42 y25 w160 h20 vCAMPO_NUMERO_DO_PROCESSO
Gui, Add, Button, x210 y23 w75 h25 gLABEL_BOTAO_PESQUISAR, PESQUISAR
Gui, Add, Button, x210 y53 w75 h25 gLABEL_BOTAO_LIMPAR, LIMPAR
Gui, add, Text, x210 y120, LANÇAR NUMEROS DE PROCESSOS?
Gui, Add, Button, x355 y133 w50 h25 , SIM 
Gui, add, Text, x210 y260, EXCLUIR PROCESSO
Gui, Add, Button, x210 y273 w100 h25 gLABEL_BOTAO_EXCLUIR, EXCLUIR
Gui, Show, w430 h400, Pesquisa de RPV
Run www.google.com.br
Sleep 300
WinActivate Pesquisa de RPV
Return


ESC:: 
ExitApp
Return 

GuiClose:
ExitApp
Return


;================================================================================================================================================
;__________________________________________________________________LABEL's_______________________________________________________________________
;================================================================================================================================================

LABEL_BOTAO_PESQUISAR:
Gui, submit, nohide
Lv_Add("", CAMPO_NUMERO_DO_PROCESSO)
/*
; COMENTEI ESSAS LINHAS SOMENTE PARA FACILITAR O DESENVOLVIMENTO.
Run, https://processual.trf1.jus.br/consultaProcessual/processoOriginario/listar.php?secao=TRF1&opTrf=pOrig&proc=%CAMPO_NUMERO_DO_PROCESSO%&uf=RO&enviar=Ok#
#IfWinActive ahk_class Chrome_WidgetWin_1
Sleep, 500
Send, {CTRLDOWN}{u}{CTRLUP}
Sleep 500
Send, {TAB 31}
Sleep 100
Send, {ENTER}
Sleep 500
Send, {TAB 26}
Sleep 100
Send, {ENTER}
*/
Return

LABEL_BOTAO_LIMPAR:
WinActivate ahk_class Chrome_WidgetWin_1
#IfWinActive ahk_class Chrome_WidgetWin_1
Sleep 300
Loop, 3
{
	Sleep 100
	SEND, {CTRLDOWN}{w}{CTRLUP}
}
WinActivate Pesquisa de RPV
return

LABEL_BOTAO_EXCLUIR:
ControlGet, DADOS_DA_LISTVIEW, List,, SysListView321, Pesquisa de RPV
; MSGBOX % DADOS_DA_LISTVIEW ; ESTA LINHA SERVIU PARA DEBUGGING DURANTE O DESENVOLVIMENTO DA ROTINA (PARA VER SE O COMANDO ACIMA ESTAVA GRAVANDO MESMO OS DADOS DA LISTVIEW NA VARIÁVEL).
StringSplit, LINHAS_DA_LISTVIEW_, DADOS_DA_LISTVIEW, `n
Loop % LINHAS_DA_LISTVIEW_0
{
	If (LINHAS_DA_LISTVIEW_%A_Index% = "")
	{
		Lv_Delete(A_Index)
	}
}
return
2) O botão SIM eu precisarei fazer o aplicativo ler a ListView, selecionar a primeira linha, ctrl+c, alt+tab, ctrl+v, enter e então passar para a segunda linha e assim até terminar a ListView. Muita coisa neste item :crazy: , mas se puderem deixar os comandos eu já terei de onde partir. :D
Bom, essa pergunta acredito que a resposta da de cima já te deu um norte. Basicamente, usamos o comando ControlGet com o parâmetro cmd List para recuperar o conteúdo inteiro da listview. Como resultado desse comando, o conteúdo da listview vem separando as linhas através de um linefeed `n. Assim, podemos usar um StringSplit para individualizar as linhas e aí tratar cada linha conforme seja o caso.

:arrow: Veja que o comando StringSplit vai criar uma array (sequencia de veriáveis enumeradas) onde o número de separações será colocado em Variavel0 e daí em diante os números das variáveis serão a primeira separação, a segunda e etc. (por exemplo, Variavel1 conterá o conteúdo da primeira linha caso eu tenha separado pelo linefeed, Variavel2 conterá o da segunda linha, e etc). O caractere de linefeed é referenciado dentro de literais do AutoHotkey usando o símbolo `n.

Se ainda tiver mais dúvidas, sinta-se livre para postar abaixo ou criar um novo tópico :beer:
judeujedi
Posts: 2
Joined: 14 Oct 2018, 07:05

Re: Ajuda com ListView

17 Oct 2018, 17:33

Oi, pessoal, desculpa a demora na resposta. Confundi os comando e acabei não enviando a resposta rs. Erro de noob.

Muito obrigado pela ajuda. Vou analisar os códigos e pesquisar os novos conceitos que o Gio me apresentou.

Brigaduuuuu!

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 16 guests