|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Какс делать "красивые вкладки", аналог GUICtrlCreateTab |
|
|
[решено] Какс делать "красивые вкладки", аналог GUICtrlCreateTab
|
Старожил Сообщения: 247 |
Есть GUICtrlCreateTab, все замечательно, НО там не льзя "НОРМАЛЬНО" поменять цвет самой вклаки или сделать ее более оптикаемой. Есть ли другие варианты создания вкладок?
|
|
Отправлено: 22:17, 13-07-2010 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Нужно ручками рисовать табы, задача не из простых...
|
------- Отправлено: 22:30, 13-07-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Creat0R:
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GUITab.au3> Global Const $ODT_TAB = 101 Global Const $ODS_SELECTED = 0x0001 Global Const $ODA_DRAWENTIRE = 0x1 Global Const $ODS_FOCUS = 0x0010 $hGUI = GUICreate("Draw Tab", 300, 200) $hTab = GUICtrlCreateTab(10, 10, 280, 180, $TCS_OWNERDRAWFIXED) $TabItem_1 = GUICtrlCreateTabItem("TabItem 1") GUICtrlCreateLabel("", 10, 33, 277, 155) GUICtrlSetBkColor(-1, 0xDDAA11) GUICtrlSetState(-1, $GUI_DISABLE) $TabItem_2 = GUICtrlCreateTabItem("TabItem 2") GUICtrlCreateLabel("", 10, 33, 277, 155) GUICtrlSetBkColor(-1, 0x99BBEE) GUICtrlSetState(-1, $GUI_DISABLE) GUICtrlCreateTabItem("") GUISetState() GUIRegisterMsg($WM_DRAWITEM, "WM_DRAWITEM") _GUICtrlTab_SetCurSel($hTab, 1) _GUICtrlTab_SetCurSel($hTab, 0) Do Until GUIGetMsg() = -3 Func WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam) Local $DRAWITEMSTRUCT $DRAWITEMSTRUCT = DllStructCreate("uint cType;uint cID;uint itmID;uint itmAction;uint itmState;hwnd hItm;hwnd hDC;dword itmRect[4];dword itmData", $lParam) If DllStructGetData($DRAWITEMSTRUCT, "cType") <> $ODT_TAB Then Return $GUI_RUNDEFMSG Local $cID = DllStructGetData($DRAWITEMSTRUCT, "cID") Local $itmID = DllStructGetData($DRAWITEMSTRUCT, "itmID") Local $itmAction = DllStructGetData($DRAWITEMSTRUCT, "itmAction") Local $itmState = DllStructGetData($DRAWITEMSTRUCT, "itmState") Local $hItm = DllStructGetData($DRAWITEMSTRUCT, "hItm") Local $hDC = DllStructGetData($DRAWITEMSTRUCT, "hDC") If $itmAction <> $ODA_DRAWENTIRE Then Return $GUI_RUNDEFMSG Local $iTextColor, $itmText Switch $itmID Case 0 $iBrushColor = 0x11AADD Case 1 $iBrushColor = 0xEEBB99 EndSwitch DLLCall("gdi32.dll","int","SetBkMode", "hwnd", $hDC, "int", 1) Local $iBrush = DLLCall("gdi32.dll","hwnd","CreateSolidBrush", "int", $iBrushColor) $iBrush = $iBrush[0] Local $iBrushOld = _WinAPI_SelectObject($hDC, $iBrush) DLLCall("user32.dll","int","FillRect", "hwnd", $hDC, "ptr", DllStructGetPtr($DRAWITEMSTRUCT, "itmRect"), "hwnd", $iBrush) Local $tBuffer = DllStructCreate("char[256]") DllStructSetData($tBuffer, 1, "Item" & $itmID) $itmText = DllStructGetData($tBuffer, 1) DllStructSetData($DRAWITEMSTRUCT, "itmRect", DllStructGetData($DRAWITEMSTRUCT, "itmRect", 1) + 10, 1) DllStructSetData($DRAWITEMSTRUCT, "itmRect", DllStructGetData($DRAWITEMSTRUCT, "itmRect", 2) + 5, 2) DllCall("user32.dll", "int", "DrawText", "hwnd", $hDC, "str", $itmText, "int", StringLen($itmText), _ "ptr", DllStructGetPtr($DRAWITEMSTRUCT, "itmRect"), "int", $DT_LEFT) _WinAPI_SelectObject($hDC, $iBrushOld) _WinAPI_DeleteObject($iBrush) Return $GUI_RUNDEFMSG EndFunc |
|
------- Отправлено: 19:59, 14-07-2010 | #3 |
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать а через Button это возможно воплатить?
|
Отправлено: 23:21, 31-07-2010 | #4 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Anarasius:
|
||
------- Отправлено: 23:45, 31-07-2010 | #5 |
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать Создание табов через Button. Вот тут мы делали табы: http://forum.oszone.net/thread-175101-2.html а можноли вместо них просто создать Buttons и стиль будет легче менять
|
Отправлено: 23:52, 31-07-2010 | #6 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Anarasius:
|
|
------- Отправлено: 00:37, 01-08-2010 | #7 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Вот так можно:
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GUITab.au3> Global Const $ODT_TAB = 101 Global Const $ODS_SELECTED = 0x0001 Global Const $ODA_DRAWENTIRE = 0x1 Global Const $ODS_FOCUS = 0x0010 Global $aBrushColor[3] = [2, 0xDDAA11, 0x99BBEE] Global $aTabItem[3] = [2] $hGUI = GUICreate("Draw Tab", 300, 200) $hTab = GUICtrlCreateTab(10, 10, 280, 160, $TCS_OWNERDRAWFIXED) $aTabItem[1] = GUICtrlCreateTabItem(" Item 1") GUICtrlCreateLabel("", 10, 33, 277, 135) GUICtrlSetBkColor(-1, $aBrushColor[1]) GUICtrlSetState(-1, $GUI_DISABLE) $aTabItem[2] = GUICtrlCreateTabItem(" Item 2") GUICtrlCreateLabel("", 10, 33, 277, 135) GUICtrlSetBkColor(-1, $aBrushColor[2]) GUICtrlSetState(-1, $GUI_DISABLE) GUICtrlCreateTabItem("") $nButton = GUICtrlCreateButton("Create Tab", 10, 175, 60, 20) GUISetState() GUIRegisterMsg($WM_DRAWITEM, "WM_DRAWITEM") _GUICtrlTab_SetCurSel($hTab, 1) _GUICtrlTab_SetCurSel($hTab, 0) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $nButton $aBrushColor[0] += 1 ReDim $aBrushColor[$aBrushColor[0]+1] While _ColorIsDarkShade($aBrushColor[$aBrushColor[0]]) $aBrushColor[$aBrushColor[0]] = _ColorGetRandomColor() WEnd $aTabItem[0] += 1 ReDim $aTabItem[$aTabItem[0]+1] $aTabItem[$aTabItem[0]] = GUICtrlCreateTabItem(" Item " & $aTabItem[0]) GUICtrlCreateLabel("", 10, 33, 277, 135) GUICtrlSetBkColor(-1, $aBrushColor[$aBrushColor[0]]) GUICtrlSetState(-1, $GUI_DISABLE) GUICtrlSetState($aTabItem[$aTabItem[0]], $GUI_SHOW) EndSwitch WEnd Func WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam) Local $DRAWITEMSTRUCT $DRAWITEMSTRUCT = DllStructCreate("uint cType;uint cID;uint itmID;uint itmAction;uint itmState;hwnd hItm;hwnd hDC;dword itmRect[4];dword itmData", $lParam) If DllStructGetData($DRAWITEMSTRUCT, "cType") <> $ODT_TAB Then Return $GUI_RUNDEFMSG Local $cID = DllStructGetData($DRAWITEMSTRUCT, "cID") Local $itmID = DllStructGetData($DRAWITEMSTRUCT, "itmID") Local $itmAction = DllStructGetData($DRAWITEMSTRUCT, "itmAction") Local $itmState = DllStructGetData($DRAWITEMSTRUCT, "itmState") Local $hItm = DllStructGetData($DRAWITEMSTRUCT, "hItm") Local $hDC = DllStructGetData($DRAWITEMSTRUCT, "hDC") If $itmAction <> $ODA_DRAWENTIRE Then Return $GUI_RUNDEFMSG Local $iTextColor, $itmText, $iBrushColor = _ColorSwitchRGBBGR($aBrushColor[$itmID+1]) DLLCall("gdi32.dll","int","SetBkMode", "hwnd", $hDC, "int", 1) Local $iBrush = DLLCall("gdi32.dll","hwnd","CreateSolidBrush", "int", $iBrushColor) $iBrush = $iBrush[0] Local $iBrushOld = _WinAPI_SelectObject($hDC, $iBrush) DLLCall("user32.dll","int","FillRect", "hwnd", $hDC, "ptr", DllStructGetPtr($DRAWITEMSTRUCT, "itmRect"), "hwnd", $iBrush) Local $tBuffer = DllStructCreate("char[256]") DllStructSetData($tBuffer, 1, "Item " & $itmID) $itmText = DllStructGetData($tBuffer, 1) DllStructSetData($DRAWITEMSTRUCT, "itmRect", DllStructGetData($DRAWITEMSTRUCT, "itmRect", 1) + 10, 1) DllStructSetData($DRAWITEMSTRUCT, "itmRect", DllStructGetData($DRAWITEMSTRUCT, "itmRect", 2) + 5, 2) DllCall("user32.dll", "int", "DrawText", "hwnd", $hDC, "str", $itmText, "int", StringLen($itmText), _ "ptr", DllStructGetPtr($DRAWITEMSTRUCT, "itmRect"), "int", $DT_LEFT) _WinAPI_SelectObject($hDC, $iBrushOld) _WinAPI_DeleteObject($iBrush) Return $GUI_RUNDEFMSG EndFunc Func _ColorGetRandomColor() Return "0x" & Hex(Random(1, 255, 1) & Random(1, 255, 1) & Random(1, 255, 1), 6) EndFunc Func _ColorIsDarkShade($nColor) Local $i_Red = BitAND(BitShift($nColor, 16), 0xFF) Local $i_Green = BitAND(BitShift($nColor, 8), 0xFF) Local $i_Blue = BitAND($nColor, 0xFF) Local $iMidle_Color_Val = Int(765 / 2) ;765 is the total of 255 + 255 + 255 Return (($i_Red + $i_Green + $i_Blue) < $iMidle_Color_Val) EndFunc Func _ColorSwitchRGBBGR($iColor) Local $iMask = BitXOR(BitAND($iColor, 0xFF), ($iColor / 0x10000)) Return "0x" & Hex(BitXOR($iColor, ($iMask * 0x10001)), 6) EndFunc |
------- Отправлено: 01:00, 01-08-2010 | #8 |
Старожил Сообщения: 247
|
А как поменять цвет заголовков Табов?
|
Отправлено: 01:16, 08-08-2010 | #9 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Centrinar:
|
|
------- Отправлено: 01:49, 08-08-2010 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Доступ - [решено] нет вкладки "доступ" в свойствах сетевого подключения | Nexgen | Microsoft Windows 7 | 10 | 20-02-2016 19:13 | |
Интерфейс - Как убрать лишние вкладки из меню "Свойства" папок в Windows XP? | kupina | Microsoft Windows 2000/XP | 1 | 07-03-2010 18:49 | |
Интерфейс - [решено] Вкладки "Предыдущие версии" и "Безопасность" | MaX1MkA | Microsoft Windows 7 | 5 | 25-11-2009 01:28 | |
есть аналог мат платы GIGABYTE "GA-EP31-DS3L и процессора Intel "Core 2 Duo E7200"? | Лина | Хочу все знать | 31 | 22-06-2009 20:16 | |
В панели управления "Экран" отсутствуют некоторые вкладки | Irvix | Microsoft Windows 95/98/Me (архив) | 12 | 25-10-2003 03:28 |
|