Что нового

Control Splitter - оконные разделители элементов управления

musicstashall

Знающий
Сообщения
323
Репутация
8
Версия AutoIt
3.3.14.5
Версия
1.0
Представляю вашему вниманию альтернативную версию оконных разделителей CtrlSplitter. В качестве разделителя - сплиттера задействован элемент Static, а функционирование разделителей полностью реализовано в их оконной процедуре.

Код:
Func _GuiCreate()
    Local $iDPI = _WinAPI_GetDpiForPrimaryMonitor()
    Local $fscale = $iDPI / 96
    Local $fscale2 = 96 / _WinAPI_GetDpiForSystem()
    Local $cxFrame = _WinAPI_GetSystemMetricsForDpi($SM_CXSIZEFRAME, $iDPI)
    Local $cyFrame = _WinAPI_GetSystemMetricsForDpi($SM_CYSIZEFRAME, $iDPI)
    Local $cyCapt = _WinAPI_GetSystemMetricsForDpi($SM_CYCAPTION, $iDPI)
    
    Local $iW = 1110, $iH = 710
    Local $istyle = BitOR($WS_BORDER, $WS_CAPTION, $WS_GROUP, $WS_SIZEBOX, $WS_TABSTOP, $WS_OVERLAPPEDWINDOW)
    $gui1 = GUICreate('', $iW, $iH, -1, -1, $istyle)
    
    GUISetBkColor(_WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_WINDOW)))
    
    GUIRegisterMsg($WM_SYSCOMMAND, 'GuiMessageProc')
    GUIRegisterMsg($WM_THEMECHANGED, 'GuiMessageProc')
    GUIRegisterMsg($WM_GETDPISCALEDSIZE, 'GuiMessageProc')
    GUIRegisterMsg($WM_DPICHANGED, 'GuiMessageProc')
    GUIRegisterMsg($WM_GETMINMAXINFO, 'GuiMessageProc')
    GUIRegisterMsg($WM_WINDOWPOSCHANGED, 'GuiMessageProc')
    GUIRegisterMsg($WM_ENTERSIZEMOVE, 'GuiMessageProc')
    GUIRegisterMsg($WM_EXITSIZEMOVE, 'GuiMessageProc')
    GUIRegisterMsg($WM_SIZE, 'GuiMessageProc')
    GUIRegisterMsg($WM_POSTSIZE, 'GuiMessageProc')
    GUIRegisterMsg($WM_COMMAND, 'GuiMessageProc')
    GUIRegisterMsg($WM_NOTIFY, 'GuiMessageProc')
    GUIRegisterMsg($WM_UAHDRAWMENU, 'GuiMessageProc')
    
    _GuiMenuCreate()
    Global $hMenu = _GUICtrlMenu_GetMenu($gui1)
    $hStatus = _GUICtrlStatusBar_Create($gui1)

    _GUICtrlStatusBar_SetParts($hStatus, -1, $hStatus_PartsWidth)

    $TreeViewTemplates = GUICtrlCreateTreeView(16, 144, 165, 224, -1, $WS_EX_CLIENTEDGE)
    $hTreeViewTemplates = GUICtrlGetHandle(-1)
    Local $hImage = _GUIImageList_Create(21 * $fscale, 21 * $fscale, 5, 3)
    _GUIImageList_ReplaceIcon($hImage, -1, _WinAPI_ShellExtractIcon(@SystemDir & '\shell32.dll', 3, 21 * $fscale, 21 * $fscale))
    _GUICtrlTreeView_SetNormalImageList($hTreeViewTemplates, $hImage)
    TemplatesTreeUpdate()
    _GUICtrlTreeView_SelectItem($hTreeViewTemplates, _GUICtrlTreeView_GetFirstItem($hTreeViewTemplates), $TVGN_CARET)

    $ListViewTemplates = GUICtrlCreateListView("Файл|Заголовок", 196, 144, 294, 224)
    GUICtrlSetStyle(-1, BitOR($LVS_AUTOARRANGE, $LVS_ICON, $LVS_SHOWSELALWAYS, $LVS_SINGLESEL))
    $hListViewTemplates = GUICtrlGetHandle(-1)
    _GUICtrlListView_SetExtendedListViewStyle($hListViewTemplates, BitOR($LVS_EX_DOUBLEBUFFER, $WS_EX_CLIENTEDGE))
    
    $hImage = _GUIImageList_Create(48 * $fscale, 48 * $fscale, 5, 3)
    _GUIImageList_ReplaceIcon($hImage, -1, _WinAPI_ShellExtractIcon(@SystemDir & '\imageres.dll', 15, 48 * $fscale, 48 * $fscale))
    _GUIImageList_ReplaceIcon($hImage, -1, _WinAPI_ShellExtractIcon(@SystemDir & '\shell32.dll', 3, 48 * $fscale, 48 * $fscale))
    _GUICtrlListView_SetImageList($hListViewTemplates, $hImage, 0)
    TemplatesListUpdate(@DesktopDir)
    
    Global $ListViewAddress = GUICtrlCreateListView("|Имя|Компания|Email|Телефон|Дата", 16, 386, 474, 209)
    GUICtrlSetStyle(-1, BitOR($LVS_SHOWSELALWAYS, $LVS_AUTOARRANGE, $LVS_REPORT, $LVS_EDITLABELS))
    $hListViewAddress = GUICtrlGetHandle(-1)
    _GUICtrlListView_SetExtendedListViewStyle($hListViewAddress, BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE, $LVS_EX_DOUBLEBUFFER, $LVS_EX_CHECKBOXES))
    _GUICtrlListView_RegisterSortCallBack($hListViewAddress)
    
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 50 * $fscale)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 150 * $fscale)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 200 * $fscale)
    
    $hImage = _GUIImageList_Create(21 * $fscale, 21 * $fscale, 5, 3)
    _GUIImageList_ReplaceIcon($hImage, -1, _WinAPI_ShellExtractIcon(@SystemDir & '\imageres.dll', 83, 21 * $fscale, 21 * $fscale))
    _GUICtrlListView_SetImageList($hListViewAddress, $hImage, 1)
    
    $UserImage = GUICtrlCreateIcon(@SystemDir & '\shell32.dll', -161, 16, 15, 100, 100)
    
    $UserName = GUICtrlCreateLabel("Имя", 153, 32, 337, 35, $SS_CENTERIMAGE)
    GUICtrlSetColor(-1, 0x000080)
    
    $CompanyName = GUICtrlCreateLabel("Организация", 155, 77, 327, 30, $SS_CENTERIMAGE)
    GUICtrlSetColor(-1, 0x000080)
    
    $oIE = _IECreateEmbedded()
    $Obj = GUICtrlCreateObj($oIE, 506, 8, 596, 550)
    
    $addressBar = GUICtrlCreateInput("Вставьте url адрес или путь к файлу html страницы", 506, 570, 594, 25, -1, $WS_EX_CLIENTEDGE)
    GUICtrlSetColor(-1, _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_GRAYTEXT)))
    $hAddressBar = GUICtrlGetHandle(-1)
    
    $ispl0 = _CtrlSplit_Create(184, 144, 224, $SPS_VERTICAL) ; вертикальный малый
    $ispl1 = _CtrlSplit_Create(495, 0, 605, $SPS_VERTICAL) ; вертикальный большой
    $ispl2 = _CtrlSplit_Create(10, 374, 486, $SPS_HORIZONTAL) ; горизонтальный малый
    $ispl3 = _CtrlSplit_Create(10, 607, 1090, $SPS_HORIZONTAL) ; горизонтальный большой
    
    $hConsole = _GUICtrlRichEdit_Create($gui1, "", 10 * $fscale, 603, 1090, 40 * $fscale, BitOR($WS_VSCROLL, $WS_HSCROLL, $ES_LEFT, $ES_READONLY, $ES_MULTILINE), 0)
    
    _GUICtrlRichEdit_SetBkColor($hConsole, _WinAPI_GetSysColor($COLOR_3DFACE))
    _GUICtrlRichEdit_SetCharColor($hConsole, _WinAPI_GetSysColor($COLOR_GRAYTEXT))
    
    $hContent = ControlGetHandle($gui1, "", "[CLASS:Shell Embedding]")
    
    _GUICtrlStatusBar_SetText($hStatus, "Отправитель", 0)
    _GUICtrlStatusBar_SetText($hStatus, "Получатели", 1)
    _GUICtrlStatusBar_SetText($hStatus, "Выполнение", 2, $SBT_NOBORDERS)
    _GUICtrlStatusBar_SetText($hStatus, "Успешно:", 4)
    _GUICtrlStatusBar_SetText($hStatus, "Не удалось:", 5)
    SetPart($iDPI)
    
    __setautoresizing()
    
    GUISetState(@SW_HIDE, $gui1)
    
    _WinAPI_SetWindowPos($gui1, 0, 0, 0, Round($iW * $fscale), Round($iH * $fscale), BitOR($SWP_NOMOVE, $SWP_NOREDRAW))
    
    _CtrlSplit_AddItem($ispl0, $SPL_LEFT, $TreeViewTemplates, $SP_RESIZING)
    _CtrlSplit_AddItem($ispl0, $SPL_RIGHT, $ListViewTemplates, $SP_RESIZING)
    
    _CtrlSplit_ItemSetDistance($ispl0, $SPL_LEFT, $TreeViewTemplates, 2, $SP_USEITEM)
    _CtrlSplit_ItemSetDistance($ispl0, $SPL_RIGHT, $ListViewTemplates, 2, $SP_USEITEM)
    _CtrlSplit_ItemSetMinimal($ispl0, $SPL_LEFT, $TreeViewTemplates, 0, $SP_USEITEM)
    _CtrlSplit_ItemSetMinimal($ispl0, $SPL_RIGHT, $ListViewTemplates, 0, $SP_USEITEM)
    
    _CtrlSplit_AddItem($ispl1, $SPL_LEFT, $UserName, $SP_RESIZING)
    _CtrlSplit_AddItem($ispl1, $SPL_LEFT, $CompanyName, $SP_RESIZING)
    _CtrlSplit_AddItem($ispl1, $SPL_LEFT, $ListViewTemplates, $SP_RESIZING)
    _CtrlSplit_AddItem($ispl1, $SPL_LEFT, $ispl2, $SP_RESIZING)
    _CtrlSplit_AddItem($ispl1, $SPL_LEFT, $ListViewAddress, $SP_RESIZING)
    _CtrlSplit_AddItem($ispl1, $SPL_RIGHT, $hContent, $SP_RESIZING)
    _CtrlSplit_AddItem($ispl1, $SPL_RIGHT, $addressBar, $SP_RESIZING)

    _CtrlSplit_ItemSetMinimal($ispl1, $SPL_LEFT, $UserName, 0, $SP_USEITEM)
    _CtrlSplit_ItemSetMinimal($ispl1, $SPL_LEFT, $CompanyName, 0, $SP_USEITEM)
    _CtrlSplit_ItemSetDistance($ispl1, $SPL_LEFT, $UserName, 5, $SP_USEITEM)
    _CtrlSplit_ItemSetDistance($ispl1, $SPL_LEFT, $CompanyName, 5, $SP_USEITEM)
    _CtrlSplit_ItemSetDistance($ispl1, $SPL_RIGHT, $hContent, 5, $SP_USEITEM)
    _CtrlSplit_ItemSetDistance($ispl1, $SPL_RIGHT, $addressBar, 5, $SP_USEITEM)
    
    _CtrlSplit_AddItem($ispl2, $SPL_TOP, $TreeViewTemplates, $SP_RESIZING)
    _CtrlSplit_AddItem($ispl2, $SPL_TOP, $ispl0, $SP_RESIZING)
    _CtrlSplit_AddItem($ispl2, $SPL_TOP, $ListViewTemplates, $SP_RESIZING)
    _CtrlSplit_AddItem($ispl2, $SPL_BOTTOM, $ListViewAddress, $SP_RESIZING)

    _CtrlSplit_ItemSetDistance($ispl2, $SPL_TOP, $TreeViewTemplates, 2, $SP_USEITEM)
    _CtrlSplit_ItemSetDistance($ispl2, $SPL_TOP, $ispl0, 2, $SP_USEITEM)
    _CtrlSplit_ItemSetDistance($ispl2, $SPL_TOP, $ListViewTemplates, 2, $SP_USEITEM)
    _CtrlSplit_ItemSetDistance($ispl2, $SPL_BOTTOM, $ListViewAddress, 2, $SP_USEITEM)

    _CtrlSplit_AddItem($ispl3, $SPL_TOP, $ListViewAddress, $SP_RESIZING)
    _CtrlSplit_AddItem($ispl3, $SPL_TOP, $addressBar, $SP_NORESIZING)
    _CtrlSplit_AddItem($ispl3, $SPL_TOP, $ispl1, $SP_RESIZING)
    _CtrlSplit_AddItem($ispl3, $SPL_TOP, $hContent, $SP_RESIZING)
    
    _CtrlSplit_AddItem($ispl3, $SPL_BOTTOM, $hConsole, $SP_RESIZING)
    _CtrlSplit_ItemSetDistance($ispl3, $SPL_BOTTOM, $hConsole, 5, $SP_USEITEM)
    _CtrlSplit_ItemSetMinimal($ispl3, $SPL_BOTTOM, $hConsole, 0, $SP_USEITEM)
    
    _CtrlSplit_SetParam($ispl0, _WinAPI_MakeLong(_GetLeft($ispl0), _WinAPI_GetClientWidth($gui1) - _GetLeft($ispl0)))
    _CtrlSplit_SetParam($ispl1, _WinAPI_MakeLong(_GetLeft($ispl1), _WinAPI_GetClientWidth($gui1) - _GetLeft($ispl1)))
    _CtrlSplit_SetParam($ispl2, _WinAPI_MakeLong(_GetTop($ispl2), _WinAPI_GetClientHeight($gui1) - _GetTop($ispl2)))
    _CtrlSplit_SetParam($ispl3, _WinAPI_MakeLong(_GetTop($ispl3), _WinAPI_GetClientHeight($gui1) - _GetTop($ispl3)))
    
    __setdefresizing()
    
    _GUICtrlListView_SortItems($hListViewAddress, 1)
    
    _SendMessage($gui1, $WM_THEMECHANGED)
    
    Local $iX0 = IniRead($DefSettingFile, "metrics", "spl_0x" & $iDPI, _GetLeft($ispl0))
    Local $iX1 = IniRead($DefSettingFile, "metrics", "spl_1x" & $iDPI, _GetLeft($ispl1))
    Local $iY2 = IniRead($DefSettingFile, "metrics", "spl_2x" & $iDPI, _GetTop($ispl2))
    Local $iY3 = IniRead($DefSettingFile, "metrics", "spl_3x" & $iDPI, _GetTop($ispl3))
    GUISetState(@SW_SHOW, $gui1)
    
    _CtrlSplit_SetPos($ispl2, Default, $iY2)
    _CtrlSplit_SetPos($ispl3, Default, $iY3)
    _CtrlSplit_SetPos($ispl1, $iX1)
    _CtrlSplit_SetPos($ispl0, $iX0)
    
    If _CtrlSplit_ItemGetState($ispl1, $SPL_LEFT, 0, $SPM_HIDE) == 0 And _CtrlSplit_ItemGetState($ispl2, $SPL_TOP, 0, $SPM_HIDE) == 0 Then
        _CtrlSplit_SetParam($ispl0, _WinAPI_MakeLong(_GetLeft($ispl0), _WinAPI_GetClientWidth($gui1) - _GetLeft($ispl0)))
    EndIf
    
    If _CtrlSplit_ItemGetState($ispl2, $SPL_TOP, 0, $SPM_HIDE) == 0 And _CtrlSplit_ItemGetState($ispl2, $SPL_BOTTOM, 0, $SPM_HIDE) == 0 Then
        _CtrlSplit_SetParam($ispl2, _WinAPI_MakeLong(_GetTop($ispl2), _WinAPI_GetClientHeight($gui1) - _GetTop($ispl2)))
    EndIf
    
    If _CtrlSplit_ItemGetState($ispl1, $SPL_LEFT, 0, $SPM_HIDE) == 0 And _CtrlSplit_ItemGetState($ispl1, $SPL_RIGHT, 0, $SPM_HIDE) == 0 Then
        _CtrlSplit_SetParam($ispl1, _WinAPI_MakeLong(_GetLeft($ispl1), _WinAPI_GetClientWidth($gui1) - _GetLeft($ispl1)))
    EndIf
    
    If _CtrlSplit_ItemGetState($ispl3, $SPL_BOTTOM, 0, $SPM_HIDE) == 0 Then
        _CtrlSplit_SetParam($ispl3, _WinAPI_MakeLong(_GetTop($ispl3), _WinAPI_GetClientHeight($gui1) - _GetTop($ispl3)))
    EndIf
    
    _IENavigate($oIE, "https://www.autoitscript.com", 0)
EndFunc   ;==>_GuiCreate
 
Автор
musicstashall

Вложения

  • CtrlSplitter.zip
    24.3 КБ · Просмотры: 1
Верх