Bom dia Ria.
Peço que não acumule muitas perguntas em um único tópico, pois fica difícil e confuso responder tudo de uma vez. Quando a dúvida surgir, poste-a em um novo tópico com título próprio e vamos resolvendo uma a uma em cada tópico respectivo para que possamos deixar tudo mais organizado. Não se preocupe em ter de criar 4 ou 5 tópicos, desde que as dúvidas sejam diferentes (mesmo que seja todas sobre GUIs ou outro assunto)
Fazer um campo (coluna) de numeração (ID inativo e automatico) das linhas da listView, ordenando-as…
Como o script está puxando os dados de um arquivo e adicionando ele na listview através de um loop, o número de ordem pode ser adicionado simplesmente usando a variável embutida A_Index, que contém a iteração atual do loop (Assim, na primeira iteração, que corresponde à primeira linha, conterá 1, na segunda conterá 2, etc).
É claro que para isso precisamos criar uma nova coluna no listview, o que fazemos adicionando o nome antes de um pipe
| nas configurações do comando que implementa a listview.
Veja no código abaixo como uso o A_Index no loops das rotinas Fill e Find para colocar um número de ordem:
Code: Select all
#warn
setworkingdir,%a_scriptdir%
F1=%A_scriptdir%\PT_adress.txt
MainWindowTitle=ListView_Test1
transform,T,chr,09
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 , Ordem|Nome|Telefone ; AQUI ADICIONAMOS A COLUNA ORDEM.
Lv_ModifyCol(1, 130)
Lv_ModifyCol(2, 60)
gosub,fill
Gui, add, text, x20 y240, Telefone:
Gui, add, Edit, x20 y255 w100 h20 vFONE,
Gui, Add, Button,x12 y155 w215 h20 gEliminarx, Eliminar selecionados(as)
Gui Add, GroupBox, -cBlue x12 y185 w215 h100, REGISTO:
Gui, add, Text, x20 y200, Nome:
Gui, Add, Edit, x20 y215 w120 h20 vNOME,
Gui, Add, Button,x160 y215 w60 h20 gAdd , Guardar
Gui, Add, Button,x160 y255 w60 h20 gLimpa , Limpar
Gui Add, GroupBox, cBlue x12 y290 w215 h45, PESQUISAR:
Gui, Add, Edit, x20 y305 w200 h22 gFind vSrc,
Gui, +Alwaysontop
Gui, show, w240 h350, LISTA TELEFÓNICA
Menu, CMenu, Add, Eliminar, menuDo
Menu, CMenu, Add, Editar , menuDo
Return
Add:
Gui, submit, nohide
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("", A_Index, c1,c2)
}
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(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:
Gui, submit, nohide
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("",A_index, C1,C2) ; USEI O A_INDEX AQUI TAMBÉM.
}
}
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 ====================================
Importante observar no entanto, que como estamos a colocar os números de ordem através da ordem do prório loop usando A_Index, esta ordem pode não corresponder exatamente à ordem na qual os cadastros foram incuídos (por exemplo, se você excluir uma linha do arquivo, as ordem serão atualizadas, de modo que um registro não tem uma ordem fixa).
Se você quiser implementar um ordenador fixo que simbolize a ordem na qual os registros foram incluídos (e não a ordem das linhas no arquivo), a maneira de fazer é salvar os dados da ordem no próprio arquivo, e depois simplesmente ler a maior ordem atual para poder adicionar +1 quando for salvar um novo registro.
Se precisar de ajuda para implementar o que disse no parágrafo acima, é só dizer.
2) Associar a cada campo inserido (NOME / TELEFONE), um outro item de informações complementares,
para edição aquando da inserção de dados de forma a aparecer em simultaneo aquando da pesquisa e que
tenha portanto algumas linhas de informação extra e mais facilmente legíveis numa EDIT BOX;
Esse item é fácil, porém trabalhoso. Você vai ter que aumentar a área da tela (as opções
w e
h que vêm depois do comando
Gui, Show) e depois adicionar o novo campo com o comando
Gui, Add, Edit em uma linha antes do comando
Gui, show. Depois, terá de configurar a v-Variável para guardar a informação do campo adequadamente e usar essa nova informação em todas as rotinas do script (ou seja, terá que atualizar todas as rotinas para tratar esta nova informação em conjunto com as demais. Como vocêjá tem um template de código, fica mais fácil: onde houver tratamento das informações do campo nome, você vai adicionar uma linha semelhante para tratamento do campo de informações complementares).
Fiz um esboço da atualização no código abaixo, mas pode ser que haja alguma linha a atualizar:
Code: Select all
#warn
REPOSITORIO_DE_ORDEM := 1 ; INICIAMOS EM 1
setworkingdir,%a_scriptdir%
F1=%A_scriptdir%\PT_adress.txt
MainWindowTitle=ListView_Test1
transform,T,chr,09
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 , Ordem|Nome|Telefone|Informações Complementares ; AQUI ADICIONAMSO A COLUNA INFORMACOES COMPLEMENTARES
Lv_ModifyCol(1, 130)
Lv_ModifyCol(2, 60)
gosub,fill
Gui, add, text, x20 y240, Telefone:
Gui, add, Edit, x20 y255 w100 h20 vFONE,
Gui, Add, Button,x12 y155 w215 h20 gEliminarx, Eliminar selecionados(as)
Gui Add, GroupBox, -cBlue x12 y185 w215 h100, REGISTO:
Gui, add, Text, x20 y200, Nome:
Gui, Add, Edit, x20 y215 w120 h20 vNOME,
Gui, Add, Button,x160 y215 w60 h20 gAdd , Guardar
Gui, Add, Button,x160 y255 w60 h20 gLimpa , Limpar
Gui Add, GroupBox, cBlue x12 y290 w215 h45, PESQUISAR:
Gui, Add, Edit, x20 y305 w200 h22 gFind vSrc,
Gui, +Alwaysontop
Gui, Add, Groupbox, x239 y5 w195 h140, INFORM. COMPL. ; ADICIONAMOS A GROUPBOX
Gui, Add, Edit, vINFORM_COMPL x247 y20 w180 h120 ; ADICONAMOS O CAMPO DE INFORMAÇOES COMPLEMENTARES
Gui, show, w440 h350, LISTA TELEFÓNICA ; 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,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 =
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
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,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(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
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("",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 ====================================
3) É possivel... e se afirmativo, como se faz uma mascara nas caixas de texto, por
exemplo para inserir dados/identificar um processo:
Você pode fazer isso de várias formas. A mais simples é separar a informação do número do processo em vários campos, e depois tratar cada parte nas suas particularidades. Por exemplo, o campo do ano é necessariamente um número e tem que ter necessariamente 4 dígitos. Assim, você impor um
limit4 nas opções do campo e também uma opção
Number.
O autohotkey tem condicionais que verificam situações simples, como por exemplo, se o conteúdo da variável é um número realmente (
If var is number). A mesma condicional pode verificar se o valor na variável contém apenas letras com
If Var is Alpha. Essas condicionais podem ajudar na parte da verificação do que foi inserido pelo usuário.
Outra forma de fazer é realmente implementar uma máscara em um campo só. Isso seria um pouco mais complexo, mas pode ser feito. Veja que no número do processo as partes possuem ordem fixa. Assim, o ano costuma iniciar na posição 12 (considerando os pontos e traços) ou na posição 10 (sem considerar os pontos e traços) e sempre tem um tamanho de 4 dígitos. Dessa forma, a função embutida
SubStr() pode ser usada para isolar o ano de dentro do conteúdo da variável. Para direcionar a ação a ser executada somente após o usuário digitar uma quantidade de números, você também pode usar uma condicionar atrelada à função embutida
StrLen().
Você também pode implementar (ou não) uma quantidade de truques enorme conforme a sua criatividade. Um exemplo é mandar um backspace para o campo se o usuário escrever algo errado. Isso é possível com o comando
ControlSend, que poderá ser ativado através da g-label do próprio campo após uma condicional se interpretação que verifique se o caractere cria um erro no valor ou não. Alguns formulários fazem isso para impedir o usuário de digitar coisas inesperadas (por exemplo, números em posições que esperam letras ou vice-versa).
5) Inserir mais um botão, do tipo consulta, em que o evento seria:
- Mostrar dados numa GUI à parte, dando informação sobre o nº da linha da listView, ex:(ID:1),
o nome, o telefone, E OUTROS DADOS QUE PODERIAM SER ACRESCENTADOS em mais colunas na ListView MAS
que só pudessem ser apresentados desta forma (GUI separada, de consulta). Sim, para isso terei de modificar também o Registo e colocar outros campos...;
Para criar uma segunda GUI, basta adicionar ou número ou nome que a defina seguido de dois pontos e a partir daí, colocar todos os comandos de GUI relativos à ela com o número ou nome definidor. Você pode colocar isso para ser efetuado através do gatilho de um botão configurando diretamente na g-label do botão.
Por exemplo, o código abaixo abre uma gui 2 com um texto próprio quando você aciona o botão
eliminar selecionados(as). Para ver o código correspondente, basta ver o que escrevi na label
eliminarx.
Code: Select all
#warn
REPOSITORIO_DE_ORDEM := 1 ; INICIAMOS EM 1
setworkingdir,%a_scriptdir%
F1=%A_scriptdir%\PT_adress.txt
MainWindowTitle=ListView_Test1
transform,T,chr,09
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 , Ordem|Nome|Telefone|Informações Complementares ; AQUI ADICIONAMSO A COLUNA INFORMACOES COMPLEMENTARES
Lv_ModifyCol(1, 130)
Lv_ModifyCol(2, 60)
gosub,fill
Gui, add, text, x20 y240, Telefone:
Gui, add, Edit, x20 y255 w100 h20 vFONE,
Gui, Add, Button,x12 y155 w215 h20 gEliminarx, Eliminar selecionados(as)
Gui Add, GroupBox, -cBlue x12 y185 w215 h100, REGISTO:
Gui, add, Text, x20 y200, Nome:
Gui, Add, Edit, x20 y215 w120 h20 vNOME,
Gui, Add, Button,x160 y215 w60 h20 gAdd , Guardar
Gui, Add, Button,x160 y255 w60 h20 gLimpa , Limpar
Gui Add, GroupBox, cBlue x12 y290 w215 h45, PESQUISAR:
Gui, Add, Edit, x20 y305 w200 h22 gFind vSrc,
Gui, +Alwaysontop
Gui, Add, Groupbox, x239 y5 w195 h140, INFORM. COMPL. ; ADICIONAMOS A GROUPBOX
Gui, Add, Edit, vINFORM_COMPL x247 y20 w180 h120 ; ADICONAMOS O CAMPO DE INFORMAÇOES COMPLEMENTARES
Gui, show, w440 h350, LISTA TELEFÓNICA ; 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,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 =
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
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,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:
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,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(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
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("",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 ====================================