Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как создать несколько Tab в одном окне?

Ответить
Настройки темы
[решено] Как создать несколько Tab в одном окне?

Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152


Конфигурация

Профиль | Отправить PM | Цитировать


так и не нашлось "нормального" рецепта, кроме этого:
Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TabConstants.au3>
#include <ListViewConstants.au3>

Global $hImageList = 0

$Main_GUI = GUICreate("Tab Sample", 400, 300, -1, -1);, BitOr($GUI_SS_DEFAULT_GUI,$WS_CLIPSIBLINGS))
$OK_Button = GUICtrlCreateButton("OK", 110, 270, 70, 20)
$Cancel_Button = GUICtrlCreateButton("Cancel", 220, 270, 70, 20)
GUISetState()

; Creates the first child window that is implemented into the main GUI
$Child1 = GUICreate("", 370, 215, 15, 40, BitOR($WS_CHILD, $WS_TABSTOP), -1, $Main_GUI)

$child1_tab = GUICtrlCreateTab(0, 0, 370, 215)
$child1_tabitem1 = GUICtrlCreateTabItem("Child1Tab1")
GUICtrlCreateButton("Butto 1", 10, 40, 100, 25)
GUICtrlCreateButton("Butto 1", 10, 70, 100, 25)
$child1_tabitem2 = GUICtrlCreateTabItem("Child1Tab2")
$child1_tabitem3 = GUICtrlCreateTabItem("Child1Tab3")
GUICtrlCreateTabItem("")

GUISetState()

; Creates the second child window that is implemented into the main GUI
$child2 = GUICreate("", 370, 215, 15, 40, BitOR($WS_CHILD, $WS_TABSTOP), -1, $Main_GUI)

$child3 = GUICreate("", 210, 220, 158, 0, BitOR($WS_CHILD, $WS_TABSTOP), -1, $child2)
$ListView = GUICtrlCreateListView("Col1|Col2", 0, 2, 210, 211, _
    BitOR($LVS_NOSORTHEADER, $LVS_SHOWSELALWAYS, $WS_TABSTOP), $WS_EX_CLIENTEDGE)

GUICtrlCreateListViewItem("ItemLong1|ItemLong2", $ListView)
GUICtrlCreateListViewItem("ItemLong3|ItemLong4", $ListView)
GUICtrlCreateListViewItem("ItemLong5|ItemLong6", $ListView)
GUISetState()

GUISwitch($child2)
$child2_tab = GUICtrlCreateTab(0, 0, 156, 215)
$child2_tabitem1 = GUICtrlCreateTabItem("Child2Tab1")
$child2_tabitem2 = GUICtrlCreateTabItem("Child2Tab2")
GUICtrlCreateTabItem("")

; Switch back the main GUI and create the tabs
GUISwitch($Main_GUI)
$main_tab = GUICtrlCreateTab(10, 10, 380, 250)
$main_tabitem1 = GUICtrlCreateTabItem("MainTab1")
$main_tabitem2 = GUICtrlCreateTabItem("MainTab2")
GUICtrlCreateTabItem("")
GUICtrlSetState($main_tabitem1, $GUI_SHOW)

Bind_ImageList($main_tab)

While 1
    $msg = GUIGetMsg(1)
    Select
        Case $msg[0] = $GUI_EVENT_CLOSE Or $msg[0] = $Cancel_Button
            ExitLoop

        Case $msg[0] = $main_tab
            $tabidx = GUICtrlRead($main_tab)

            Select
                Case $tabidx = 0
                    GUISetState(@SW_HIDE, $child2)
                    GUISetState(@SW_SHOW, $Child1)
                Case $tabidx = 1
                    GUISetState(@SW_HIDE, $Child1)
                    GUISetState(@SW_SHOW, $child2)
            EndSelect
    EndSelect
WEnd

DllCall("comctl32.dll", "int", "ImageList_Destroy", "hwnd", $hImageList)

Func ImageList_Create()
    $hImageList = DllCall("comctl32.dll", "hwnd", "ImageList_Create", "int", 16, "int", 16, "int", 0x0021, "int", 0, "int", 1)
    $hImageList = $hImageList[0]
    Return $hImageList
EndFunc   ;==>ImageList_Create

Func Bind_ImageList($nCtrl)
    $hImageList = ImageList_Create()
    GUICtrlSendMsg($nCtrl, $TCM_SETIMAGELIST, 0, $hImageList)

    $szIconFile = "shell32.dll"

    $tcitem = DllStructCreate("uint;dword;dword;ptr;int;int;int")
    DllStructSetData($tcitem, 1, 0x0002)
    DllStructSetData($tcitem, 6, 0)
    AddImageToTab($nCtrl, 0, $tcitem, $szIconFile, 12)

    DllStructSetData($tcitem, 6, 1)
    AddImageToTab($nCtrl, 1, $tcitem, $szIconFile, 21)

    $tcitem = 0
EndFunc   ;==>Bind_ImageList

Func AddImageToTab($nCtrl, $nTabIndex, $nItem, $szIconFile, $nIconID)
    $hIcon = DllStructCreate("int")
    $result = DllCall("shell32.dll", "int", "ExtractIconEx", "str", $szIconFile, "int", $nIconID, "hwnd", 0, "ptr", DllStructGetPtr($hIcon), "int", 1)
    $result = $result[0]
    If $result > 0 Then
        DllCall("comctl32.dll", "int", "ImageList_AddIcon", "hwnd", $hImageList, "hwnd", DllStructGetData($hIcon, 1))
        DllCall("user32.dll", "int", "SendMessage", "hwnd", ControlGetHandle($Main_GUI, "", $nCtrl), "int", $TCM_SETITEM, "int", $nTabIndex, "ptr", DllStructGetPtr($nItem))
        DllCall("user32.dll", "int", "DestroyIcon", "hwnd", $hIcon)
    EndIf

    $hIcon = 0
EndFunc   ;==>AddImageToTab
импровизация хороша, но есть недочеты - в дочерном окне невозможно "переходит"
от элемента к элементу при нажатии кнопки Tab.

Может есть решение?
какие нить фреймы / панели WinApi, кто нить знает, как то же такое реализовывается......?

Отправлено: 21:28, 06-04-2009

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Другого решения нет пока, GUI окно не может содеражать более одного таб-элемента.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 21:41, 06-04-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


понял.

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 21:48, 06-04-2009 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как создать несколько Tab в одном окне?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Как сделать несколько установок в одном install.wim r_zorge Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 2 11-12-2009 08:08
Разное - [решено] Несколько изданий на одном диске? alekcandro Microsoft Windows 7 7 12-11-2009 14:44
Установка - [решено] Несколько экземпляров Vista 64 на одном компьютере Pokokurante Лицензирование продуктов Microsoft 2 09-06-2009 12:40
Как создать переменную, имя которой такоеже как значение + несколько латин. символов? E-mail Вебмастеру 12 26-11-2005 10:14
MFC - Как в MFC в одном окне разместить CTreeView и CList? Guest Программирование и базы данных 2 02-11-2003 14:23




 
Переход