Здравствуйте.
Нашел на форуме скрипт, на котором можно размещать ярлыки файлов.
Единственное что неудобно, эти ярлыки не закреплены на интерфейсе, а висят как бы в куче.
Если удалить самый верхний левый ярлык, то все остальные ярлыки тоже сдвинутся.
Как ярлыки закреплять "на сетке", то есть чтобы при перетаскивании - ярлык был закреплен на конкретной ячейке сетки - как на рабочем столе Windows ?
Нашел на форуме скрипт, на котором можно размещать ярлыки файлов.
Единственное что неудобно, эти ярлыки не закреплены на интерфейсе, а висят как бы в куче.
Если удалить самый верхний левый ярлык, то все остальные ярлыки тоже сдвинутся.
Как ярлыки закреплять "на сетке", то есть чтобы при перетаскивании - ярлык был закреплен на конкретной ячейке сетки - как на рабочем столе Windows ?
Код:
;~ AutoIt Version: 3.3.14.5
#pragma compile(Icon, 1.ico)
#include <file.au3>
#include <MsgBoxConstants.au3>
#include <GUIConstants.au3>
#include <GUIListView.au3>
#include <GUIImageList.au3>
#include <WinAPIShellEx.au3>
Global Const $INI_FILE = @ScriptDir & "\" & StringLeft(@ScriptName, StringInStr(@ScriptName, ".", 0, -1)) & "ini"
GUICreate("Пример", 400, 600, -1, -1, -1, $WS_EX_ACCEPTFILES)
GUICtrlCreateLabel("Drag && Drop | Двойной ЛКМ > Запустить | ПКМ > Удалить", 0, 0, 400, 20, BitOR($SS_CENTER, $SS_CENTERIMAGE))
GUICtrlSetState(-1, $GUI_DISABLE)
Global $g_aLVs[] = ["Первая", "Вторая", "..."], $g_idTab = GUICtrlCreateTab(5, 20, 390, 575)
For $iTab = 0 To UBound($g_aLVs) - 1
GUICtrlCreateTabItem($g_aLVs[$iTab])
$g_aLVs[$iTab] = GUICtrlCreateListView("Имя|Файл", 10, 45, 380, 545, -1, BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_INFOTIP))
GUICtrlSetStyle(-1, $LVS_ICON)
_GUICtrlListView_SetImageList($g_aLVs[$iTab], _
_GUIImageList_Create(_WinAPI_GetSystemMetrics($SM_CXICON), _WinAPI_GetSystemMetrics($SM_CYICON)))
_LoadFiles($iTab)
Next
GUICtrlCreateTabItem("")
OnAutoItExitRegister("_SaveFiles")
GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES")
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func WM_DROPFILES($hWnd, $iMsg, $wParam, $lParam)
Local $aFiles = _WinAPI_DragQueryFileEx($wParam)
If Not @error Then
_AddFiles(GUICtrlRead($g_idTab), $aFiles)
_WinAPI_DragFinish($wParam)
EndIf
EndFunc ;==>WM_DROPFILES
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
Local $hLV, $hWndFrom, $iCode, $tNMHDR, $tInfo, $iIndex
$hLV = GUICtrlGetHandle($g_aLVs[GUICtrlRead($g_idTab)])
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hLV
Switch $iCode
Case $NM_DBLCLK
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
$iIndex = DllStructGetData($tInfo, "Index")
If $iIndex <> -1 Then ShellExecute(_GUICtrlListView_GetItemText($hWndFrom, $iIndex, 1))
Case $NM_RCLICK
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
$iIndex = DllStructGetData($tInfo, "Index")
If $iIndex <> -1 Then
_GUICtrlListView_DeleteItem($hWndFrom, $iIndex)
_GUICtrlListView_Arrange($hWndFrom, $LVA_ALIGNLEFT)
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func _AddFiles($iTab, Const ByRef $aFiles)
_GUICtrlListView_BeginUpdate($g_aLVs[$iTab])
Local $hIcon, $iIndex, $hImageList = _GUICtrlListView_GetImageList($g_aLVs[$iTab], 0)
For $i = 1 To $aFiles[0]
$hIcon = _WinAPI_ShellExtractAssociatedIcon($aFiles[$i], False)
$iIndex = _GUICtrlListView_AddItem($g_aLVs[$iTab], _WinAPI_PathRemoveExtension(_WinAPI_PathFindFileName($aFiles[$i])), _
_GUIImageList_ReplaceIcon($hImageList, -1, $hIcon))
_GUICtrlListView_AddSubItem($g_aLVs[$iTab], $iIndex, $aFiles[$i], 1)
_WinAPI_DestroyIcon($hIcon)
Next
_GUICtrlListView_EndUpdate($g_aLVs[$iTab])
EndFunc ;==>_AddFiles
Func _LoadFiles($iTab)
Local $sFiles = IniRead($INI_FILE, "Files", $iTab, "")
If $sFiles Then _AddFiles($iTab, StringSplit($sFiles, "|"))
EndFunc ;==>_LoadFiles
Func _SaveFiles()
GUISetState(@SW_HIDE)
Local $sFiles
For $iTab = 0 To UBound($g_aLVs) - 1
$sFiles = ""
For $i = 0 To _GUICtrlListView_GetItemCount($g_aLVs[$iTab]) - 1
$sFiles &= _GUICtrlListView_GetItemText($g_aLVs[$iTab], $i, 1) & "|"
Next
IniWrite($INI_FILE, "Files", $iTab, StringTrimRight($sFiles, 1))
Next
EndFunc ;==>_SaveFiles
Вложения
Последнее редактирование: