Доброго времени суток.
У меня есть вот такой код, который создает GUI - на которое можно перетаскивать ярлыки программ (а потом можно двойным щелчком их с этого окна запускать.
Как сделать заполнение этого GUI - не по столбцу - а по сетке ?
Иными словами, чтобы все окно разделено сеткой.
И как создать на этом окне - три вкладки (как в браузере), каждая из которых представляет собой область разделенной сеткой.
Сейчас код - вот такой:
У меня есть вот такой код, который создает GUI - на которое можно перетаскивать ярлыки программ (а потом можно двойным щелчком их с этого окна запускать.
Как сделать заполнение этого GUI - не по столбцу - а по сетке ?
Иными словами, чтобы все окно разделено сеткой.
И как создать на этом окне - три вкладки (как в браузере), каждая из которых представляет собой область разделенной сеткой.
Сейчас код - вот такой:
Код:
;~ AutoIt Version: 3.3.14.5
#include <GUIConstants.au3>
#include <GUIListView.au3>
#include <GUIImageList.au3>
#include <WinAPIShellEx.au3>
#include <WinAPISysWin.au3>
Global Const $INI_FILE = StringLeft(@ScriptName, StringInStr(@ScriptName, ".") - 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_idLV = GUICtrlCreateListView("Файл", 10, 20, 380, 570, BitOR($LVS_DEFAULT, $LVS_NOSORTHEADER), $WS_EX_CLIENTEDGE)
_GUICtrlListView_SetExtendedListViewStyle($g_idLV, BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_INFOTIP, $LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES))
_GUICtrlListView_SetColumnWidth($g_idLV, 0, $LVSCW_AUTOSIZE_USEHEADER)
Global $g_hImages = _GUIImageList_Create()
_GUICtrlListView_SetImageList($g_idLV, $g_hImages, 1)
_LoadFiles()
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
For $i = 1 To $aFiles[0]
_AddFile($aFiles[$i])
Next
_WinAPI_DragFinish($wParam)
EndIf
EndFunc ;==>WM_DROPFILES
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo, $iIndex
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $iIDFrom
Case $g_idLV
Switch $iCode
Case $NM_DBLCLK
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
$iIndex = DllStructGetData($tInfo, "Index")
If $iIndex <> -1 Then ShellExecute(_GUICtrlListView_GetItemText($hWndFrom, $iIndex))
Case $NM_RCLICK
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
$iIndex = DllStructGetData($tInfo, "Index")
If $iIndex <> -1 Then _GUICtrlListView_DeleteItem($hWndFrom, $iIndex)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func _AddFile($sFile)
Local $hIcon = _WinAPI_ShellExtractAssociatedIcon($sFile, 1)
_GUICtrlListView_AddItem($g_idLV, $sFile, _GUIImageList_ReplaceIcon($g_hImages, -1, $hIcon))
_WinAPI_DestroyIcon($hIcon)
EndFunc ;==>_AddFile
Func _LoadFiles()
Local $iCount = Int(IniRead($INI_FILE, "Files", "Count", "0"))
For $i = 0 To $iCount - 1
_AddFile(IniRead($INI_FILE, "Files", $i, ""))
Next
OnAutoItExitRegister("_SaveFiles")
EndFunc ;==>_LoadFiles
Func _SaveFiles()
Local $iCount = _GUICtrlListView_GetItemCount($g_idLV)
IniWrite($INI_FILE, "Files", "Count", $iCount)
For $i = 0 To $iCount - 1
IniWrite($INI_FILE, "Files", $i, _GUICtrlListView_GetItemText($g_idLV, $i))
Next
EndFunc ;==>_SaveFiles