Code: Select all
;-------- 星期三 九月 2022-09-21 19:32 UTC --------------
;-
;- MODIFIED =
;- CREATED = 20220921
;- FILE = Listview: PRINT ADD DELETE MODIFY SEARCH
;-----------------------------------------------------
#Warn
#NoEnv
#SingleInstance force
Setworkingdir,%a_scriptdir%
SetBatchLines, -1
;--
SplitPath,a_scriptname, name, dir, ext, name_no_ext, drive
mainwindowtitle:=name_no_ext ;-- GUI-NAME
F1:= a_scriptdir . "\" . mainwindowtitle . ".txt" ;-- CSV-file
dlm:=";" ;-- DELIMITER
gosub,CreateTestFile
;--
Gui,1:Color,Black,Black
Gui,1:Font,S12 CYellow,Lucida Console
color=D4D0C8 ;- grayxxx
Gui,add,text ,x10 y10 , Use rightclick for MODIFY or DELETE
Gui, Add, ListView, background%color% cBlack grid x10 y45 w600 h560 vMLV1 gLVGO +altsubmit, Name|Fullpath
Gui, Add, Edit,x10 y625 w200 h27 -vscroll hWndHED1 vSRCH gSearch
SendMessage 0x1501, 1, "SEARCH Here",, ahk_id %hed1%
Gui, Add, Edit,x230 y625 w70 h27 -vscroll vTotal1 right
Gui,add,button,x400 y625 w100 h27 gADD , ADD_NEW
Gui,add,button,x520 y625 w90 h27 gPrint, PRINT
LV_ModifyCol(1,570),LV_ModifyCol(2,0)
Gui, Show,x100 y100 w650 h680,%mainwindowtitle%
;--------- if rightclick Listview Row ------------
Menu, CMenu, Add,
Menu, CMenu, Add, MODIFY , menuDo
Menu, CMenu, Add,
Menu, CMenu, Add,
Menu, CMenu, Add, DELETE , menuDo
Menu, CMenu, Add,
;----
Fill:
Gui,1:default
LV_Delete()
i:=0
GuiControl, -Redraw, MLV1
Fileread,var, *P65001 %f1%
for x,y in strsplit(var,"`n","`r")
{
if Y=
continue
row := []
loop, parse, y,%dlm%
row.push(a_loopfield)
i++
LV_add("",row*)
}
GuiControl, +Redraw, MLV1
Guicontrol,1:,total1,%i%
GuiControl,1:Focus,srch
Return
;=======================================
;-----------------------------------
GuiClose:
ExitApp
;-----------------------------------
;-
;------------- MENU when rightclick on row ----------
menux:
if (rn=0)
return
MouseGetPos, musX, musY
Menu, CMenu, Show, %musX%,%musY%
return
;------------------------
menudo:
If (A_ThisMenuItem = "DELETE")
gosub,DELETEx
If (A_ThisMenuItem = "MODIFY")
gosub,MODIFYx
return
;============= END MENU ================
;-
;============= ADD_NEW =================
ADD:
Gui,1:submit,nohide
Gui,2:Font,S12 cBlack,Lucida Console
Gui,2:Add,Text, x1 y5 w80 , NAME
Gui,2:Add,Edit, x80 y5 w500 h27 vA21,
Gui,2:Add,Text, x1 y50 w80 , URL1
Gui,2:Add,Edit, x80 y50 w500 h27 vA22,
Gui,2:Add, Button,x550 y90 w50 h27, OK
Gui,2:Show, x2 y385 w620 h130, URL-INPUT
GuiControl,2:Focus,A21
return
;---------------------------------------
2GuiClose:
2GuiEscape:
Gui,2: Destroy
return
;--------------
2ButtonOK:
Gui,2:submit,nohide
if A21=
{
Gui,2: Destroy
return
}
FILEAPPEND, %A21%%dlm%%A22%`r`n,%F1%,utf-8
Gui,2: Destroy
GoSub,Fill ;- update LV
return
;=============== END ADD_NEW ================
;-
;=============== DELETE =====================
Deletex:
Gui,1:ListView,MLV1
cxx:="",RowNumber:=0,DeleteArray := []
Loop
{
RowNumber := LV_GetNext(RowNumber)
if not RowNumber
Break
LV_GetText(cx1,rownumber)
cxx .= cx1 . "`n"
DeleteArray[RowNumber] := "DEL"
}
msgbox, 262180,TEST ,Want you really DELETE ?`n%cxx%
ifmsgbox,NO
{
for index, in DeleteArray
LV_Modify(index, "-Select -Focus")
GuiControl,1:Focus,srch
return
}
;--------
cxx=
GuiControl, -Redraw, MLV1
for index, in DeleteArray
LV_Delete(index-A_Index+1)
GuiControl, +Redraw, MLV1
;---
listx=
ControlGet, Listx, List, , SysListView321,%mainwindowtitle%
stringreplace,listx,listx,`t,%dlm%,all
Filedelete,%f1%
fileappend,%listx%`r`n,%f1%,utf-8
listx:=""
GuiControl,1:Focus,srch
Return
;============= END DELETE ==================
;-
;============= MODIFY ======================
MODIFYx:
Gui,1:submit,nohide
Gui,1:ListView,MLV1
Gui,3:Font,S12 cBlack,Lucida Console
Gui,3:Add,Text, x1 y5 w80 , NAME
Gui,3:Add,Edit, x80 y5 w500 h27 vA31,%C1%
Gui,3:Add,Text, x1 y50 w80 , URL1
Gui,3:Add,Edit, x80 y50 w500 h27 vA32,%C2%
Gui,3:Add, Button,x550 y90 w50 h27, OK
Gui,3:Show, x2 y385 w620 h130, URL-INPUT
GuiControl,3:Focus,A31
return
;---------------------------------------
3GuiClose:
3GuiEscape:
Gui,3: Destroy
return
;--------------
3ButtonOK:
Gui,3:submit,nohide
FileRead,Filecontent, *P65001 %f1%
FileDelete, %f1%
StringReplace, FileContent, FileContent,%C1%%dlm%%C2%, %A31%%dlm%%A32%
FileAppend, %FileContent%`r`n, %f1%,UTF-8
filecontent=
Gui,3:destroy
Gosub,fill
return
;=============== END MODIFY =================
;-
;=============== SEARCH =====================
Search:
GuiControlGet,srch
Gui,1:ListView,MLV1
GuiControl, -Redraw, MLV1
LV_Delete()
i:=0
;--
row := []
for x,y in strsplit(var,"`n","`r")
{
if y=
continue
h:=StrSplit(y,dlm)
;hr:=h[1],mn:=h[2]
;if (InStr(h.1,srch) or InStr(h.2,srch)) ;- search in column-1 and in column-2
if instr(h.1,srch)
{
loop, parse, y, %dlm%
row.push(a_loopfield)
i++
LV_add("",row*)
row := []
}
GuiControl, +Redraw, MLV1
Guicontrol,1:,total1,%i%
}
;--
/*
;- search in all columns ---------
row := []
for x,y in strsplit(var,"`n","`r")
{
if instr(y,srch)
{
loop, parse, y, %dlm%
row.push(a_loopfield)
if y=
continue
i++
LV_add("",row*)
row := []
}
Guicontrol,1:,total1,%i%
}
*/
;---------------------------------
GuiControl, +Redraw, MLV1
if (srch="")
{
sleep,200
Guicontrol,1:,total1,%i%
}
Return
;-----------------------------------
;=============== END SEARCH =================
;-
;=============== PRINT ======================
PRINT:
fx:= a_scriptdir . "\" . mainwindowtitle . "_PRINTED.txt"
ifexist,%fx%
filedelete,%fx%
ControlGet, Listx, List, , SysListView321,%mainwindowtitle%
stringreplace,listx,listx,`t,%dlm%,all
fileappend,%listx%`r`n,%fx%,utf-8
listx=
try
run,%fx%
return
;================ END PRINT ================
;-
;-----------------------------------
LVGo:
Gui,1:default
Gui,1:ListView,MLV1
RN:=LV_GetNext("C")
if (rn=0)
return
Row := A_EventInfo
LV_GetText(C1,row,1)
LV_GetText(C2,row,2)
C2=%C2%
;--
if A_GuiEvent = Doubleclick
{
try
run,%C2%
}
;--
if A_GuiEvent = Rightclick
goto,menux
return
;-------------------------------------
;=============================================
CreateTestFile:
e2=
(Ltrim join`r`n
British_pathe;https://www.youtube.com/channel/UCGp4u0WHLsK8OAxnvwiTyhA
BBC_Archive;https://www.bbc.co.uk/archive/
LA_CAMERA_STYLO;https://www.youtube.com/channel/UCxT4JLBXafKV7dCafIceCUg/videos ;- Film collection
Nikola Tesla Brings Light to Croatia;https://www.arte.tv/en/videos/105654-003-A/nikola-tesla-brings-light-to-croatia/
Nikola Tesla: niech stanie sie swiatlosc!;https://www.arte.tv/pl/videos/105654-003-A/nikola-tesla-niech-stanie-sie-swiatlosc/
News_Portugal;https://news.google.com/topstories?hl=pt-PT&gl=PT&ceid=PT:pt-150
Weather_Portugal;https://www.timeanddate.com/weather/portugal/lisbon
Calypso 我爱卡拉苏 - Grace Chang ( 葛蘭 - Ge Lan );https://www.youtube.com/watch?v=bi4f2E_1or4
)
ifnotexist,%F1%
fileappend,%e2%,%F1%,utf-8
e2=
return
;=========== END SCRIPT =====================================================================================================
ListView with TreeView with Search and Calculation ( example for 6-columns )
Code: Select all
;- LV_TV_READ-CSV_BANK with search
;- read postfinance with 6-columns / delimiter=";"
;- creates a folder with a testfile ..\M_Postfinance\Test.csv
;- save csv-file with notepad under UTF8-BOM
;------------------------
;modified = 20181219
;created = 20181219
;------------------------
#NoEnv
#Warn
SendMode Input
SetWorkingDir, %A_ScriptDir%
SetTitleMatchMode 2
SetBatchLines, -1
MainWindowTitle=LV_TV_Postfinance
FileEncoding, UTF-8
;---------------
dlm = `; ;- predefined delimiter
total:=6 ;- predefined columns
;---------------
wa:=A_screenwidth
ha:=A_screenHeight
;---------------
Gui,2:default
Gui,2: -DPIScale
SS_REALSIZECONTROL := 0x40
Gui,2:Font,s13 cBlack,Lucida Console
Gui,2:Color,Black,Black
;---------------
TreeRoot = %a_scriptdir%\M_Postfinance
ifnotexist,%treeroot%
filecreatedir,%treeroot%
ftest=%treeroot%\Test.csv
ifnotexist,%ftest%
gosub,createtest
;---------------
xx:=101
LBW:=(wa*10)/xx
LBH:=(ha*83)/xx
x :=(wa*.2)/xx
y :=(ha*.3)/xx
Gui,2: Add, TreeView, backgroundGray vTV1 x%x% y%y% w%lbw% h%lbh% altsubmit gTreeEvent
AddSubFolderToTree(TreeRoot)
;----------------
sect1=Date,Avisierungstext,IN,OUT,Valuta,SALDO
stringsplit,h,sect1,`,
ch1:=""
loop,%total%
ch1 .= h%a_index% . "|"
T1:=(wa*5 )/xx
T2:=(wa*65 )/xx
T3:=(wa*5 )/xx
T4:=(wa*5 )/xx
T5:=0
T6:=(wa*5 )/xx
x :=(wa*11 )/xx
w :=(wa*87 )/xx
h :=(ha*80 )/xx
y :=(ha*1 )/xx
gui,2:add, listview,x%x% y%y% w%w% h%h% grid cWhite backgroundteal hwndLV1 vLVC1 gLVEvents +altsubmit -multi, %ch1%
LV_ModifyCol(1,T1)
LV_ModifyCol(2,T2)
LV_ModifyCol(3,T3)
LV_ModifyCol(4,T4)
LV_ModifyCol(5,T5)
LV_ModifyCol(6,T6)
LV_ModifyCol(1, "Integer")
LV_ModifyCol(3, "Integer")
LV_ModifyCol(4, "Integer")
LV_ModifyCol(6, "Integer")
;----------------------
x3 :=x+t1+t2
w3 :=T3
y :=(ha*82.5 )/xx
h :=(ha*2.2 )/xx
Gui,2: Add,Edit,cWhite x%x3% y%y% w%w3% h%h% readonly vIN1 right
x4 :=x+t1+t2+t3
w4 :=T4
Gui,2: Add,Edit,cWhite x%x4% y%y% w%w4% h%h% readonly vOUT1 right
x6 :=x+t1+t2+t3+t4+t5
w6 :=T6
Gui,2: Add,Edit,cWhite x%x6% y%y% w%w6% h%h% readonly vSaldo right
y :=(ha*85 )/xx
Gui,2: Add,Edit,cWhite x%x6% y%y% w%w6% h%h% readonly vDifference right
Gui,2: Add,Text,cGray x%x4% y%y% w%w6% ,Difference
;----------------
x :=(wa*10 )/xx
y :=(ha*85 )/xx
w :=(wa*5 )/xx
h :=(ha*2.5 )/xx
Gui,2: Add,Edit,cWhite x%x% y%y% w%w% h%h% gSearchA vsearchx
x :=(wa*16 )/xx
Gui,2: add,button, x%x% y%y% w%w% h%h% gClearsearch ,<Clear
x :=(wa*22 )/xx
Gui,2: Add,Edit,cWhite x%x% y%y% w%w% h%h% readonly vCountFile1 right,
x :=(wa*28 )/xx
Gui,2: Add,Edit,cWhite x%x% y%y% w%w% h%h% readonly vSearchYN center
;----------------------
w :=(wa*99 )/xx
h :=(ha*90 )/xx
gui,2: show,x1 y1 w%w% h%h%,%MainWindowTitle%
Guicontrol,2:,searchYN,Search-NO
RETURN
;--------------------------
2Guiclose:
exitapp
;--------------------------
;esc::exitapp
;--------------------------
;--------------------- TV1 ---------------------------------
AddSubFolderToTree(Folder, ParentItemID = 0)
{
Loop %Folder%\*.*, 2
{
ID := TV_Add(A_LoopFileName, ParentItemID)
AddSubFolderToTree(A_LoopFileFullPath, ID)
}
Loop %Folder%\*.csv
ID := TV_Add(A_LoopFileName, ParentItemID)
}
return
;------------------------------------------------------------
;------------------- TV-1 EVENT -----------------------------
TreeEvent:
Gui, 2:TreeView, TV1
if A_GuiEvent <> S
return
parenttext:=""
selecteditemtext:=""
selectedfullpath:=""
f1:=""
TV_GetText(SelectedItemText, A_EventInfo)
ParentID := A_EventInfo
Loop
{
ParentID := TV_GetParent(ParentID)
if not ParentID
break
TV_GetText(ParentText, ParentID)
SelectedItemText = %ParentText%\%SelectedItemText%
}
SelectedFullPath = %TreeRoot%\%SelectedItemText%
GuiControl,2:,Pathx,%SelectedFullPath%
F1=%SelectedFullPath%
SplitPath,SelectedFullPath, name, dir, ext, name_no_ext, drive
LB1name=%name%
LB1nameNoExt=%name_no_ext%
;msgbox,PARENT=%parenttext%`nDIR=%dir%`nSELITEM=%selecteditemtext%`nFULL=%f1%
gosub,fill
return
;====================================================================
;-------------- Fill Listview read CSV -----------
Fill:
Gui,2:submit,nohide
Gui,2:default
setformat,float,0.2
LV_Delete()
e:=""
i:=0
Fileread,e,%f1%
u3t:=0
u3 :=0
u4t:=0
u4 :=0
for each, Line in StrSplit(e, "`n", "`r")
{
if line=
continue
Columns := StrSplit(Line,dlm)
ct:=strsplit(Line,dlm).Count()
if (ct!=total) ;- if columns <> predefined total
continue
stringsplit,u,line,%dlm%
u3 +=0.00
u3t +=0.00
u4 +=0.00
u4t +=0.00
u3t := (u3t+(u3))
u4t := (u4t+(u4))
i++
LV_Add("",Columns*)
}
Guicontrol,2:,CountFile1,%I%
GuiControl,2:Focus,searchx
Guicontrol,2:,in1,%u3t%
Guicontrol,2:,out1,%u4t%
outx:=(ABS(u4t))
diff:=(u3t-outx)
Guicontrol,2:,difference,%diff%
return
;------------------------------------------------
;------------------------------------------------
LVevents:
Gui,2:submit,nohide
rcon:=a_guicontrol
Gui,2:ListView,%rcon%
RN:=LV_GetNext("C")
RF:=LV_GetNext("F")
GC:=LV_GetCount()
if (rn=0)
return
;-----------------
if A_GuiEvent = Normal
{
LV_GetText(C2,a_eventinfo,2)
msgbox,%C2%
return
}
return
;--------------
;================== SEARCH ====================
SearchA:
Gui,2:default
Gui,2:submit,nohide
Gui,2:ListView, LVC1
if (searchx="")
return
settimer,checkempty,1000
LV_Delete()
Guicontrol,2:,searchYN,Search-YES
I2=0
GuiControl,2: -Redraw,LVC1
Loop,parse,e,`n,`r
{
loop,%total%
z%a_index%:=""
zx=
stringsplit,z,a_loopfield,%dlm%
loop,%total%
zx .= z%a_index% . dlm
stringtrimright,zx,zx,1
ifinstring,zX,%searchx%
{
i2++
Cns := StrSplit(zx,dlm)
LV_Add("", cns*)
}
}
GuiControl,2: +Redraw,LVC1
Guicontrol,2:,CountFile1,%I2%
return
;--------------
checkempty:
Gui,2:submit,nohide
if (searchx="")
{
settimer,checkempty,off
gosub,fill ;- <<<
Guicontrol,2:,searchYN,Search-NO
return
}
return
;--------------------------
clearsearch:
guicontrol,2:,searchx
return
;------------------ END SEARCH --------------------
;------------ testfile -------------
createtest:
e4=
(Ltrim join`r`n
2018-10-31;Price monthly;;-5.00;2018-10-31;
2018-10-27;Gift from X;100.00;;2018-10-27;
2018-10-25;Tool XY;;-50.00;2018-10-25;
)
fileappend,%e4%,%ftest%
e4=
return
;================== END script ==========================================================
EDIT 20181102 modified for different columns / print formatted
Code: Select all
;- https://autohotkey.com/boards/viewtopic.php?f=28&t=3384&p=245251#p245251
;
;- modified= 20181102
;- created = 20181020
;- ListView example depending screensize % ( e.g. FHD-1920*1080 or 4K-3840*2160 )
;- defined to read max 26 columns with different delimiters like = `,`;`| ( delimiters not allowed inside columns )
;- DELETE (multiple) row's (rightclick-ROW) ;- if search is used you can't DELETE row's
;- MODIFY ( EDIT ) columns (rightclick-ROW) ;-
;- ADD new ;-
;- Click column to start program/url/email ;-
;- SEARCH ;-
;- PRINT formatted ;-
;- PRINT what you see formatted ;-
;- Drag&Drop CSV-File ;-
;- Drag-GUI ;-
;- Open different folders/files (rightclick-Listbox) ;-
;- Add textfile / picture etc to defined folder ;-
;- Change LV-Header depending Listbox-name.csv ;-
;------------------------------------------------------
#warn
#NoEnv
#SingleInstance Force
SetBatchLines -1
setworkingdir,%a_scriptdir%
MainWindowTitle=ListView_Test1
;MsgBox % A_IsUnicode
FileEncoding, UTF-8
Gui,1:default
Gui,1: -DPIScale
SS_REALSIZECONTROL := 0x40
LVM_GETCOLUMNWIDTH=0x101D ;- get ListViewColumnWidth with loop to modify columns-width
Gui,1: +LastFound
M_LBfolders =%a_scriptdir%\M_LB-FOLDERS
ifnotexist,%m_lbfolders%
filecreatedir,%m_lbfolders%
columntot:=26 ;- total max columns ( can be changed ) shows only existing columns
setformat,float,0.0
wa:=A_screenwidth
ha:=A_screenHeight
;--- ( for print use non proportional script like Lucida console etc ... )
if (wa=3840)
Gui,1:Font,s12 cBlack,Lucida Console
if (wa=1920)
Gui,1:Font,s10 cBlack,Lucida Console
xx:=101
LBW :=(wa*10) /xx
LVW :=(wa*89) /xx ;- LV width at 4K UHD (3840/89)/100 = 3417.6 FHD/FullHD=(1920*1080) 4K-UHD=(3840*2160)
LVH :=(ha*83) /xx ;- LV height
GUW :=(wa*99.8) /xx ;- GUI width
GUH :=(ha*94) /xx ;- GUI height
Gui,1:Color,Black
Gui,1:Color,ControlColor, Black
Gui,1:Font,s12 cBlack,Lucida Console
gosub,testfile ;-<<<< create testfile F1
x :=(wa*.2)/xx
y :=(ha*.3)/xx
Gui,1:add,Listbox, cWhite x%x% y%y% w%lbw% h%lvh% Sort vLB1 gLB
x :=(wa*.2)/xx
y :=(ha*84)/xx
h :=(ha*10)/xx
Gui,1:add,Listbox , cGray x%x% y%y% w%lbw% h%h% vDrag -vscroll, ;- drag & drop a csv-file here
;--------- column names columntot=26 --------------------------------------------------------------
sect=A1,B2,C3,D4,E5,F6,G7,H8,I9,J10,K11,L12,M13,N14,O15,P16,Q17,R18,S19,T20,U21,V22,W23,X24,Y25,Z26
stringsplit,h,sect,`,
ch:=""
loop,%columntot%
ch .= h%a_index% . "|"
x :=(wa*10.6 )/xx
y :=(ha*.3)/xx
Gui, Add, ListView, x%x% y%y% h%lvh% w%lvw% Grid +altsubmit backgroundGray gLvHandler vLV1 +HWNDLV1,%ch%
loop,%columntot%
LV_ModifyCol(a_index,0)
x:=(wa*11)/xx
y:=(ha*86)/xx
Gui,1: Add,Text, x%x% y%y% cYellow, Search:
x:=(wa*15 )/xx
w:=(wa*10 )/xx
h:=(ha*2.6)/xx
Gui,1: Add,Edit,cWhite x%x% y%y% w%w% h%h% gSearchA vsearchx
x:=(wa*25.5)/xx
w:=(wa*5 )/xx
Gui,1:add,button, x%x% y%y% w%w% h%h% gClearsearch ,<Clear
x:=(wa*31)/xx
w:=(wa*5 )/xx
Gui,1: Add,Edit,cWhite x%x% y%y% w%w% h%h% readonly vCountFile1 right,
x:=(wa*37)/xx
w:=(wa*7 )/xx
Gui,1: Add,Edit,cWhite x%x% y%y% w%w% h%h% readonly vSearchYN center
x:=(wa*45)/xx
w:=(wa*4 )/xx
Gui,1:add,button, x%x% y%y% w%w% h%h% gPrint ,Print
x:=(wa*50)/xx
w:=(wa*5 )/xx
Gui,1:add,button, x%x% y%y% w%w% h%h% gPrint2 ,Print_WYS
x:=(wa*58)/xx
w:=(wa*5 )/xx
Gui,1:add,button, x%x% y%y% w%w% h%h% gAdd1 ,ADD_NEW
/*
x:=(wa*64)/xx
w:=(wa*8 )/xx
Gui,1:add,button, x%x% y%y% w%w% h%h% gFolder1 ,FOLDER-CSV
*/
Gui,1: Show, x0 y0 h%guh% w%guw%,%MainWindowTitle%
;--------- rightclick Listview Row ------------
Menu, CMenu, Add, DELETE , menuDo
Menu, CMenu, Add, MODIFY , menuDo
;-------- rightclick listbox ------------------
Menu, CMenuLB, Add, Edit CSV-file , menuDoLB
Menu, CMenuLB, Add, Open LB-EndlessTextfile , menuDoLB
Menu, CMenuLB, Add, Open LB-Folder , menuDoLB
Menu, CMenuLB, Add, Open CSV-Folder , menuDoLB
Gosub,listboxfill ;- << fill listbox
Guicontrol,1:,searchYN,Search-NO
GuiControl,1:,Drag,Drag&Drop CSV-file|here
sleep,100
ControlClick, , %MainWindowTitle% ;- click on marked file in listbox
GuiControl,1:Focus,searchx
OnMessage(0x201, "WM_LBUTTONDOWN") ;- DragGui
Return
;========================================================
GuiClose:
ExitApp
esc::exitapp
;================== END GUI =============================
;-------------------- Fill Listbox ----------------------
Listboxfill:
GuiControl,1:,LB1,|
R3C =%a_scriptdir%\M_CSV
ifnotexist,%r3c%
filecreatedir,%r3c%
Loop,%R3C%\*.csv
{
FX=%A_LoopFileName%
stringlen,L1,FX
stringmid,FA,FX,1,L1-4
GuiControl,1:,LB1,%FA% ;-display the files in listbox
}
;GuiControl,1:ChooseString, LB1,PT1_adress ;- mark defined file
GuiControl,1:ChooseString, LB1,%fa% ;- mark last listbox file
return
;--------------------------------------------------------
;--------------- Drag & Drop a csv-file -----------------
GuiDropFiles:
Extensions := "xls,csv"
GuiControl,1:,Drag,|
Loop, parse, A_GuiEvent, `n
{
lr:=a_loopfield
;GuiControl,1:,Drag,%A_LoopField%
SplitPath,lr, name, dir, ext, name_no_ext, drive
if Ext in %Extensions%
{
filecopy,%lr%,%r3c%\%name%
if errorlevel<>0
msgbox, 262208,FILECOPY ,The file=`n%name%`nalready exist
}
else
msgbox, 262208,NOT CSV-File ,File=`n%name%`n... is not a CSV-File
}
GuiControl,1:,Drag,Drag&Drop CSV-file|here
lr=
gosub,listboxfill
GuiControl,1:ChooseString, LB1,%name_no_ext% ;- mark this file
sleep,100
ControlClick, , %MainWindowTitle% ;- click on marked file in listbox
return
;===================== PRINT formatted rows ===================
print:
Gui,1:submit,nohide
tx:=""
e :=""
aab=
;FilePrint=%a_desktop%\%a_now%_%mainwindowtitle%.txt
FilePrint=%a_desktop%\%mainwindowtitle%.txt
ifexist,%fileprint%
filedelete,%fileprint%
FileRead,aab, *P65001 %f1% ;-read as UTF-8
tx:=""
loop,%total%
T%a_index%:=0
loop,%total%
L%a_index%:=0
loop,%total%
A%a_index%:=""
Loop,parse,aab,`n,`r
{
lr=%a_loopfield%
if lr=
continue
i=0
loop,%total% ;- get max lenght from x columns
{
i++
StringSplit,A,lr,%dlm%
stringlen,L%i%,A%i%
if (T%i%<L%i%)
T%i%:=(L%i%+1) ;-maximal lenght columnX+1
}
}
;- x columns
tx:=""
loop,%total%
Tx .= "{:" . T%a_index% . "}" . dlm
stringtrimright,tx,tx,1
loop,%total%
a%a_index%:=""
lr=
e:=""
a:=""
Loop, parse,aab, `n,`r
{
lr=%a_loopfield%
if lr=
continue
a :=StrSplit(lr,dlm )
e .= Format(tx . "`r`n",a*)
}
fileappend,%e%,%fileprint%
run,%fileprint%
e=
a=
aab=
return
;=============================================
;============ case-1 PRINT_WYS ====================
print2:
;-- check maximal lenght from each column ---
FilePrint=%a_desktop%\%mainwindowtitle%_WYS.txt
ifexist,%fileprint%
filedelete,%fileprint%
ControlGet, Listx, List, , SysListView321,%mainwindowtitle%
stringreplace,listx,listx,`t,%dlm%,all
tx:=""
loop,%total%
T%a_index%:=0
loop,%total%
L%a_index%:=0
Loop,parse,listx,`n,`r
{
lr=%a_loopfield%
if lr=
continue
i=0
loop,%total% ;- get max lenght from x columns
{
i++
StringSplit,A,lr,%dlm%
stringlen,L%i%,A%i%
if (T%i%<L%i%)
T%i%:=(L%i%+1) ;-maximal lenght columnX+1
}
}
;- x columns
loop,%total%
Tx .= "{:" . T%a_index% . "}" . dlm
stringtrimright,tx,tx,1
loop,%total%
a%a_index%:=""
lr=
e:=""
Loop, parse,listx, `n,`r
{
lr=%a_loopfield%
if lr=
continue
xv:=((columntot-total)-0)
stringtrimright,lr,lr,xv ;- line without rest delimiter ;;;;;
a :=StrSplit(lr,dlm )
e .= Format(tx . "`r`n",a*)
}
fileappend,%e%,%fileprint%
run,%fileprint%
e=
a=
listx=
return
;=============================================
;================== SEARCH ====================
SearchA:
Gui,1:default
Gui,1:submit,nohide
Gui,1:ListView, LV1
if (searchx="")
return
settimer,checkempty,1000
LV_Delete()
Guicontrol,1:,searchYN,Search-YES
I2=0
GuiControl,1: -Redraw,LV1
FileRead,text1, *P65001 %f1% ;-read as UTF-8
Loop,parse,text1,`n,`r
{
loop,%total%
z%a_index%:=""
zx=
stringsplit,z,a_loopfield,%dlm%
loop,%total%
zx .= z%a_index% . dlm
stringtrimright,zx,zx,1
ifinstring,zX,%searchx%
{
i2++
Cns := StrSplit(zx,dlm)
LV_Add("", cns*)
}
}
GuiControl,1: +Redraw,LV1
Guicontrol,1:,CountFile1,%I2%
return
checkempty:
Gui,1:submit,nohide
if (searchx="")
{
settimer,checkempty,off
gosub,fill ;- <<<
text1=
Guicontrol,1:,searchYN,Search-NO
return
}
return
;--------------------------
clearsearch:
guicontrol,1:,searchx
return
;================ END SEARCH ======================
;======== FILL Listbox read selected file and SHOW in Listview ===============================
LB:
Gui,1:default
Gui,1:submit,nohide
Gui,1: Listview, LV1
Guicontrol,1:,CountFile1,
GuiControlGet,LB1
F1=%R3C%\%LB1%.csv
;--------------------
delim:=",;|" ;- search for these delimiters ( shouldn't be in rows/text )
F=0
b=
Loop,read,%f1%
{
loop,parse,a_loopreadline, ;- search last delimiter (DLM) from first column
{
if InStr(Delim,A_LoopField)
{
F++
dlm:=A_LoopField
}
}
if dlm<>
break ;- after first line readed , break
}
total:=(f+1) ;- total columns (f+1) ,
gosub,fill ;- <<<
return
;=================================================================
LvHandler:
Gui,1:default
Gui,1:Submit,nohide
gui,1:listview,LV1
RN:=LV_GetNext("C")
RF:=LV_GetNext("F")
GC:=LV_GetCount()
if A_GuiEvent = Normal
{
if (rn=0)
{
tooltip
return
}
Row := A_EventInfo
Col := LV_SubitemHitTest(LV1)
LV_GetText(result, Row, Col)
allcx:=""
loop,%total%
c%a_index%:=""
i=0
if (col=1)
{
Loop,%total%
{
i++
i:=SubStr(0 i, -1) ;- i 01-09
LV_GetText(colx,a_eventinfo,a_index)
c%a_index%:=colx
allcx .= i . "- " . colx . "`n"
}
tooltip,column=%col%`n%result%`n-------- ROW= %row% ---------------------`n%allcx%
sleep,8000
tooltip
}
}
if (A_GuiEvent == "DoubleClick")
{
if (rn=0)
return
Row := A_EventInfo
Col := LV_SubitemHitTest(LV1)
LV_GetText(result, Row, Col)
all:=""
loop,%total%
c%a_index%:=""
Loop,%total%
{
LV_GetText(colx,a_eventinfo,a_index)
c%a_index%:=colx
all .= colx . dlm
}
stringtrimright,all,all,1
;MsgBox,You clicked column=%col% in row=%row% =>> %result%`n-------------------`nALL=`n%all%
all=
stringmid,urlx ,result,1,4
stringmid,pathx,result,2,2
if (urlx="http" || pathx=":\")
{
try
run,%result%
}
if result contains @
{
try
run, mailto:%result%?subject=Greetings&body=Hello how are you?`%0A`%0ATest1`%0ATest2
}
if (result="TEXT")
{
;msgbox,C1=%c1%`nC2=%c2%`nC3=%c3%`nC4=%c4%`nC5=%c5%`n
aaff=%m_LBfolders%\%lb1%
ifnotexist,%aaff%
filecreatedir,%aaff%
Filex=%aaff%\%c1%.txt
ifnotexist,%filex%
Fileappend,%c1%`r`n,%filex%
try
{
Run,"%filex%"
sleep,2200
send,^{end}
}
}
loop,%total%
c%a_index%:=""
result=
}
if A_GuiEvent = Rightclick
{
all:=""
Loop, % LV_GetCount("Col")
{
LV_GetText(colx,a_eventinfo,a_index)
all .= colx . dlm
}
stringtrimright,cx,all,1
goto,menux
}
return
;====================================================
;------------- when rightclick on LISTBOX open file xy.csv ----------
GuiContextMenu:
r:=a_guicontrol
GuiControlGet,%r%
;msgbox,%lb1%
if (R="LB1" and LB1!="")
{
sleep,200
F1x=%R3C%\%LB1%.csv
if LB1<>
gosub,menulb
}
return
;------------- MENU when rightclick on LISTBOX ----------
menuLB:
MouseGetPos, musX2, musY2
Menu, CMenuLB, Show, %musX2%,%musY2%
lb1=
r=
return
menudoLB:
Gui,submit,nohide
If (A_ThisMenuItem = "Edit CSV-file") ;- open Listbox CSV-File
Run, %f1x%
If (A_ThisMenuItem = "Open LB-EndlessTextfile") ;- open textfile in XY-Listbox
gosub, LBTextFile
If (A_ThisMenuItem = "Open LB-Folder") ;- open folder in XY-Listbox
gosub,foldertextfiles
If (A_ThisMenuItem = "Open CSV-Folder")
run,%r3c%
return
;-- Open a textfile to each Listbox -----
LBTextFile:
aaff=%m_LBfolders%\%lb1%
ifnotexist,%aaff%
filecreatedir,%aaff%
aacc=%aaff%\_%lb1%_Endless_LB.txt
ifnotexist,%aacc%
fileappend,%aaff%`r`n,%aacc%
try
{
run,%aacc%
sleep,2200
send,^{end}
}
return
;--- Open folder from listbox ----
FolderTextFiles:
aaff=%m_LBfolders%\%lb1%
ifnotexist,%aaff%
filecreatedir,%aaff%
try
run,%aaff%
return
;------------- MENU when rightclick on row ----------
menux:
if (rn=0)
return
MouseGetPos, musX, musY
Menu, CMenu, Show, %musX%,%musY%
return
menudo:
Gui,submit,nohide
If (A_ThisMenuItem = "DELETE")
gosub,Recyclex ;- <<<
If (A_ThisMenuItem = "MODIFY")
gosub,MODIFYx ;- <<<
return
;-------------- Fill Listview -----------
Fill:
Gui,1:default
Gui,1:submit,nohide
gui,1:listview,LV1
LV_Delete()
GuiControl, -Redraw, LV1
loop,%columntot%
LV_ModifyCol(a_index,0)
i=0
FileRead,aac, *P65001 %f1% ;-read as UTF-8
for each, Line in StrSplit(aac, "`n", "`r")
{
if line=
continue
I++
Columns := StrSplit(Line,dlm)
LV_Add("",Columns*)
}
aac=
Guicontrol,1:,CountFile1,%I%
Lvw:=0
columnwidthx:=""
diff:=(wa*.8)/xx
errorlevel:=0
wdthfix:=(wa*16)/xx
xxc:=""
Loop, %total%
{
LV_ModifyCol(A_Index, "AutoHdr")
SendMessage, LVM_GETCOLUMNWIDTH, A_Index - 1, 0, SysListView321
xcc:=(errorlevel+diff) ;- column width
if (xcc>wdthfix)
t%a_index%:=(wdthfix+diff) ;- columnwidth maximal FIX
else
t%a_index%:=xcc ;- column width
;t%a_index%:= wdthfix ;- columnwidth FIX
lvw += T%a_index% ;- each column addition
LV_ModifyCol(a_index,T%a_index%) ;- fit each column
columnwidthx .= t%a_index% . "`n"
}
;---- Modify Header
if (LB1="pearl")
{
cff=Product|Number|Price|Date|URL|Info
loop,parse,cff,`|
{
LV_ModifyCol(a_index,"left",a_loopfield)
}
LV_ModifyCol(3, "Integer")
LV_ModifyCol(4, "Integer")
}
;-------- Modify Header to default A1 B2 C3 ....
else
{
i=0
Loop, 26
{
i++
Char := Chr(64+A_Index) . I
LV_ModifyCol(a_index,"left",char)
}
i=0
}
LV_ModifyCol(1, "Sort CaseLocale") ;-
LV_Modify(LV_GetCount(), "Vis") ;- scrolls down
GuiControl, +Redraw, LV1
ControlClick, , %MainWindowTitle% ;- click on marked file in listbox
;--------------- keep for test ---------------
stringtrimright,columnwidthx,columnwidthx,1
GuiControlGet, P, Pos, %LV1%
;msgbox,%columnwidthx%`n-----------------`n%lvw% << Columns total width`nLV-width =%PW%
;---------------------------------------------
GuiControl,1:Focus,searchx
return
;================ END FILL ====================================
;================== ADD NEW ==================================
;------------- Listbox ADD NEW ----------------------------
add1:
Gui,1:submit,nohide
loop,%columntot%
C%a_index%:=""
;Gui, 1:+Disabled
Gui,96:+Owner
GUI,96:+AlwaysOnTop
Gui,96:Font, S12 CBlack , Lucida Console
x :=10
y :=20
d :=15
Gui,96:add,text,section x%x% y%y% w0 h0,
I=0
Loop,%total%
{
i++
i:=SubStr(0 i, -1) ;- i 01-09
ch:=h%a_index%
Gui,96:add,text,xs y+%d% h27,%ch%
}
x :=120
Gui,96:add,text,section x%x% y%y% w0 h0,
I=0
Loop,%total%
{
i++
i:=SubStr(0 i, -1) ;- i 01-09
ch:=h%a_index%
Gui,96:add,edit,xs y+%d% w700 h27 vC%a_index%,
}
Gui,96:Add, Button, x850 y10 w40 h27, OK
Gui,96:show,x500 y10 w900 ,ADD_NEW
GuiControl,96:Focus,C1
send,^{end}
return
;-----------
96GuiClose:
96GuiEscape:
Gui,96:Destroy
;Gui,1:-Disabled
;Gui,1:Default
return
;-----------
96ButtonOK:
Gui,96:submit
ch:=""
loop,%total%
ch .= c%a_index% . dlm
stringtrimright,ch,ch,1
if C1<>
FileAppend,%ch%`r`n,%f1%,UTF-8
ch=
loop,%total%
C%a_index%:=""
Gui,96:Destroy
;Gui,1:-Disabled
;Gui,1:Default
Gosub,fill
return
;====================== END ADD NEW =======================
;================ modify ======================================
MODIFYx:
Gui,1:submit,nohide
loop,parse,cx,`n,`r
{
if (a_loopfield="")
continue
loop,%columntot%
C%a_index%:=""
stringsplit,c,a_loopfield,%dlm% ;-- add columns
}
GUI,3:+AlwaysOnTop
Gui,3:Font, S12 CBlack , Lucida Console
x :=10
y :=20
d :=15
Gui,3:add,text,section x%x% y%y% w0 h0,
I=0
Loop,%total%
{
i++
i:=SubStr(0 i, -1) ;- i 01-09
ch:=h%a_index%
Gui,3:add,text,xs y+%d% h27,%ch%
}
x :=120
Gui,3:add,text,section x%x% y%y% w0 h0,
I=0
Loop,%total%
{
i++
i:=SubStr(0 i, -1) ;- i 01-09
ch:=h%a_index%
Gui,3:add,edit,xs y+%d% w700 h27 vE%a_index%,% C%a_index%
}
Gui,3:Add, Button, x850 y10 w40 h27, OK
Gui,3:show,x500 y10 w900 ,MODIFY
GuiControl,3:Focus,E1
send,^{end}
return
;--------------
3GuiClose:
3GuiEscape:
Gui, 3:Destroy
return
;--------------
3ButtonOK:
Gui,3:submit
if E1=
{
Gui,3: Destroy
return
}
cm:=""
loop,%total%
cm .= c%a_index% . dlm
stringtrimright,cm,cm,1
en:=""
loop,%total%
en .= e%a_index% . dlm
stringtrimright,en,en,1
FileRead,Filecontent, *P65001 %f1% ;-read as UTF-8
FileDelete, %f1%
StringReplace, FileContent, FileContent, %cm%,%en%
FileAppend, %FileContent%, %f1%,UTF-8
Gui,3:destroy
filecontent=
GoSub,fill ;- <<<
return
;======================= END MODIFY ==============================
;===================== DELETE multiple selected rows =============
Recyclex:
if (searchYN="Search-YES")
{
msgbox,Can't DELETE while Search
return
}
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 ,Want you really delete ? =`n------------`n%C1%
IfMsgBox,No
Return
Else
{
Loop, parse, RFL, |
LV_Delete(A_LoopField)
filedelete,%F1%
allx:=""
k=0
Loop % LV_GetCount()
{
k++
j=0
all:=""
Loop,%total%
{
j++
LV_GetText(colx,k,j)
if colx=
continue
all .= colx . dlm
}
stringtrimright,all,all,1
allx .= all . "`r`n"
}
if allx<>
fileappend,%allx%,%f1%,UTF-8
}
allx=
all=
}
gosub,listboxfill ;- if all rows deleted maybe also the CSV-File is deleted
SplitPath,F1, name, dir, ext, name_no_ext, drive
GuiControl,1:ChooseString, LB1,%name_no_ext% ;- mark this file
sleep,100
ControlClick, , %MainWindowTitle% ;- click on marked file in listbox
return
;===================== END DELETE =================================
;================== function just me ==============================
; https://autohotkey.com/board/topic/80265-solved-which-column-is-clicked-in-listview/
LV_SubitemHitTest(HLV) {
; To run this with AHK_Basic change all DllCall types "Ptr" to "UInt", please.
; HLV - ListView's HWND
Static LVM_SUBITEMHITTEST := 0x1039
VarSetCapacity(POINT, 8, 0)
; Get the current cursor position in screen coordinates
DllCall("User32.dll\GetCursorPos", "Ptr", &POINT)
; Convert them to client coordinates related to the ListView
DllCall("User32.dll\ScreenToClient", "Ptr", HLV, "Ptr", &POINT)
; Create a LVHITTESTINFO structure (see below)
VarSetCapacity(LVHITTESTINFO, 24, 0)
; Store the relative mouse coordinates
NumPut(NumGet(POINT, 0, "Int"), LVHITTESTINFO, 0, "Int")
NumPut(NumGet(POINT, 4, "Int"), LVHITTESTINFO, 4, "Int")
; Send a LVM_SUBITEMHITTEST to the ListView
SendMessage, LVM_SUBITEMHITTEST, 0, &LVHITTESTINFO, , ahk_id %HLV%
; If no item was found on this position, the return value is -1
If (ErrorLevel = -1)
Return 0
; Get the corresponding subitem (column)
Subitem := NumGet(LVHITTESTINFO, 16, "Int") + 1
Return Subitem
}
;------ move GUI -------------
WM_LBUTTONDOWN(wParam, lParam, msg, hwnd)
{
Gui, +LastFound
Checkhwnd := WinExist()
if hwnd = %Checkhwnd%
PostMessage, 0xA1, 2
;- 0x201 is the number for Windows Message WM_LBUTTONDOWN, which is the message Windows sends when the mouse clicks on our window.
;- 0xA1 is WM_NCLBUTTONDOWN, to make Windows think we clicked on the non-client area of the window (the border).
;- The "2" tells windows we clicked on caption at the top of the window, as if to drag it.
}
;================================================================
;--------------- create testfile --------------------------
testfile:
R3C =%a_scriptdir%\M_CSV
ifnotexist,%r3c%
filecreatedir,%r3c%
Ftest1=%R3C%\PT1_Adress.csv
ifnotexist,%ftest1%
{
e1=
(Ltrim Join`r`n
Maria Dolores;0211914498;Lisboa;cc
Miguel Vaquinhas;0218868209;Porto;hhhhh
Rodrigues Fernanda;0218234567;Setubal;kkkkkk
Jim Reeves;0341234567;Atlanta;nnnnn
)
Fileappend,%e1%`r`n,%ftest1%,UTF-8
e1=
}
Ftest2=%R3C%\PT2_Adress.csv
ifnotexist,%ftest2%
{
e2=
(Ltrim Join`r`n
Test Maria Dolores,+34-211914498,Lisboa
Test Miguel Vaquinhas,+33-218868209,Porto
Test Rodrigues Fernanda,+31-218234567,Setubal
Test Jim Reeves2,+1-341234567,Atlanta
Test Li xiang lan / Ye lai xiang,https://www.youtube.com/watch?v=yKbzBGntI8Q,李香蘭 夜來香
Test Windows,C:\windows,Test
Email,garry.hughes@aol.no,Test
)
Fileappend,%e2%`r`n,%ftest2%,UTF-8
e2=
}
Ftest3=%R3C%\PEARL.csv
ifnotexist,%ftest3%
{
e3=
(Ltrim Join`r`n
PrinterCopyScanFax_PANTUM-M6600NW;PV-8850;169.95;20181031;https://www.pearl.ch/ch-a-PV8850-1121.shtml;TEXT
Videorecorder;NX-4445;269.95;;https://www.pearl.ch/ch-a-NX4445-1241.shtml;TEXT
)
Fileappend,%e3%`r`n,%ftest3%,UTF-8
e3=
}
Ftest4=%R3C%\AHK-HELP.csv
ifnotexist,%ftest4%
{
e4=
(Ltrim Join`r`n
Tutorial;https://autohotkey.com/docs/Tutorial.htm;http://www.daviddeley.com/autohotkey/xprxmp/autohotkey_expression_examples.htm;https://riptutorial.com/Download/autohotkey.pdf;https://maul-esel.github.io/ahkbook/en/Introduction
)
Fileappend,%e4%`r`n,%ftest4%,UTF-8
e4=
}
return
;============ END script ====================================
;============================================================
LISTVIEW , MENU rightclick on row , 2-TAB 2-Files , Modify / Delete / Add / RUN> URL,Program,Email
Code: Select all
;- ListView-Example - 2-TAB / MODIFY / DELETE / ADD-New / RUN> URL,Program,Email
modified = 20181128
created = 20181128
#NoEnv
#Warn
SendMode Input
SetWorkingDir, %A_ScriptDir%
SetTitleMatchMode 2
SetBatchLines, -1
FileEncoding, UTF-8
MainWindowTitle=ListView_Test
dlm = `;
gosub,test1 ;-- create 2 text-files for 2 ListViews ( test )
Gui,2:default
Gui,2: -DPIScale
SS_REALSIZECONTROL := 0x40
Gui,2:Font,s12 cGray, Verdana
Gui,2:Color,Black,
gui,2:add, Tab2, x10 y10 w850 h470 gtabchange vTabNr AltSubmit, Adress|Regex
gui,2:tab, Adress
gui,2:add, listview,x20 y60 w820 h400 grid cWhite backgroundteal hwndLV1 v1 gLVEvents +altsubmit -multi, Name|Surname|Phone
T1=300
T2=300
T3=200
LV_ModifyCol(1,T1)
LV_ModifyCol(2,T2)
LV_ModifyCol(3,T3)
lv=1
fx=%f1%
gosub,fill
Gui,2:add,button, x400 y510 gAddNew,ADD_NEW-1
gui,2:tab, Regex
gui,2:add, listview,x20 y60 w820 h400 grid cWhite backgroundteal hwndLV2 v2 gLVEvents +altsubmit -multi, Name|URL
T2a:=500
LV_ModifyCol(1,T1)
LV_ModifyCol(2,T2a)
lv=2
fx=%f2%
gosub,fill
Gui,2:add,button, x400 y510 gAddNew,ADD_NEW-2
;--------- rightclick Listview Row ------------
Menu, CMenu, Add, DELETE , menuDo
Menu, CMenu, Add, MODIFY , menuDo
gui,2: show,x10 y1 w1000 h570,%MainWindowTitle%
RETURN
;--------------------------
2Guiclose:
exitapp
;--------------------------
;-------------------------------------------------------------------------------------
tabchange:
GuiControlGet, TabNr
Return
;-------------------------------------------------------------------------------------
;-------------- Fill Listview xy.CSV -----------
Fill:
Gui,2:default
LV_Delete()
FileRead,aac, *P65001 %fx% ;-read as UTF-8
for each, Line in StrSplit(aac, "`n", "`r")
{
if line=
continue
Columns := StrSplit(Line,dlm)
LV_Add("",Columns*)
}
return
;------------------------------------------------
LVevents:
Gui,2:default
Gui,2:submit,nohide
gui,2:listview,%TabNr%
;------------
if (TabNr=1)
{
fx=%f1%
total=3
}
if (TabNr=2)
{
fx=%f2%
total=2
}
;------------
RN:=LV_GetNext("C")
RF:=LV_GetNext("F")
GC:=LV_GetCount()
if (rn=0)
return
;-----------------
if A_GuiEvent = Doubleclick
{
Row := A_EventInfo
Col := LV_SubitemHitTest(LV1)
LV_GetText(result, Row, Col)
stringmid,urlx ,result,1,4
stringmid,pathx,result,2,2
if (urlx="http" || pathx=":\")
{
try
run,%result%
catch e
{
xxx:=e.Message
msgbox, 262208,ERROR,Error=`n%xxx%`n------------------------------------------`n%result%
}
return
}
if result contains @
{
try
run, mailto:%result%?subject=Greetings&body=Hello how are you?`%0A`%0ATest1`%0ATest2
return
}
}
;--------------
if A_GuiEvent = Rightclick
{
Row := A_EventInfo
Col := LV_SubitemHitTest(LV1)
LV_GetText(result, Row, Col)
loop,%total%
c%a_index%:=""
all:=""
loop,%total%
{
LV_GetText(colx,a_eventinfo,a_index)
all .= colx . dlm
}
stringtrimright,cx,all,1
goto,menux
}
return
;------------- MENU when rightclick on row ----------
menux:
if (rn=0)
return
MouseGetPos, musX, musY
Menu, CMenu, Show, %musX%,%musY%
return
menudo:
Gui,2:submit,nohide
If (A_ThisMenuItem = "DELETE")
gosub,DELETEx ;- <<<
If (A_ThisMenuItem = "MODIFY")
gosub,MODIFYx ;- <<<
return
;======================================================================
;========================== deleteONE ============================
DELETEx:
Gui,2:submit,nohide
;MsgBox,You selected column=%col% in row=%row% =>> %result%`n-------------------`nALL=`n%cx%
msgbox, 262436,Delete,Want you really delete the row %row%=`n%cx% ?
IfMsgBox,No
Return
FileRead,AA,%Fx%
Filedelete,%Fx%
StringReplace,BB,AA,%cx%`r`n,,
FileAppend,%BB%,%Fx%
aa=
bb=
gosub,fill
return
;=================================================================
;================ modify ======================================
MODIFYx:
Gui,2:submit,nohide
loop,parse,cx,`n,`r
{
if (a_loopfield="")
continue
loop,%total%
{
C%a_index%:=""
H%a_index%:=""
}
stringsplit,c,a_loopfield,%dlm% ;-- add columns
}
GUI,3:+AlwaysOnTop
Gui,3:Font, S12 CBlack , Lucida Console
x :=10
y :=20
d :=15
Gui,3:add,text,section x%x% y%y% w0 h0,
I=0
Loop,%total%
{
i++
i:=SubStr(0 i, -1) ;- i 01-09
ch:=h%a_index%
Gui,3:add,text,xs y+%d% h27,%ch%
}
x :=120
Gui,3:add,text,section x%x% y%y% w0 h0,
I=0
Loop,%total%
{
i++
i:=SubStr(0 i, -1) ;- i 01-09
ch:=h%a_index%
Gui,3:add,edit,xs y+%d% w700 h27 vE%a_index%,% C%a_index%
}
Gui,3:Add, Button, x850 y10 w40 h27, OK
Gui,3:show,x500 y10 w900 ,MODIFY
GuiControl,3:Focus,E1
send,^{end}
return
;--------------
3GuiClose:
3GuiEscape:
Gui, 3:Destroy
return
;--------------
3ButtonOK:
Gui,3:submit
if E1=
{
Gui,3: Destroy
return
}
cm:=""
loop,%total%
cm .= c%a_index% . dlm
stringtrimright,cm,cm,1
en:=""
loop,%total%
en .= e%a_index% . dlm
stringtrimright,en,en,1
FileRead,Filecontent, *P65001 %fx%
FileDelete, %fx%
StringReplace, FileContent, FileContent, %cm%,%en%
FileAppend, %FileContent%, %fx%,UTF-8
Gui,3:destroy
filecontent=
GoSub,fill ;- <<<
return
;======================= END MODIFY ==============================
;================== ADD NEW ==================================
;------------- Listbox ADD NEW ----------------------------
addNew:
Gui,2:submit,nohide
SplitPath,Fx, name, dir, ext, name_no_ext, drive
if (ext="")
return
loop,%total%
{
C%a_index%:=""
H%a_index%:=""
}
Gui,96:+Owner
GUI,96:+AlwaysOnTop
Gui,96:Font, S12 CBlack , Lucida Console
x :=10
y :=20
d :=15
Gui,96:add,text,section x%x% y%y% w0 h0,
I=0
Loop,%total%
{
i++
i:=SubStr(0 i, -1) ;- i 01-09
ch:=h%a_index%
Gui,96:add,text,xs y+%d% h27,%ch%
}
x :=120
Gui,96:add,text,section x%x% y%y% w0 h0,
I=0
Loop,%total%
{
i++
i:=SubStr(0 i, -1) ;- i 01-09
ch:=h%a_index%
Gui,96:add,edit,xs y+%d% w700 h27 vC%a_index%,
}
Gui,96:Add, Button, x850 y10 w40 h27, OK
Gui,96:show,x500 y10 w900 ,ADD_NEW
GuiControl,96:Focus,C1
send,^{end}
return
;-----------
96GuiClose:
96GuiEscape:
Gui,96:Destroy
return
;-----------
96ButtonOK:
Gui,96:submit
ch:=""
loop,%total%
ch .= c%a_index% . dlm
stringtrimright,ch,ch,1
if C1<>
FileAppend,%ch%`r`n,%fx%,UTF-8
ch=
loop,%total%
C%a_index%:=""
Gui,96:Destroy
Gosub,fill
return
;====================== END ADD NEW =======================
;================== function from user 'just me' ==============================
; https://autohotkey.com/board/topic/80265-solved-which-column-is-clicked-in-listview/
LV_SubitemHitTest(HLV) {
; To run this with AHK_Basic change all DllCall types "Ptr" to "UInt", please.
; HLV - ListView's HWND
Static LVM_SUBITEMHITTEST := 0x1039
VarSetCapacity(POINT, 8, 0)
; Get the current cursor position in screen coordinates
DllCall("User32.dll\GetCursorPos", "Ptr", &POINT)
; Convert them to client coordinates related to the ListView
DllCall("User32.dll\ScreenToClient", "Ptr", HLV, "Ptr", &POINT)
; Create a LVHITTESTINFO structure (see below)
VarSetCapacity(LVHITTESTINFO, 24, 0)
; Store the relative mouse coordinates
NumPut(NumGet(POINT, 0, "Int"), LVHITTESTINFO, 0, "Int")
NumPut(NumGet(POINT, 4, "Int"), LVHITTESTINFO, 4, "Int")
; Send a LVM_SUBITEMHITTEST to the ListView
SendMessage, LVM_SUBITEMHITTEST, 0, &LVHITTESTINFO, , ahk_id %HLV%
; If no item was found on this position, the return value is -1
If (ErrorLevel = -1)
Return 0
; Get the corresponding subitem (column)
Subitem := NumGet(LVHITTESTINFO, 16, "Int") + 1
Return Subitem
}
;================================================================================
;===============================================
;--- create a testfile ---------------
test1:
;dlm = `,
F1=%A_scriptdir%\test1.txt
ifnotexist,%f1%
{
e1=
(Ltrim Join`r`n
Miller%dlm%Harry%dlm%123
Garry%dlm%Email%dlm%garry@aol.pt
Windows%dlm%Program%dlm%C:\windows
Lilian de Celis%dlm%https://www.youtube.com/watch?v=EFSZnC3-E4A%dlm%
Li Xiang Lan%dlm%https://www.youtube.com/watch?v=yKbzBGntI8Q%dlm%
)
Fileappend,%e1%`r`n,%f1%
}
F2=%A_scriptdir%\test2.txt
ifnotexist,%f2%
{
e2=
(Ltrim Join`r`n
2-REGEX ahk%dlm%https://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm
2-REGEX regular%dlm%https://www.regular-expressions.info/
2-REGEX regenechsen%dlm%http://www.regenechsen.de/phpwcms/index.php
2-Regex 101%dlm%https://regex101.com/
)
Fileappend,%e2%`r`n,%f2%
}
e1=
e2=
return
;--- end create a testfile -----------
;================== END script ==========================================================
Listview with 2 TABs and 2 Files / modify / ADD / Delete / Search
Code: Select all
MODIFIED=20140605
;- Listview >>> ADD_NEW / MODIFY / DELETE / SEARCH
MainWindowTitle=ListView_Test1
transform,T,chr,09
delim = `,
first1:=0
gosub,test1 ;-- create 2 text-files for 2 ListViews ( test )
Gui,2:default
Gui,2: Font,CDefault,Fixedsys
Gui,2: Margin, 10, 10
Tabnumber:=1
gui,2:add, Tab2, x10 y10 w540 h250 gtabchange vTabnumber AltSubmit, Links|Regex
gui,2:tab, Links
gui,2:add, listview,x10 y40 w520 h400 grid cWhite backgroundteal hwndLV1 vLV1 gListViewEvents +altsubmit -multi, A|B
gosub,fill1
gosub,width1
Gui,2:add,button, x10 y450 gPrintLV1,Print
Gui,2:Add, Edit, x100 y450 w250 gFind vSrch1,
Gui,2:add,button, x400 y450 gAddNew1,ADD_NEW
gui,2:tab, Regex
gui,2:add, listview,x10 y40 w520 h400 grid cWhite backgroundteal hwndLV2 vLV2 gListViewEvents +altsubmit -multi, A|B
gosub,fill2
gosub,width1
Gui,2:add,button, x10 y450 gPrintLV1,Print
Gui,2:Add, Edit, x100 y450 w250 gFind vSrch2,
Gui,2:add,button, x400 y450 gAddNew1,ADD_NEW
gui,2: show,x10 y1 w600 h500,%MainWindowTitle%
gosub,tabchange
RETURN
2Guiclose:
exitapp
width1:
T1=300
T2=200
LV_ModifyCol(1,T1)
LV_ModifyCol(2,T2)
;LV_ModifyCol(2,"Integer")
return
;-------------------------------------------------------------------------------------
tabchange:
GuiControlGet, Tabnumber
GuiControl,2:Focus,srch%tabnumber%
Return
;-------------------------------------------------------------------------------------
;---------------- SEARCH -------------------
Find:
Gui,2: Submit, Nohide
Gui,2:listview, LV%Tabnumber%
Fx=%A_scriptdir%\test%tabnumber%.txt
src:= % srch%Tabnumber%
if (SRC="")
{
goto,Fill%Tabnumber%
return
}
LV_Delete()
loop,read,%fx%
{
LR=%A_loopReadLine%
if SRC<>
{
if LR contains %src%
{
stringsplit,C,A_LoopReadLine,%delim%
LV_Add("",C1,C2)
}
}
else
continue
}
LV_Modify(LV_GetCount(), "Vis")
if (SRC="")
goto,Fill%Tabnumber%
return
;------------------- LISTVIEW --------------
ListViewEvents:
Gui,2:default
Gui,2:listview, LV%Tabnumber%
if(A_GuiEvent == "Normal")
{
LV_GetText(C1, A_EventInfo, 1)
LV_GetText(C2, A_EventInfo, 2)
}
if(A_GuiEvent == "DoubleClick")
{
LV_GetText(C2, A_EventInfo, 2)
stringmid,url1,c2,1,7
stringmid,pth1,c2,2,2
if ((url1="http://") or (pth1=":\"))
run,%c2%
return
}
if(A_GuiEvent == "RightClick")
{
LV_GetText(C1, A_EventInfo, 1)
LV_GetText(C2, A_EventInfo, 2)
gosub,Modify1
return
}
if A_GuiEvent=K
{
GetKeyState,state,DEL ;- << DELETE
if state=D
{
RowNumber:=LV_GetNext()
LV_Delete(RowNumber)
gosub,Modify2
return
}
return
}
RETURN
;--------------------------------------------------------------
;---------------- MODIFY ----------------
Modify1:
Gui,3: +AlwaysonTop
Gui,3: Font, s10, Verdana
gui, 3:listview, LV%Tabnumber%
Gui,3:add, edit, w300 h30 vC1, %C1%
Gui,3:add, edit, w300 h30 vC2, %C2%
Gui,3: Add,Button, x12 gACCEPT1 default, Accept
Gui,3: Add,Button, x+4 gCANCEL1, Cancel
Gui,3:show,center, LV_Modify
return
accept1:
Gui,2:default
Gui,3:submit,nohide
gui 3:listview, LV%Tabnumber%
RowNumber := LV_GetNext()
c1:= % c1
c2:= % c2
lv_modify(rownumber, "col1" , C1 )
lv_modify(rownumber, "col2" , C2 )
gosub,modify2
Gui,3:destroy
return
cancel1:
3Guiclose:
Gui,3:destroy
return
;-----------------------------------------------------------------
;---------------- ADD NEW ----------------
ADDNEW1:
Gui,4: +AlwaysonTop
Gui,4: Font, s10, Verdana
Gui,4:listview, LV%Tabnumber%
Gui,4:add, edit, w300 h30 vC1,
Gui,4:add, edit, w300 h30 vC2,
Gui,4: Add,Button, x12 gACCEPT4 default, Accept
Gui,4: Add,Button, x+4 gCANCEL4, Cancel
Gui,4:show,center,Add_NEW
return
accept4:
Gui,2:default
Gui,4:submit,nohide
Gui,4:listview, LV%Tabnumber%
Fx=%A_scriptdir%\test%tabnumber%.txt
Fileappend,%c1%%delim%%c2%`r`n,%fx%
gosub,fill%tabnumber%
Gui,4:destroy
return
cancel4:
4Guiclose:
Gui,4:destroy
return
;-----------------------------------------------------------------
;------------------ FILL ----------------------------
Fill1:
gui,2:listview, listview%Tabnumber%
LV_Delete()
loop,read,%F1%
{
LR=%A_loopReadLine%
if LR=
continue
C1 =
C2 =
stringsplit,C,LR,%delim%,
LV_Add("", c1,c2)
}
LV_ModifyCol(1, "Sort CaseLocale") ; or "Sort CaseLocale"
LV_Modify(LV_GetCount(), "Vis") ;scrolls down
return
Fill2:
gui, 2:listview, listview%Tabnumber%
LV_Delete()
loop,read,%F2%
{
LR=%A_loopReadLine%
if LR=
continue
C1 =
C2 =
stringsplit,C,LR,%delim%,
LV_Add("", c1,c2)
}
LV_ModifyCol(1, "Sort CaseLocale") ; or "Sort CaseLocale"
LV_Modify(LV_GetCount(), "Vis") ;scrolls down
return
;---------------------------------------------------
;------------------- Modify Text -------------------------
Modify2:
Fx=%A_scriptdir%\test%tabnumber%.txt
ifexist,%fx%
filedelete,%fx%
ControlGet,AA,List,,SysListView32%tabnumber%,%MainWindowTitle% ;<< the correct name of listview
if aa<>
{
stringreplace,AA,AA,%t%,%delim%,all ;<< replaces TAB with Delimiter
stringreplace,AA,AA,`n,`r`n,all
;msgbox, 262208, ,%aa%
fileappend,%AA%,%fx%
aa=
return
}
return
;------------------------------------------------------------------
;------------------- PRINT-Listview -------------------------
PrintLv1:
FileTest=%a_scriptdir%\PrintListview55.txt
ifexist,%filetest%
filedelete,%filetest%
ControlGet,AA,List,,SysListView32%tabnumber%,%MainWindowTitle% ;<< the correct name of listview
if aa<>
{
stringreplace,AA,AA,%t%,%delim%,all ;<< replaces TAB with Delimiter
stringreplace,AA,AA,`n,`r`n,all
;msgbox, 262208, ,%aa%
fileappend,%AA%,%filetest%
aa=
run,%filetest%
return
}
return
;------------------------------------------------------------------
;--- create a testfile ---------------
test1:
;delim = `,
F1=%A_scriptdir%\test1.txt
ifnotexist,%f1%
{
e1=
(Ltrim Join`r`n
1-Youtube Monty Python%delim%http://www.youtube.com/MontyPython
1-Li Xianglan wikipedia%delim%http://en.wikipedia.org/wiki/Li_Xianglan
)
Fileappend,%e1%`r`n,%f1%
}
F2=%A_scriptdir%\test2.txt
ifnotexist,%f2%
{
e2=
(Ltrim Join`r`n
2-REGEX ahk%delim%http://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm
2-REGEX regular%delim%http://www.regular-expressions.info/
2-REGEX regenechsen%delim%http://www.regenechsen.de/phpwcms/index.php
2-Regex 101%delim%http://regex101.com/
)
Fileappend,%e2%`r`n,%f2%
}
e1=
e2=
return
;--- end create a testfile -----------
;================== END script ==========================================================
Listview / add / modify / delete-multiple /
some old examples :
http://www.autohotkey.com/board/topic/4279-listview-select-column-and-start-emailurlprogram/
Code: Select all
;-http://www.autohotkey.com/board/topic/4279-listview-select-column-and-start-emailurlprogram/
;--------- LISTVIEW EXAMPLE -------------------------------------------
;-- edit
; delete multiple marked rows
; add
;- example creates a subfolder _CSV with 2 text-files
;----------------------------------------------------------------------
modified=20140418
#NoEnv
SendMode Input
SetBatchLines, -1
SetWorkingDir, %A_ScriptDir%
d=`; ;- delimiter
gosub,create2Testfiles
Gui,1:Font,S13 CDefault,Lucida Console
Gui,1:Add, ListView,backgroundteal csilver grid r10 x110 y0 w480 +hscroll altsubmit gLW2, Name|URL1
LV_ModifyCol()
Gui,1:Show,x0 y0 w600 h260,Listview_Example01 Edit=F12 DELETE=Rightclick
Gui,1:add,Listbox,x5 y10 w100 h200 Sort vLB1 gLB
Loop,%R3C%\*.csv
{
FX=%A_LoopFileName%
stringlen,L1,FX
stringmid,FA,FX,1,L1-4
GuiControl,,LB1,%FA%
}
GuiControl, ChooseString, LB1, EX1 ;- select EX1 file
;GuiControl, ChooseString, LB1, %fa% ;- select last-file
Gui,1:Font, S10 CDefault , FixedSys
Gui,1:Add,Button,gAddUrl x5 y230 w120 h20,AddUrl
;=============================================================================
LB:
Gui, 1:Default
Gui,1:Submit,nohide
LV_Delete()
LV_ModifyCol(1,220)
LV_ModifyCol(2,220)
F2=%R3C%\%LB1%.csv
loop,read,%F2%
{
BX1=
BX2=
stringsplit,BX,A_LoopReadLine,%d%,
LV_Add("",BX1,BX2)
}
return
;==============================================================
AddUrl:
if LB1=
{
msgbox,select first a genre (EX1, EX2 ....)
return
}
GuiControl,2:Focus,Name
Gui,2:Font, S10 CDefault , FixedSys
Gui,2:Add,Text, x1 y5 w80 h20, NAME
Gui,2:Add,Edit, x80 y5 w500 h20 vA21, %A21%
Gui,2:Add,Text, x1 y30 w80 h20, URL1
Gui,2:Add,Edit, x80 y30 w500 h20 vA22, %A22%
Gui,2:Add, Button, x550 y80 w40 h25, OK
Gui,2:Show, x2 y385 w600 h110, URL-INPUT
return
;---------------------------------------
2GuiClose:
2GuiEscape:
Gui,2: Destroy
return
2ButtonOK:
Gui,2:submit
if A21=
{
Gui,2: Destroy
return
}
FILEAPPEND, %A21%%d%%A22%`r`n,%F2%
Gui,2: Destroy
GoSub, LB ;update LV
return
;============================================================
LW2:
Gui, Submit,nohide
if A_GuiEvent = Normal
{
LV_GetText(C1,A_EventInfo,1)
LV_GetText(C2,A_EventInfo,2)
RN:=LV_GetNext("C")
RF:=LV_GetNext("F")
GC:=LV_GetCount()
Goto,SK12
}
;----------------------------
SK12:
if A_GuiEvent=K
{
GetKeyState,state,F12
if state=D
{
if LB1=
{
msgbox,select first a genre (EX1 or EX2....)
return
}
GuiControl,3:Focus,Name
Gui,3:Font, S10 CDefault , FixedSys
Gui,3:Add,Text, x1 y5 w80 h20, NAME
Gui,3:Add,Edit, x80 y5 w500 h20 vA31, %C1%
Gui,3:Add,Text, x1 y30 w80 h20, URL1
Gui,3:Add,Edit, x80 y30 w500 h20 vA32, %C2%
Gui,3:Add, Button, x550 y80 w40 h25, OK
Gui,3:Show, x2 y385 w600 h100, URL-INPUT
return
;---------------------------------------
3GuiClose:
3GuiEscape:
Gui, 3:Destroy
return
3ButtonOK:
Gui,3:submit
if A31=
{
Gui,3: Destroy
return
}
FileRead, FileContent, %R3C%\%LB1%.csv
FileDelete, %R3C%\%LB1%.csv
StringReplace, FileContent, FileContent, %C1%%d%%C2%, %A31%%d%%A32%
FileAppend, %FileContent%, %R3C%\%LB1%.csv
GoSub, LB
Goto,3guiclose
}
}
;============== RUN =========
if A_GuiEvent = DoubleClick
{
run,%C2%
return
}
;--------- DELETE multiple marked rows ---------------------
if A_GuiEvent = RightClick
{
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, 4, ,Want you really delete %C1% ?
IfMsgBox,No
Return
Else
{
Loop, parse, RFL, |
LV_Delete(A_LoopField)
filedelete,%F2%
Loop % LV_GetCount()
{
BX1=
BX2=
LV_GetText(BX1,A_INDEX,1)
LV_GetText(BX2,A_INDEX,2)
fileappend,%BX1%%d%%BX2%`r`n,%F2%
}
}
C1=
C2=
}
return
}
return
;------------------------
GuiClose:
ExitApp
;-------------------------------------------------------
create2Testfiles:
R3C=%A_scriptDir%\_CSV
ifnotexist,%R3C%
FileCreateDir,%R3C%
RM1=%A_scriptDir%\_CSV\EX1.csv
ifnotexist,%RM1%
{
fileappend,Archive_Math%d%http://archives.math.utk.edu/popmath.html`r`n,%RM1%
fileappend,Archive_org%d%http://www.archive.org`r`n,%RM1%
fileappend,Archive_Video%d%https://www.youtube.com/channel/UCGp4u0WHLsK8OAxnvwiTyhA`r`n,%RM1%
fileappend,Humour_Dilbert%d%http://dilbert.com`r`n,%RM1%
fileappend,Youtube_Sunset%d%http://youtube.googleapis.com/v/XEvoFLbvXMc?start=1512&end=1677&autoplay=1&version=3`r`n,%RM1%
}
RM2=%A_scriptDir%\_CSV\EX2.csv
ifnotexist,%RM2%
{
fileappend,Autohotkey%d%http://ahkscript.org/boards/index.php`r`n,%RM2%
fileappend,Puzzle games%d%http://www.chiark.greenend.org.uk/~sgtatham/puzzles/`r`n,%RM2%
}
return
;=================== end script ============================================