[GUI]TreeVIEW控件实例:动态加载本地文件

[GUI]TreeVIEW控件实例:动态加载本地文件

;-------- saved at Montag, 3. November 2008 12:52:53 --------------
;-------- http://www.autohotkey.com/forum/topic37274.html ---

MODIFIED=20110725

/*
-first start shows desktop-tree
( add your own favorite tree-roots )
-some programs for gwbasic
-open ahk/basic/text files in editbox or start with doubleclick
-open pictures and use keys UP/DOWN or SPACE
*/

#NoEnv
#Persistent
#NoTrayIcon
#SingleInstance Force
setworkingdir,%A_scriptdir%

Sendmode,InputThenPlay

SetBatchLines -1
SetWinDelay -1
SetControlDelay -1
Process Priority , , High
transform,S,chr,32

PR=c:\gwbasic.exe

EXT2 =txt,ahk,csv,bat,bak,bas,css,ba,ini,hta,log ;-- only show these extensions in EditBox
EXT3 =png,jpg,bmp,tif,gif ;-- pictures

;-- allow to start without asking:
EXT9 =pdf,mov,mp4,mp3,flv,txt,ahk,csv,ini,hta,png,jpg,bmp,tif,gif,txt,ahk,csv,bas,ini,hta
RSSINI=%A_scriptdir%\LV_TreeviewINI.txt
ifnotexist,%rssini%
IniWrite,Desktop,%rssini%,Root1,KEY1
IniRead,RootX,%rssini%,Root1,KEY1
gosub,aax2

Menu,S1,add,MyTREE ,MH1
Menu,S1,add,DOCTXT ,MH1
Menu,S1,add,VIDEO ,MH1
Menu,S1,add,FOTO ,MH1
Menu,S1,add,MUSIC ,MH1
Menu,S1,add,Filme ,MH1
Menu,S1,add,csvtxt ,MH1
Menu,S1,add,Desktop ,MH1
;----------------------------
Menu,S2,add,Volume ,MH2
Menu,S2,add,Charmap ,MH2
;Menu,S2,add,MySaPrograms,MH2
;Menu,S2,add,SaPrograms ,MH2
;----------------------------
menu,myMenuBar,Add,ROOT ,:S1
menu,myMenuBar,Add,Programme ,:S2

;----------------------------
gui,2:menu,MyMenuBar
;----------------------------

WA=%A_screenwidth%
HA=%A_screenheight%
SHOWW:=(WA*99)/100 ;-- GUI width
SHOWH:=(HA*93)/100 ;-- GUI height
TRH:=(HA*72)/100
LWH:=(HA*72)/100
EDH:=(HA*86)/100
PIH:=(HA*65)/100 ;-- picture height
BT1:=(HA*83)/100 ;-- buttons
BT2:=(HA*86)/100 ;-- buttons
BT3:=(HA*88)/100 ;-- buttons

X1:=(WA*1 )/100
W1:=(WA*11 )/100
X2:=(WA*12.5)/100
W2:=(WA*13 )/100
X3:=(WA*26.5)/100
W3:=(WA*72)/100
W9:=(WA*97)/100

Gui,2:default
Gui,2: margin, 0, 0

Gui,2: Add, TreeView, vMyTree1 x%x1% y0 w%w1% h%trh% vMyTree1 gMyTree ImageList%ImageListID%
Gui,2: Add, ListView, vMyList1 x%x2% y0 w%w2% h%lwh% vMyList1 gMyList -hdr -multi AltSubmit, Name
Gui,2:Font,,FixedSys
Gui,2:Add, Edit , x%x3% y0 w%w3% h%edh% vA2x ,
Gui,2: Add, Button , x10 y%bt1% w100 h22 gOpen1 ,Text-File
Gui,2: Add, Button , x10 y%bt2% w100 h22 gSave1 ,Text-SAVE
Gui,2: Add, Button , x120 y%bt1% w100 h22 gOpen2 ,Folder

Gui,2: Add, Button , section x%x3% y%bt3% w130 h22 gGWBASIC1 ,GWBASIC-convert
Gui,2: Add, Button , xp+140 y%bt3% w110 h22 gGWBASIC2 ,GWBASIC-RUN
Gui,2: Add, Button , xp+120 y%bt3% w120 h22 gSystem1 ,GWBASIC-CLOSE
;Gui,2: Add, Button , xp+130 y%bt3% w90 h22 g80Chars ,80-Chars
;Gui,2: Add, Button , xp+100 y%bt3% w90 h22 gREMARKS ,Remarks
Gui,2: Add, Button , xp+200 y%bt3% w90 h22 gReload1 ,Reload

ImageListID1 := IL_Create(10)
ImageListID2 := IL_Create(10, 10, true)

LV_SetImageList(ImageListID1)
LV_SetImageList(ImageListID2)

Gui,2: Add, StatusBar, gMyStatusBar
SB_SetParts(W1,W2,W3)

SplashTextOn, 200, 25, Explorer, Loading...
gosub,readtree
SplashTextOff

Gui,2: Show,x0 y0 w%showw% h%showh%,TREEVIEW Example
return
;--------------------------------------------------------

Readtree:
TV_Delete()
LV_Delete()

AddSubFoldersToTree(TreeRoot)
GuiControl,2: -Redraw, MyTree1
AddSubFoldersToTree(folder, ID = 0)
{
if ID = 0
ID := TV_Add(truc, truc , "Icon10 select expand")
Loop %folder%\*.*, 2
AddSubFoldersToTree(A_LoopFileFullPath, TV_Add(A_LoopFileName, ID , "Icon4"))
}
GuiControl,2: +Redraw, MyTree1

return
;--------------------------------------------------
3Guiclose:
gui,3:destroy
return
;--------------------------------------------------

2GuiClose:
gui,3:destroy
ExitApp
;--------------------------------------------------
Reload1:
reload
return

Open2:
Gui,2:submit,nohide
run,%SelectedFullPath%
return
;--------------------------------------------------
;---- textfile -----------
OPEN1:
Gui,2: Submit,nohide
;msgbox, 262208,Message,File=%f1%
SplitPath, F1, name, dir, ext, name_no_ext, drive
If Ext Not In %ext2%
return
else
run,notepad %f1%
return
;--------------------------------------------------

save1:
Gui,2: Submit,nohide
GuiControlGet,C,,A2x
if (F1="" or C="")
return
;msgbox, 262208,Message,File=%f1%`n%c%
;return
SplitPath, F1, name, dir, ext, name_no_ext, drive
If Ext Not In %ext2%
return
else
{
msgbox, 262436, ,Want you overwrite`n%F1% ?
ifmsgbox,NO
return
ifmsgbox,Cancel
return
}

;-- or use filedelete --
filerecycle,%f1%
stringreplace,C,C,`n,`r`n,all
Fileappend,%c%`r`n,%f1%
;msgbox, 262208,Message,File %F1% is saved
;run,%f1%
run,%SelectedFullPath% ;-- open folder
return
;--------------------------------------------------

;------------------------------------------------------------------
MH1:
IniRead,CC3,%rssini%,Root1,KEY1
if CC3<>%A_ThisMenuItem%
{
IniWrite,%A_ThisMenuItem%,%rssini%,Root1,KEY1
;IniRead,RootX,%rssini%,Root1,KEY1
Rootx=%A_ThisMenuItem%
gosub,AAX2
return
}
aax2:
if RootX=doctxt
Treeroot=c:\M_doctxt
if RootX=csvtxt
Treeroot=c:\M_csvtxt
if RootX=music
Treeroot=c:\M_music
if RootX=Filme
Treeroot=c:\M_Filme
if RootX=Video
Treeroot=c:\M_VIDEO
if RootX=Foto
Treeroot=c:\M_Foto
if RootX=MyTree
Treeroot=C:\1A\_00_MAIN_AHK\1A_MyTreeview
if RootX=Desktop
Treeroot=%A_desktop%

gosub,readtree
return
;------------------------------------------------------------------
;------------------------------------------------------------------
MH2:
if A_thisMenuItem=Volume
{
run,sndvol32
run,sndvol32 /rec
CN=RunDLL32.EXE shell32.dll,Control_RunDLL mmsys.cpl,,1
run,%CN%
}
if A_thisMenuItem=Charmap
run,charmap

/*
if A_thisMenuItem=MySaPrograms
run,C:\1A\_00_MAIN_AHK\1A_MySaPrograms

if A_thisMenuItem=SaPrograms
run,C:\Programme_Standalone
*/

return
;------------------------------------------------------------------

;------------------------------
MyTree:
if A_GuiEvent <> S
return

GuiControl,2:,A2x,
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%
StringReplace, SelectedFullPath, SelectedFullPath, \\ , \

StringRight, LastChar, SelectedFullPath, 1
if LastChar <> \
SelectedFullPath = %SelectedFullPath%\

FilenameforSB = Loading Files
SB_SetText(SelectedFullPath . FilenameforSB, 1)

LV_Delete()

VarSetCapacity(Filename, 260)
sfi_size = 352
VarSetCapacity(sfi, sfi_size)
if (SelectedItemText = %ParentText%)
rooticonlist= %treeroot%\
else
rooticonlist= %SelectedFullPath%

FileCount = 0
TotalSize = 0

GuiControl,2: -Redraw, MyList1

Loop %rooticonlist%*.*
{
FileName := A_LoopFileFullPath
SplitPath, FileName,,, FileExt
if FileExt in EXE,ICO,ANI,CUR,LNK
{
ExtID := FileExt
IconNumber = 0
}

else
{
ExtID = 0
Loop 7
{
StringMid, ExtChar, FileExt, A_Index, 1
if not ExtChar
break

ExtID := ExtID | (Asc(ExtChar) << (8 * (A_Index - 1)))
}
IconNumber := IconArray%ExtID%
}

if not IconNumber
{
if not DllCall("Shell32\SHGetFileInfoA", "str", FileName, "uint", 0, "str", sfi, "uint", sfi_size, "uint", 0x101)
IconNumber = 9999999
else
{
hIcon = 0
Loop 4
hIcon += *(&sfi + A_Index-1) << 8*(A_Index-1)
IconNumber := DllCall("ImageList_ReplaceIcon", "uint", ImageListID1, "int", -1, "uint", hIcon) + 1
DllCall("ImageList_ReplaceIcon", "uint", ImageListID2, "int", -1, "uint", hIcon)
DllCall("DestroyIcon", "uint", hIcon)
IconArray%ExtID% := IconNumber
}
}

FileCount += 1
TotalSize += A_LoopFileSize
LV_Add("Icon" . IconNumber, A_LoopFileName)
}

GuiControl,2: +Redraw, MyList1

SB_SetText(FileCount . " files", 1)
SB_SetText(Round(TotalSize / 1024, 1) . " KB", 2)
FilenameforSB =
SB_SetText(SelectedFullPath . FilenameforSB, 3)
return
;------------------------------
MyList:
Gui,2:submit,nohide
Gui,2:default
Gui,2:ListView,MyList1

RN:=LV_GetNext("C")
RF:=LV_GetNext("F")
GC:=LV_GetCount()

if RN=0
return
;gui,3:destroy
;GuiControl,2:Enable,A2x
if A_GuiEvent = Normal
{
GuiControl,2: ,A2x,
LV_GetText(FileNameforSB, A_EventInfo, 1)
StringRight, LastChar, SelectedFullPath, 1
if LastChar <> \
SelectedFullPath = %SelectedFullPath%\
;SB_SetText(FileNameforSB, 3)
F1=%SelectedFullPath%%FilenameforSB%
SB_SetText(F1, 3)
SplitPath, F1, name, dir, ext, name_no_ext, drive
;----- if text -----------
If Ext In %ext2%
{
GuiControl,2:Enable,A2x
Fileread,a,%F1%
GuiControl,2: ,A2x, %a%
return
}
;------ pictures ----------
If Ext In %ext3%
gosub,showpict

}
if A_GuiEvent=K
{
LV_GetText(C1,RF,1)
F1=%SelectedFullPath%%C1%
SplitPath, F1, name, dir, ext, name_no_ext, drive

;- scroll Forward with SPACE-key or use UP/DOWN ----------
GetKeyState, State,space
If (State = "D")
{
;msgbox, 262208,SPACE,Pressed SPACE`n`nRow=%rn%`nC1=%c1%,2
RF:=(RF+1)
LV_Modify(RF, "+Select +Focus") ;-- select focus
LV_GetText(C1,RF,1)
F1=%SelectedFullPath%%C1%
SplitPath, F1, name, dir, ext, name_no_ext, drive
if (RF=(GC))
msgbox, 262208, Forward, Row=%rn%`nReached END`n%C1% , 2
If Ext In %ext3%
gosub, showpict
}

GetKeyState,state1,UP
if (state1="D")
{
if RF=1
msgbox, 262208, Backward, Row=%rn%`nReached FirstRow`n%C1% , 2
If Ext In %ext3%
gosub, showpict
}
GetKeyState,state2,DOWN
if (state2="D")
{
if (RF=(GC))
msgbox, 262208, Forward, Row=%rn%`nReached END`n%C1% , 2
If Ext In %ext3%
gosub, showpict
}
}
;------------
if A_GuiEvent = Doubleclick
{
LV_GetText(C1, A_EventInfo, 1)
F1=%SelectedFullPath%%C1%
SplitPath, F1, name, dir, ext, name_no_ext, drive
If Ext In %Ext9%
run,%f1%
else
{
msgbox, 262180, , Want you RUN`n%f1% ?
IfMsgBox,No
return
Else
run,%f1%
}
}
;------------

if A_GuiEvent = Rightclick
{
LV_GetText(C1, A_EventInfo, 1)
F1=%SelectedFullPath%%C1%
SB_SetText(F1,3)
If Ext In %Ext9%
run,%f1%
else
{
msgbox, 262180, , Want you RUN`n%f1% ?
IfMsgBox,No
return
Else
run,%f1%
}
}
return
;------------------------------

ShowPict:
gui,3:destroy
GuiControl,2:Disable,A2x
;Gui,2:Add,Picture,x220 y420 w200 h150 +0x4000000,%f1% ;-- allow once a background behind GUI
Gui,3: +Alwaysontop
Gui,3:Add,Picture,x0 y0 w%w3% h%pih%,%f1%
Gui,3:Show,x%x3% y30 w%w3% h%pih%
Gui,2:Show
WinActivate
return

MyStatusBar:
if A_GuiEvent = normal
{
if a_eventinfo = 3
Msgbox, %f1%
}
return
;------------------------------
;------ replace 13 with 13/10 -----------
gwbasic1:
Gui,2:submit,nohide
GuiControlGet,C,,A2x
if (F1="" or C="")
return
SplitPath, F1, name, dir, ext, name_no_ext, drive
if (ext="bas" or ext="ba")
{
msgbox, 262436, ,This converts 13 to 13/10`nOriginal file is in RecycleBin`n%F1% ?
ifmsgbox,NO
return
ifmsgbox,Cancel
return
filerecycle,%f1%
stringreplace,C,C,`r,`r`n,all
;F2=%dir%\%name_no_ext%_%A_now%.%ext%
;Fileappend,%c%`r`n,%f2%
Fileappend,%c%`r`n,%f1%
;msgbox, 262208,Message,File %F1% is saved
;run,%f2%
GuiControl,2:,A2x,
;Fileread,a,%F2%
Fileread,a,%F1%
GuiControl,2: ,A2x, %a%
run,%SelectedFullPath% ;-- open folder
}
return
;-------------------------------------------------------------

;-- run gwbasic --------
GWBASIC2:
Gui,2:submit,nohide
GuiControlGet,C,,A2x
if (F1="" or C="")
return
SplitPath, F1, name, dir, ext, name_no_ext, drive
if (ext="bas")
{
SplitPath, F1, name, dir, ext, name_no_ext, drive
Loop, %F1% ;-- create shortpath
SP1= %A_loopFileShortPath%
Run,%ComSpec% /k %PR% %SP1%,,,PID1
}
return
;-------------------------------------------------------------
80CHARS:
Gui,2:submit,nohide
GuiControlGet,C,,A2x
if (F1="" or C="")
return
SplitPath, F1, name, dir, ext, name_no_ext, drive
F2=%dir%\%name_no_ext%_%A_now%.%ext%

if (ext="txt")
{
L2:=(81)
Loop,Read,%F1%
{
LR=%A_LoopReadLine%
LR=%LR% ;remove leading spaces
if LR=
continue
stringlen,L1,LR
if (L1<L2)
{
Fileappend,%LR%`r`n,%F2%
continue
}
E=
StringSplit,A,LR,%S%
loop,%A0%
{
D:=A%A_Index%
E=%E%%S%%D%
stringlen,L1,E
if (L1<L2)
continue
else
{
Fileappend,%E%`r`n,%F2%
E=
continue
}
}
;Fileappend,%S%%E%`r`n,%F2% ;write rest
Fileappend,%E%`r`n,%F2% ;write rest
}
GuiControl,2:,A2x,
Fileread,a,%F2%
GuiControl,2: ,A2x, %a%
run,%SelectedFullPath% ;-- open folder
ifexist,%f2%
run,%f2%
}
return
;-------------------------------------------------------------
;-------------- move remarks in ahk-script ----------
remarks:
Gui,2:submit,nohide
GuiControlGet,C,,A2x
if (F1="" or C="")
return
SplitPath, F1, name, dir, ext, name_no_ext, drive
F2=%dir%\%name_no_ext%_%A_now%.%ext%

Autotrim,off
TAB1=81

if (ext="ahk")
{
Loop,Read,%F1%
{
LR=
C1=
C2=
LR=%A_LoopReadLine%
stringreplace,LR,LR,%s%;,?,all
StringSplit,C,LR,?,
C1 := LP(C1,TAB1,S,"L")
if C2=
e4=%e4%%c1%%s%%c2%`r`n
else
e4=%e4%%c1%%s%;-- %c2%`r`n
}
Fileappend,%e4%,%f2%
e4=
LR=
C1=
C2=
GuiControl,2:,A2x,
Fileread,a,%F2%
GuiControl,2: ,A2x, %a%
run,%SelectedFullPath% ;-- open folder
ifexist,%f2%
run, notepad %f2%
}
return
;-------------------------------------------------------------

SYSTEM1:
Settitlematchmode,2
SetKeyDelay,25,5

;dd=C:\WINDOWS\system32\cmd.exe
dd=cmd.exe

;IfWinExist, cmd.exe
; ifwinexist, %V2%
; winactivate, %V2%
;#IfWinActive ahk_class ConsoleWindowClass
WinWait,%dd%
IfWinNotActive ,%dd%,,WinActivate,%dd%
WinWaitActive,%dd%
{
sleep,1300
ControlSend,,^{CtrlBreak}`r`n,ahk_pid %PID1% ;--
sleep,1100
ControlSend,,system`r`n,ahk_pid %PID1% ;-- quit GWBASIC
sleep,1100
ControlSend,,exit`r`n,ahk_pid %PID1% ;-- quit DOS
}
return
;-------------------------------------------------------------
;----------- LinePadding BoBo --------------
LP(String,FieldLen,ToAppend,Justification)
{
StringLen, StringLen, String
LCnt := FieldLen-StringLen
Loop, % LCnt
Appended := (Appended . ToAppend)
If Justification = R
Return (Appended . String)
If Justification = L
Return (String . Appended)
}
;=========== END script LinePadding ===============

;======================== END PROGRAM ==================================================================

TreeVIEW控件实例:动态加载本地文件

给TA捐赠
共{{data.count}}人
人已捐赠
其他

[GUI]TreeVIEW实例,动态显示控件内容

2017-2-21 12:38:33

其他

[GUI]窗体控件TreeVIEW实例

2017-2-21 12:52:40

4 条回复 A文章作者 M管理员
  1. willway

    还是Shell厉害

  2. nuibiubiu

    好像很厉害。感谢大佬

  3. zt7456

    学习

个人中心
购物车
优惠劵
有新私信 私信列表
搜索