LYSTVIEW: Doubleclick numa linha - Ação (Menu Editar)

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

Moderator: Gio

User avatar
Ria
Posts: 23
Joined: 03 Sep 2018, 17:54

LYSTVIEW: Doubleclick numa linha - Ação (Menu Editar)

31 Oct 2018, 13:34

Boa tarde,
Desde já agradeço aos cracks na matéria…!
Solicito ajuda para o seguinte evento:

- Ao fazer doubleclick numa determinada linha da listview, abrirá a mesma janela que corresponde ao editar (click direito mouse em uma linha), portanto, a ação a fazer, deduzo que será um gosub para este bloco de código:

;--------------- modify ----------------
Editarx:
Gui,1:submit,nohide ; Mantém a janela 1
Gui,3: Color, +A9A9A9 ; Cor do backround Alterar
Gui,3:Font, s8 cBlack, Tahoma
Gui,3:Add,Text , x210 y8 w20, ID:
Gui,3:Add,Edit , x210 y23 w50 h18
Gui,3:Add,Text , x10 y8 w90, Matrícula:
Gui,3:Add,Edit, x10 y23 w60 h18 vA32, %C2%
Gui,3:Add,Text , x10 y45 w80, Proprietário:
Gui,3:Add,Edit , x10 y60 w250 h18 vA31, %C3%
Gui, 3:Add, text, x10 y85 w195, Informações complementares:
Gui, 3:Add, Edit, x10 y100 w250 h45, %C4%
Gui,3:Add, Button, x35 y155 w90 h21 gCancelar, &Cancelar
Gui,3:Add, Button, x140 y155 w90 h21, Alterar
Gui,3:Show, x1490 y885 w270 h200, ALTERAR:
Gui, 3:Add, StatusBar,, Created by %creator% %versão% ; Dia.Rev.Ano.Mês
GuiControl,3:Focus,A31
send,^{end}
return
;-------------
Cancelar: ; Botão Cancelar da Gui 3
gui, 3: destroy
return


CÓDIGO ATUAL COMPLETO (Para melhor percepção):
#warn
;
; ************** Versão/ Revisão
versão = Rev. 27.1.6.2018.10
creator = AHK BR-PT@2018
; *******************************
;
REPOSITORIO_DE_ORDEM := 1 ; INICIAMOS EM 1

setworkingdir,%a_scriptdir%
F1=%A_scriptdir%\Registo.txt
MainWindowTitle=ListView_Test1
transform,T,chr,09
Gui,1:default
gosub,testfile
Gui Add, StatusBar,, Created by %creator% %versão% ; Dia.Rev.Ano.Mês
Gui Color, +A9A9A9 ; Cor do backround 2
Gui, Font, s8 cBlack, Tahoma
Gui Add, GroupBox, cBlue x12 y5 w245 h143, BASE DE DADOS:
Gui, add, ListView, x20 y20 h120 w230 gLVa vLV1 +altsubmit , ID: | Matricula: | Proprietário: |Informações Complementares: | Processo: ; AQUI ADICIONAMOS A COLUNA INFORMACOES COMPLEMENTARES
Lv_ModifyCol(1, 25)
Lv_ModifyCol(2, 60)
gosub,fill
Gui, Add, text, x20 y152 w80 h20, Pesquisar:
Gui, Add, Edit, x20 y166 w85 h22 gFind vSrc,
Gui, Add, Button,x115 y165 w134 h22 gEliminarx, Eliminar selecionados(as)
Gui Add, GroupBox, -cBlue x12 y192 w245 h148, REGISTO:
Gui, add, Text, x20 y205, Matricula: ; Matrícula
Gui, Add, Edit, x20 y220 w60 h21 vNOME,
Gui, add, text, x90 y205, Proprietário: ; Proprietário
Gui, add, Edit, x90 y220 w160 h21 vFONE,
Gui, Add, text, x20 y244 w195 h20, Informações complementares: ; ADICIONAMOS A GROUPBOX
Gui, Add, Edit, vINFORM_COMPL x20 y259 w230 h30 ; ADICONAMOS O CAMPO DE INFORMAÇOES COMPLEMENTARES
Gui, Add, Button,x20 y304 w55 h24 gAdd , Guardar
Gui, Add, Button,x80 y304 w55 h24 gLimpa, Limpar
Gui, Add, text, x152 y292 w100 h20, Processo:
Gui, Add, Edit, x152 y307 w50 h20 vNPP, Inativo! ;NPP
Gui, Add, text, x206 y309 w20 h21, /
Gui, Add, Edit, x214 y307 w36 h20, ------ ;Ano
Gui, show, w267 h368, BASE DE DADOS ; ATUALIZARMOS ESTA LINHA PARA QUE A TELA TENHA UM TAMANHO QUE COMPORTE O NOVO CAMPO
Menu, CMenu, Add, Eliminar, menuDo
Menu, CMenu, Add, Editar , menuDo
Return
; -------------------------------------------
Add:
Gui, submit, nohide
Fileappend,%nome%`;%fone%`;%INFORM_COMPL%`r`n,%f1% ; LINHA ATUALIZADA COM AS INFORMACOES COMPLEMENTARES.
gosub,fill
sleep,1500
GuiControl,1:,fone,
GuiControl,1:,nome,
GuiControl,1:,INFORM_COMPL,
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 =
C3 =
stringsplit,C,LR,`;,
LV_Add("", A_Index, c1,c2, c3) ; LINHA TUALIZADA COM O C3 (INFORMACOES COMPLEMENTARES).
}
LV_ModifyCol(1, "Sort CaseLocale")
LV_Modify(LV_GetCount(), "Vis")
return
;----------------------------------------

;----------- Listview click on row -------
LVa:
Gui,1:Submit,nohide
if A_GuiEvent = Normal
{
LV_GetText(C2,A_EventInfo,2) ; LINHAS ATUALIZADAS
LV_GetText(C3,A_EventInfo,3) ; LINHAS ATUALIZADAS
LV_GetText(C4,A_EventInfo,4) ; LINHAS ATUALIZADAS
cx=%c2%;%c3%;%c4% ; LINHAS ATUALIZADAS
RN:=LV_GetNext("C")
RF:=LV_GetNext("F")
GC:=LV_GetCount()
}

if A_GuiEvent = Rightclick
{
LV_GetText(C2,A_EventInfo,2) ; LINHAS ATUALIZADAS
LV_GetText(C3,A_EventInfo,3) ; LINHAS ATUALIZADAS
LV_GetText(C4,A_EventInfo,4) ; LINHAS ATUALIZADAS
cx=%c2%;%c3%;%c4%
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:
Gui, submit, nohide ; Limpa os dados do campo
GuiControl,1:,fone,
GuiControl,1:,nome,
GuiControl,1:,INFORM_COMPL,
GuiControl,1:,Src,
return
;--------------------------------
Eliminarx2:
Gui,1:default
gui,1:listview,LV1
if RF=0
return
;LV_GetText(C1, RF, 1)
LV_GetText(C2, RF, 2)
LV_GetText(C3, RF, 2)
LV_GetText(C4, RF, 2)
CT=%c2%;%C3%;%C4% ; LINHA TUALIZADA COM O C3 (INFORMACOES COMPLEMENTARES).
msgbox, 262180, APAGAR ,Tem a certeza que deseja eliminar a(s) linha(s) selecionada(s)? ;: %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:
;Gui, 2: Add, Text, x20 y20, Esta é a GUI 2!! ; ADICIONADO AQUI SOMENTE PARA EFEITO DIDATICO !!
;Gui, 2: Show, w500 h600 ; ADICIONADO AQUI SOMENTE PARA EFEITO DIDATICO !!
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, APAGAR , Tem a certeza que deseja eliminar a(s) linha(s) selecionada(s)? ;: %C1% ?
IfMsgBox,No
Return
Else
{
Loop, parse, RFL, |
LV_Delete(A_LoopField)
filedelete,%F1%
Loop % LV_GetCount()
{
BX1=
BX2=
LV_GetText(BX2,A_INDEX,2) ; LINHA ATUALIZADA
LV_GetText(BX3,A_INDEX,3) ; LINHA ATUALIZADA
LV_GetText(BX4,A_INDEX,4) ; LINHA ATUALIZADA
fileappend,%BX2%`;%BX3%`;%BX4%`r`n,%F1%
}
}
C1=
C2=
}
return

;--------------- modify ----------------
Editarx:
Gui,1:submit,nohide ; Mantém a janela 1
Gui,3: Color, +A9A9A9 ; Cor do backround Alterar
Gui,3:Font, s8 cBlack, Tahoma
Gui,3:Add,Text , x210 y8 w20, ID:
Gui,3:Add,Edit , x210 y23 w50 h18
Gui,3:Add,Text , x10 y8 w90, Matrícula:
Gui,3:Add,Edit, x10 y23 w60 h18 vA32, %C2%
Gui,3:Add,Text , x10 y45 w80, Proprietário:
Gui,3:Add,Edit , x10 y60 w250 h18 vA31, %C3%
Gui, 3:Add, text, x10 y85 w195, Informações complementares:
Gui, 3:Add, Edit, x10 y100 w250 h45, %C4%
Gui,3:Add, Button, x35 y155 w90 h21 gCancelar, &Cancelar
Gui,3:Add, Button, x140 y155 w90 h21, Alterar
Gui,3:Show, x1490 y885 w270 h200, ALTERAR:
Gui, 3:Add, StatusBar,, Created by %creator% %versão% ; Dia.Rev.Ano.Mês
GuiControl,3:Focus,A31
send,^{end}
return
;-------------
Cancelar: ; Botão Cancelar da Gui 3
gui, 3: destroy
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("",A_index, C1,C2, C3) ; LINHA TUALIZADA COM O C3 (INFORMACOES COMPLEMENTARES).
}
}
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: LYSTVIEW: Doubleclick numa linha - Ação (Menu Editar)

01 Nov 2018, 09:51

Bom dia Ria.
- Ao fazer doubleclick numa determinada linha da listview, abrirá a mesma janela que corresponde ao editar (click direito mouse em uma linha), portanto, a ação a fazer, deduzo que será um gosub para este bloco de código:
Você deduziu corretamente. Basta adicionar na lista dos eventos da rotina LVa o que deve ocorrer em caso de doubleclick.
LVa:
Gui,1:Submit,nohide
if A_GuiEvent = Normal
{
LV_GetText(C2,A_EventInfo,2) ; LINHAS ATUALIZADAS
LV_GetText(C3,A_EventInfo,3) ; LINHAS ATUALIZADAS
LV_GetText(C4,A_EventInfo,4) ; LINHAS ATUALIZADAS
cx=%c2%;%c3%;%c4% ; LINHAS ATUALIZADAS
RN:=LV_GetNext("C")
RF:=LV_GetNext("F")
GC:=LV_GetCount()
}

if A_GuiEvent = Rightclick
{
LV_GetText(C2,A_EventInfo,2) ; LINHAS ATUALIZADAS
LV_GetText(C3,A_EventInfo,3) ; LINHAS ATUALIZADAS
LV_GetText(C4,A_EventInfo,4) ; LINHAS ATUALIZADAS
cx=%c2%;%c3%;%c4%
RN:=LV_GetNext("C")
RF:=LV_GetNext("F")
GC:=LV_GetCount()
goto,menux
}

if A_GuiEvent = DoubleClick
goto,editarx
User avatar
Ria
Posts: 23
Joined: 03 Sep 2018, 17:54

Re: LYSTVIEW: Doubleclick numa linha - Ação (Menu Editar)

01 Nov 2018, 15:58

Entendi, obrigado!
Na verdade eu tinha tentado esse comando, por questão de lógica, mas agora reparei que meu erro era o "return"....
Estava exatamente antes do if e o doubleclick não funcionava dessa forma…
Tudo certo agora com o return após o evento! :superhappy:
goto,menux
}
return ; Local ERRADO…!
;----------------------------
if A_GuiEvent = DoubleClick
goto,editarx
return ; Local CERTO...!
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…! :superhappy:

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 24 guests