MASCARA (Numeros, letras, caracteres) em caixa de Texto

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

Moderator: Gio

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

MASCARA (Numeros, letras, caracteres) em caixa de Texto

05 Oct 2018, 12:08

Olá,
Alguém me pode indicar onde pesquiso documentação AutoHotKey em concreto ou me dá uma ajudinha no sentido de resolução dos seguintes problemas (?):

1) Fazer um campo (coluna) de numeração (ID inativo e automatico) das linhas da listView, ordenando-as…

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;

3) É possivel... e se afirmativo, como se faz uma mascara nas caixas de texto, por
exemplo para inserir dados/identificar um processo:

NNNNNNN / NNNNNN ou... xx-xx ou.... NNN / NN . N LLL

Em que "N" são numeros, os "xx" do segundo exemplo poderão ser letras maiúsculas ou numeros, MAS com
um MÁXIMO de 2 letras e, no ultimo exemplo "N" são numeros, "L" são letras maiúsculas exclusivamente.
Queria que os "/", "-" e " " (Espaço) já aparecessem por defeito claro;

4) - RESOLVIDO..! Obrigado garry Adicionei também um botão "Limpar", está no código mas não completo, em que o objetivo era, exclusivamente, em caso de engano, LIMPAR o que pudesse estar escrito/digitado dentro das caixas de texto "Nome" e "Telefone. Tentei o LV_Delete() mas não consegui..."; - RESOLVIDO..! Obrigado garry

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...;

Muito Obrigado
Algo disponham,
Cumprimentos

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 ====================================
Last edited by Ria on 06 Oct 2018, 17:17, edited 4 times in total.
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…! :superhappy:
garry
Posts: 3738
Joined: 22 Dec 2013, 12:50

Re: MASCARA (Numeros, letras, caracteres) em caixa de Texto

06 Oct 2018, 01:20

4- Limpa os dados do campo
( Eu devo procurar pelas crianças nos próximos dez dias , não tenho tempo ... )

Code: Select all

Limpa:                                                      ; Limpar
Gui, submit, nohide                                         ; Limpa os dados do campo
GuiControl,1:,fone,
GuiControl,1:,nome,
return
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: MASCARA (Numeros, letras, caracteres) em caixa de Texto

15 Oct 2018, 10:35

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) :thumbup:
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 ====================================
:arrow: 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().

:arrow: 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 ====================================
User avatar
Ria
Posts: 23
Joined: 03 Sep 2018, 17:54

Re: MASCARA (Numeros, letras, caracteres) em caixa de Texto

22 Oct 2018, 16:54

Olá,
Mais uma vez obrigado a todos,
Gio, vou ter isso em conta futuramente, mas às vezes torna-se difícil fazer desse jeito.

Nova dúvida:
Alguém sabe porque é que os botões GUARDAR e LIMPAR "desaparecem" e só aparecem quando o rato passa por cima?

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 Add, StatusBar,,   Rev.22.1.0.2018.10 ; 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, DADOS: 
Gui, add, ListView, x20 y20 h120 w230 gLVa vLV1 +altsubmit , ID: |Matricula: |Proprietário: |Informações Complementares: ; AQUI ADICIONAMOS A COLUNA INFORMACOES COMPLEMENTARES
Lv_ModifyCol(1, 25)                                     
Lv_ModifyCol(2, 60)                                            
gosub,fill
Gui, add, text,  x87  y192, Proprietário:                              
Gui, add, Edit,  x87  y207 w162 h20 vFONE,               
Gui, Add, Button,x60  y155 w150 h20 gEliminarx, Eliminar selecionados(as)  
Gui Add, GroupBox, -cBlue x12 y177 w245 h135, REGISTO: 
Gui, add, Text,  x20  y192, Matricula:                            
Gui, Add, Edit,  x20  y207 w60 h20 vNOME,                             
Gui, Add, Button,x62 y286 w70  h20 gAdd , Guardar               
Gui, Add, Button,x143 y286 w70  h20 gLimpa, Limpar           
Gui Add, GroupBox, cBlue x12 y317 w100 h45, PESQUISAR:
Gui, Add, Edit,  x20  y332 w83 h22 gFind vSrc,            
Gui, Add, text, x20 y232 w195 h70, Informações complementares:  ; ADICIONAMOS A GROUPBOX
Gui, Add, Edit,  vINFORM_COMPL x20 y247 w230 h30 ; ADICONAMOS O CAMPO DE INFORMAÇOES COMPLEMENTARES
Gui, show, w267 h388, 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,1000
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,
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) Matrícula(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) Matrícula(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
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 ====================================
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…! :superhappy:
User avatar
Ria
Posts: 23
Joined: 03 Sep 2018, 17:54

Re: MASCARA (Numeros, letras, caracteres) em caixa de Texto

22 Oct 2018, 17:32

Resolvido...
Era o valor da altura "h" desta linha abaixo.
Obrigado

Code: Select all

Gui, Add, text, x20 y232 w195 h20, Informações complementares:  ; ADICIONAMOS A GROUPBOX
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: MASCARA (Numeros, letras, caracteres) em caixa de Texto

23 Oct 2018, 08:17

Os controles de uma janela (incluindo botões, campos de texto, groupbox, imagens, etc) são desenhados na tela pelo sistema operacional. Uma coisa muito importante sobre esse desenho é que ele ocorre na ordem em que os comandos são chamados. Como as linhas do script são executadas de cima para baixo em uma mesma rotina, você pode controlar a ordem do desenho alterando a ordem das linhas dos comandos.

No caso do código que você postou, veja que o comando que cria o texto informações complementares está algumas linhas abaixo dos comandos que criam os botões. Isso significa que o texto informações complementares está sendo desenhado após os botões, e como a área atribuída ao texto pelas opções x, y, w e h entra na área definida para os botões pelas opções x,y,w e h deles, você acaba tendo que o controle de texto está sendo desenhado sobre os botões que já estavam desenhados.

Assim, se você quiser, você também pode simplesmente alterar a ordem das linhas para desenhar os botões sobre o campo de texto e ter eles visíveis logo que a tela seja exibida. Mas embora isso aparentemente funcione, a melhor solução é mesmo a que você mesmo encontrou: alterar os valores de x, y, w e h dos controles para que nenhum seja desenhado sobre o outro. Isso ocorre porque mesmo que você possa desenhar controles um sobre o outro, esse tipo de situação pode ocasionar bugs, pois os controles são ativados em momentos distintos. Um exemplo disso é o bug que você relatou: ao passar o mouse sobre os botões, eles "aparecem", mesmo estando desenhados originalmente embaixo do campo de texto.

Este também é um dos motivos pelos quais o comando Gui, Show sempre deve vir após os comandos que colocam todos os controles da tela: evitar bugs gráficos.

:arrow: A área de um controle fica entre a coordenada x,y e a coordenada x+w,y+h daquele controle. Isso significa que se a posição x de qualquer outro controle for maior que o x e menor que x+w desse primeiro controle, e ao mesmo tempo a posição y do outro controle também for maior que y e menor que y+h do primeiro controle, estaremos diante de um caso de controles desenhados um sobe o outro. Isso é algo importante a se observar: para colocar um controle à direita do outro controle, devemos ver qual o valor de x+w do primeiro controle e aí adicionar mais alguma coisa ainda. Da mesma forma, para colocar abaixo do outro controle, devemos ver qual o valor de y+h e daí adicionar mais alguma coisa. É uma matemática simples quando você se acostuma, mas no começo pode embaralhar um pouco a cabeça do programador :P

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 29 guests