IniRead
-
- Posts: 85
- Joined: 16 Apr 2020, 10:57
IniRead
I have a doubt with IniRead would have like the listbox to get the files saved by IniWrite direct from an ex folder: I saved 5 names in .ini format would have as these files go straight to the listbox for me to select one of these files from the list and log the saved settings?
Re: IniRead
Maybe you try to rewrite the question in a way that makes understandable what you want to achieve.bittencourt318 wrote: ↑16 Oct 2021, 20:52I have a doubt with IniRead would have like the listbox to get the files saved by IniWrite direct from an ex folder: I saved 5 names in .ini format would have as these files go straight to the listbox for me to select one of these files from the list and log the saved settings?
Re: IniRead
If you are going to list these files inside your listbox, you can use a loop, files with a guicontrol.
-
- Posts: 85
- Joined: 16 Apr 2020, 10:57
Re: IniRead
great to know you have to do! Would you have an example?Smile_ wrote: ↑17 Oct 2021, 07:28If you are going to list these files inside your listbox, you can use a loop, files with a guicontrol.
- flyingDman
- Posts: 2776
- Joined: 29 Sep 2013, 19:01
Re: IniRead
Try:
Code: Select all
Gui, Add, ListBox, vMyLV x5 y5 h100 w350
Loop, files, %a_scriptdir%\*.ahk
GuiControl,, MyLV, %A_LoopFileFullPath%
Gui, Show
14.3 & 1.3.7
Re: IniRead
A demonstration is below. This one uses an edit control instead of a listbox.
Code: Select all
ini := StrReplace(A_ScriptFullPath, ".ahk", ".ini")
Gui, Font, s10
Gui, Add, Button, , S&elect
Gui, Add, Button, x+m , &Load
Gui, Add, Button, x+m , &Save
Gui, Add, Edit , xm w600 r6 vfiles
Gosub, F3
F3::Gui, Show,, Files
ButtonSelect:
FileSelectFile, list, M1,, Select files
If ErrorLevel
Return
files =
For each, file in StrSplit(list, "`n") {
If (each = 1)
dir := file
Else files .= "|" dir "\" file
}
files := SubStr(files, 2)
Gosub, Load
Return
ButtonLoad:
IniRead, files, %ini%, Main, files
Load:
GuiControl,, files, % files = "ERROR" ? "" : StrReplace(files, "|", "`n")
Return
ButtonSave:
Gui, Submit, NoHide
IniWrite, % StrReplace(files, "`n", "|"), %ini%, Main, files
MsgBox, 64, Success, Done!, 1
Return
GuiEscape:
Gui, Hide
Return
-
- Posts: 85
- Joined: 16 Apr 2020, 10:57
Re: IniRead
mikeyww wrote: ↑17 Oct 2021, 20:14A demonstration is below. This one uses an edit control instead of a listbox.
Code: Select all
ini := StrReplace(A_ScriptFullPath, ".ahk", ".ini") Gui, Font, s10 Gui, Add, Button, , S&elect Gui, Add, Button, x+m , &Load Gui, Add, Button, x+m , &Save Gui, Add, Edit , xm w600 r6 vfiles Gosub, F3 F3::Gui, Show,, Files ButtonSelect: FileSelectFile, list, M1,, Select files If ErrorLevel Return files = For each, file in StrSplit(list, "`n") { If (each = 1) dir := file Else files .= "|" dir "\" file } files := SubStr(files, 2) Gosub, Load Return ButtonLoad: IniRead, files, %ini%, Main, files Load: GuiControl,, files, % files = "ERROR" ? "" : StrReplace(files, "|", "`n") Return ButtonSave: Gui, Submit, NoHide IniWrite, % StrReplace(files, "`n", "|"), %ini%, Main, files MsgBox, 64, Success, Done!, 1 Return GuiEscape: Gui, Hide Return
thank you very much guys but I continue with the problem because the name does not appear in ListView it opens and a new tab
Code: Select all
CRIAR_TELA_2:
ini := StrReplace(A_ScriptDir, ".ahk", ".ini")
Gui, Font, s10
Gui, 2: Add, Button, , S&elect
Gui, 2: Add, Button, x+m , &Load
Gui, 2: Add, Button, x+m , &Save
Gui, 2: Add, ListView , xm w600 r6 vfiles
Gosub, FILES
FILES:
Gui, 2: Show,, Files
ButtonSelect:
FileSelectFile, list, M1,, Select files
If ErrorLevel
Return
files =
For each, file in StrSplit(list, "`n") {
If (each = 1)
dir := file
Else files .= "|" dir "\" file
}
files := SubStr(files, 2)
Gosub, Load
Return
ButtonLoad:
IniRead, files, %ini%, Main, files
Load:
GuiControl,, files, % files = "ERROR" ? "" : StrReplace(files, "|", "`n")
Return
ButtonSave:
Gui, Submit, NoHide
IniWrite, % StrReplace(files, "`n", "|"), %ini%, Main, files
MsgBox, 64, Success, Done!, 1
Return
-
- Posts: 85
- Joined: 16 Apr 2020, 10:57
Re: IniRead
it was the least so I needed i don't know if i could express myself wellbittencourt318 wrote: ↑13 Nov 2021, 22:41mikeyww wrote: ↑17 Oct 2021, 20:14A demonstration is below. This one uses an edit control instead of a listbox.
Code: Select all
ini := StrReplace(A_ScriptFullPath, ".ahk", ".ini") Gui, Font, s10 Gui, Add, Button, , S&elect Gui, Add, Button, x+m , &Load Gui, Add, Button, x+m , &Save Gui, Add, Edit , xm w600 r6 vfiles Gosub, F3 F3::Gui, Show,, Files ButtonSelect: FileSelectFile, list, M1,, Select files If ErrorLevel Return files = For each, file in StrSplit(list, "`n") { If (each = 1) dir := file Else files .= "|" dir "\" file } files := SubStr(files, 2) Gosub, Load Return ButtonLoad: IniRead, files, %ini%, Main, files Load: GuiControl,, files, % files = "ERROR" ? "" : StrReplace(files, "|", "`n") Return ButtonSave: Gui, Submit, NoHide IniWrite, % StrReplace(files, "`n", "|"), %ini%, Main, files MsgBox, 64, Success, Done!, 1 Return GuiEscape: Gui, Hide Return
print save.png
thank you very much guys but I continue with the problem because the name does not appear in ListView it opens and a new tab
Code: Select all
CRIAR_TELA_2: ini := StrReplace(A_ScriptDir, ".ahk", ".ini") Gui, Font, s10 Gui, 2: Add, Button, , S&elect Gui, 2: Add, Button, x+m , &Load Gui, 2: Add, Button, x+m , &Save Gui, 2: Add, ListView , xm w600 r6 vfiles Gosub, FILES FILES: Gui, 2: Show,, Files ButtonSelect: FileSelectFile, list, M1,, Select files If ErrorLevel Return files = For each, file in StrSplit(list, "`n") { If (each = 1) dir := file Else files .= "|" dir "\" file } files := SubStr(files, 2) Gosub, Load Return ButtonLoad: IniRead, files, %ini%, Main, files Load: GuiControl,, files, % files = "ERROR" ? "" : StrReplace(files, "|", "`n") Return ButtonSave: Gui, Submit, NoHide IniWrite, % StrReplace(files, "`n", "|"), %ini%, Main, files MsgBox, 64, Success, Done!, 1 Return
Re: IniRead
Before you change the demo, see if it works as it is written. You will then know how your additions are breaking the script.
"Load" changes the edit control to match the file selection. You can change how it works so that the file selection is appended instead.
"Load" changes the edit control to match the file selection. You can change how it works so that the file selection is appended instead.
-
- Posts: 85
- Joined: 16 Apr 2020, 10:57
Re: IniRead
I tried the one of mister flyingDman and also does not appear the files opens the blank secondary screen tried by the way c:.... and it also didn't work
- flyingDman
- Posts: 2776
- Joined: 29 Sep 2013, 19:01
Re: IniRead
My 4 lines of code work perfectly. Just run it as-is without trying to incorporate it in your script.
14.3 & 1.3.7
-
- Posts: 85
- Joined: 16 Apr 2020, 10:57
Re: IniRead
flyingDman wrote: ↑14 Nov 2021, 10:42My 4 lines of code work perfectly. Just run it as-is without trying to incorporate it in your script.
this yes I did tests using msgbox and it worked but the problem is in appearing the name in listview for some reason i don't know it's not picking up the file names in the msgbox is appearing all names but in listview not
- flyingDman
- Posts: 2776
- Joined: 29 Sep 2013, 19:01
-
- Posts: 85
- Joined: 16 Apr 2020, 10:57
Re: IniRead
I found this similar to what I wanted but to open a tab to search wanted me to open directly the folder specifies something very simple for me to be able to learn and manipulate little by little
Code: Select all
; Permita que o usuário maximize ou arraste e redimensione a janela:
Gui +Resize
; Crie alguns botões:
Gui, Add, Button, Default gButtonLoadFolder, Load a folder
Gui, Add, Button, x+20 gButtonClear, Clear List
;Crie o ListView e suas colunas via Gui Add:
Gui, Add, ListView, xm r20 w700 vMyListView gMyListView, Name|In Folder|Size (KB)|Type
LV_ModifyCol(3, "Integer") ; Para classificação, indique que a coluna Tamanho é um número inteiro.
; Crie o ListView e suas colunas via Gui Add:
ImageListID1 := IL_Create(10)
ImageListID2 := IL_Create(10, 10, true) ; Uma lista de ícones grandes para combinar com os pequenos.
; Anexe as ImageLists ao ListView para que posteriormente possa exibir os ícones:
LV_SetImageList(ImageListID1)
LV_SetImageList(ImageListID2)
; Crie um menu pop-up para ser usado como menu de contexto:
Menu, MyContextMenu, Add, Open, ContextOpenFile
Menu, MyContextMenu, Add, Properties, ContextProperties
Menu, MyContextMenu, Add, Clear from ListView, ContextClearRows
Menu, MyContextMenu, Default, Open ;Transforme "Abrir" em uma fonte em negrito para indicar que o clique duplo faz a mesma coisa.
; Exiba a janela e volte. O sistema operacional notificará o script sempre que o usuário
; executa uma ação elegível:
Gui, Show
return
ButtonLoadFolder:
Gui +OwnDialogs ; Força o usuário a dispensar a seguinte caixa de diálogo antes de usar a janela principal.
FileSelectFolder, Folder,, 3, Select a folder to read:
if not Folder ; The user canceled the dialog.
return
; Verifique se o último caractere do nome da pasta é uma barra invertida, o que acontece com o root
; diretórios como C: \. Se estiver, remova-o para evitar uma barra invertida dupla posteriormente.
LastChar := SubStr(Folder, 0)
if (LastChar = "\")
Folder := SubStr(Folder, 1, -1) ; O usuário cancelou a caixa de diálogo.
; Calcule o tamanho do buffer necessário para a estrutura SHFILEINFO.
sfi_size := A_PtrSize + 8 + (A_IsUnicode ? 680 : 340)
VarSetCapacity(sfi, sfi_size)
; Reúna uma lista de nomes de arquivo da pasta selecionada e anexe-os ao ListView:
GuiControl, -Redraw, MyListView ; Melhore o desempenho desativando o redesenho durante o carregamento.
Loop %Folder%\*.*
{
FileName := A_LoopFileFullPath ; Deve salvá-lo em uma variável gravável para uso abaixo.
; Crie um ID de extensão exclusivo para evitar caracteres ilegais em nomes de variáveis,
; como travessões. Este método de ID exclusivo também funciona melhor porque encontrar um item
; na matriz não requer loop de pesquisa.
SplitPath, FileName,,, FileExt ; Obtenha a extensão do arquivo.
if FileExt in EXE,ICO,ANI,CUR
{
ExtID := FileExt ;ID especial como um espaço reservado.
IconNumber := 0 ; Sinalize-o como não encontrado para que cada um desses tipos tenha um ícone exclusivo.
}
else ; Alguma outra extensão / tipo de arquivo, então calcule seu ID exclusivo.
{
ExtID := 0 ; Inicialize para lidar com extensões mais curtas do que outras.
Loop 7 ; Limite a extensão a 7 caracteres para que se encaixe em um valor de 64 bits.
{
ExtChar := SubStr(FileExt, A_Index, 1)
if not ExtChar ; Não há mais personagens.
break
; Derive um ID único atribuindo uma posição de bit diferente para cada caractere:
ExtID := ExtID | (Asc(ExtChar) << (8 * (A_Index - 1)))
}
; Verifique se esta extensão de arquivo já possui um ícone nas ImageLists. Se isso acontecer,
; várias chamadas podem ser evitadas e o desempenho de carregamento é muito melhorado,
; especialmente para uma pasta contendo centenas de arquivos:
IconNumber := IconArray%ExtID%
}
if not IconNumber ; Ainda não existe nenhum ícone para esta extensão, então carregue-o.
{
; Obtenha o ícone pequeno de alta qualidade associado a esta extensão de arquivo:
if not DllCall("Shell32\SHGetFileInfo" . (A_IsUnicode ? "W":"A"), "Str", FileName
, "UInt", 0, "Ptr", &sfi, "UInt", sfi_size, "UInt", 0x101) ; 0x101 is SHGFI_ICON+SHGFI_SMALLICON
IconNumber := 9999999 ; Defina-o fora dos limites para exibir um ícone em branco.
else ; Ícone carregado com sucesso.
{
; Extraia o membro hIcon da estrutura:
hIcon := NumGet(sfi, 0)
; Adicione o HICON diretamente às listas de ícones pequenos e grandes.
; Abaixo usa +1 para converter o índice retornado de zero para um:
IconNumber := DllCall("ImageList_ReplaceIcon", "Ptr", ImageListID1, "Int", -1, "Ptr", hIcon) + 1
DllCall("ImageList_ReplaceIcon", "Ptr", ImageListID2, "Int", -1, "Ptr", hIcon)
; Agora que foi copiado para as ImageLists, o original deve ser destruído:
DllCall("DestroyIcon", "Ptr", hIcon)
; Armazene o ícone em cache para economizar memória e melhorar o desempenho de carregamento:
IconArray%ExtID% := IconNumber
}
}
; Crie a nova linha no ListView e atribua a ela o número do ícone determinado acima:
LV_Add("Icon" . IconNumber, A_LoopFileName, A_LoopFileDir, A_LoopFileSizeKB, FileExt)
}
GuiControl, +Redraw, MyListView ; Reative o redesenho (foi desativado acima).
LV_ModifyCol() ; Dimensione automaticamente cada coluna para ajustar seu conteúdo.
LV_ModifyCol(3, 60) ; Deixe a coluna Tamanho um pouco mais larga para revelar seu cabeçalho.
return
ButtonClear:
LV_Delete() ; mas mantenha o cache do ícone intacto para simplificar.
return
MyListView:
if (A_GuiEvent = "DoubleClick") ; Existem muitos outros valores possíveis que o script pode verificar.
{
LV_GetText(FileName, A_EventInfo, 1) ; Obtenha o texto do primeiro campo.
LV_GetText(FileDir, A_EventInfo, 2) ; Obtenha o texto do segundo campo.
Run %FileDir%\%FileName%,, UseErrorLevel
if ErrorLevel
MsgBox Could not open "%FileDir%\%FileName%".
}
return
GuiContextMenu: ; Lançado em resposta a um clique com o botão direito ou pressionamento da tecla Apps.
if (A_GuiControl != "MyListView") ; Exiba o menu apenas para cliques dentro do ListView.
return
; Mostre o menu nas coordenadas fornecidas, A_GuiX e A_GuiY. Estes devem ser usados
; porque eles fornecem as coordenadas corretas mesmo se o usuário pressionou a tecla Apps:
Menu, MyContextMenu, Show, %A_GuiX%, %A_GuiY%
return
ContextOpenFile: ; O usuário selecionou "Abrir" no menu de contexto.
ContextProperties: ; O usuário selecionou "Propriedades" no menu de contexto
; Para simplificar, opere apenas na linha em foco, em vez de todas as linhas selecionadas:
FocusedRowNumber := LV_GetNext(0, "F") ; Encontre a linha em foco.
if not FocusedRowNumber ; Nenhuma linha está focada.
return
LV_GetText(FileName, FocusedRowNumber, 1) ; Obtenha o texto do primeiro campo.
LV_GetText(FileDir, FocusedRowNumber, 2) ; Obtenha o texto do segundo campo.
if InStr(A_ThisMenuItem, "Open") ; O usuário selecionou "Abrir" no menu de contexto.
Run %FileDir%\%FileName%,, UseErrorLevel
else ; O usuário selecionou "Propriedades" no menu de contexto.
Run Properties "%FileDir%\%FileName%",, UseErrorLevel
if ErrorLevel
MsgBox Could not perform requested action on "%FileDir%\%FileName%".
return
ContextClearRows: ; O usuário selecionou "Limpar" no menu de contexto.
RowNumber := 0 ; Isso faz com que a primeira iteração comece a pesquisa no topo.
Loop
{
; Já que a exclusão de uma linha reduz o RowNumber de todas as outras linhas abaixo dela,
; subtraia 1 para que a pesquisa inclua o mesmo número de linha que estava anteriormente
; encontrado (no caso de linhas adjacentes serem selecionadas):
RowNumber := LV_GetNext(RowNumber - 1)
if not RowNumber ; O valor acima retornou zero, portanto, não há mais linhas selecionadas.
break
LV_Delete(RowNumber) ; Limpe a linha do ListView.
}
return
GuiSize: ; Expanda ou diminua o ListView em resposta ao redimensionamento da janela do usuário.
if (A_EventInfo = 1) ; A janela foi minimizada. Nenhuma ação necessária.
return
; Caso contrário, a janela foi redimensionada ou maximizada. Redimensione o ListView para corresponder.
GuiControl, Move, MyListView, % "W" . (A_GuiWidth - 20) . " H" . (A_GuiHeight - 40)
return
GuiClose: ; Quando a janela for fechada, saia do script automaticamente:
ExitApp
Who is online
Users browsing this forum: morkovka18, ntepa and 174 guests