Eigenes Tab-Register (OwnTab-UDF)

  • Hab mal wieder was gebastelt :D
    Diesesmal ist es ein eigenes Tab-Register.

    Man kann damit:
    * Einfach mehrere Tabs in einer Gui verwalten.
    * die Farben beliebig ändern.
    * Hover-Effekt aktivieren.
    * Tabs wechseln mittels Hover-Funktion.
    * Alarme setzen (Farben einzelner Tabs ändern) und blinken lassen.
    * uvm ;)

    Screenshots
    OwnTab_Example.au3
    [autoit]

    #include "OwnTab.au3"

    [/autoit] [autoit][/autoit] [autoit]

    Local $hGui = GUICreate("Funkey's OwnTab-UDF Example", 500, 350)
    GUISetBkColor(0xbbbbbb)

    [/autoit] [autoit][/autoit] [autoit]

    $OwnTab_Style = Random(0, 1, 1) ;random style (only 2 styles available!!)

    [/autoit] [autoit][/autoit] [autoit]

    Local $aTabText[5] = ["Settings", "Register without icon", "Pic", "Status", "Tab in Tab"] ;Declare the regions for the OwnTab-control
    Local $aTabIcons[5][2] = [["shell32.dll", 130],[""],["shell32.dll", 139],["shell32.dll", 90], ["shell32.dll", 43]]
    Global $aCtrlTab = _OwnTab_Create($hGui, $aTabText, 10, 10, 480, 300, 30, 0xD5D5D5, 0xCFE0E7, 0xCFE0E7, $aTabIcons)

    [/autoit] [autoit][/autoit] [autoit]

    Local $aTabTip[5] = ["Tip Item 1", "Tip Item 2", "Tip Item 3", "Alarm-Register"]
    _OwnTab_SetTip($aCtrlTab, $aTabTip) ;set the tooltips for the OwnTab-control

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab1
    _OwnTab_Add($aCtrlTab) ;Start controls tab1
    Global $Edit1 = GUICtrlCreateEdit("Edit in Tab1", 20, 55, 300, 50, 0)
    Global $Button1 = GUICtrlCreateButton("Simulate an alarm", 20, 120, 300, 20)
    Global $Box1 = GUICtrlCreateCheckbox("Switch on hover - set time -->", 20, 180)
    GUICtrlSetBkColor(-1, 0xCFE0E7)
    Global $Input1 = GUICtrlCreateInput("1", 200, 180, 50, 20)
    GUICtrlCreateUpdown($Input1)
    GUICtrlSetLimit(-1, 15, 1)
    #EndRegion Tab1

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab2
    _OwnTab_Add($aCtrlTab) ;Start controls tab2
    Global $Edit2 = GUICtrlCreateEdit("Edit in Tab2", 20, 150, 300, 50, 0)
    Global $Label2 = GUICtrlCreateLabel("Label in Tab2", 20, 220, 300, 20, 0x201)
    GUICtrlSetBkColor(-1, -2) ;$GUI_BKCOLOR_TRANSPARENT
    #EndRegion Tab2

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab3
    _OwnTab_Add($aCtrlTab) ;Start controls tab3
    Global $Labe3 = GUICtrlCreateLabel("If you see this label, you can change the picture-path in scriptline " &@ScriptLineNumber + 1 & "!!", 40, 150, 400, 30, 0x201)
    Global $Edit3 = GUICtrlCreatePic(@DocumentsCommonDir & '\Eigene Bilder\Beispielbilder\Winter.jpg', 20, 55, 460, 280)
    #EndRegion Tab3

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab4
    _OwnTab_Add($aCtrlTab) ;Start controls tab4
    Global $Button4 = GUICtrlCreateButton("Acknowledge the alarm", 20, 120, 300, 20)
    Global $Button5 = GUICtrlCreateButton("Enable tab 3", 20, 150, 300, 20)
    Global $Button6 = GUICtrlCreateButton("Disable tab 3", 20, 180, 300, 20)
    Global $Button7 = GUICtrlCreateButton("Hide tab 2", 20, 240, 300, 20)
    Global $Button8 = GUICtrlCreateButton("Show tab 2", 20, 210, 300, 20)
    #EndRegion Tab4

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab5 and "Tab in Tab"
    _OwnTab_Add($aCtrlTab) ;Start controls tab5

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Style Black", 30, 50, 200, 20, 0x201)
    $OwnTab_Style = 0
    Local $aTabText[2] = ["Tab1", "New Info"] ;Declare the regions for the OwnTab-control
    Local $aTabIcons[2][2] = [["shell32.dll", 20],["shell32.dll", 40]]
    Global $aCtrlTab2 = _OwnTab_Create($hGui, $aTabText, 30, 80, 200, 200, 30, 0xD5D5D5, 0x00ff00, 0x00ff00, $aTabIcons)
    _OwnTab_Add($aCtrlTab2) ;Start controls tab1
    Global $BtnSet = GUICtrlCreateButton("Simulate", 80, 150, 100, 20)
    _OwnTab_Add($aCtrlTab2) ;Start controls tab2
    Global $BtnReset = GUICtrlCreateButton("Acknowledge", 80, 170, 100, 20)
    _OwnTab_End($aCtrlTab2)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Style White", 270, 50, 200, 20, 0x201)
    $OwnTab_Style = 1
    Local $aTabText[2] = ["Tab1", "Tab2"] ;Declare the regions for the OwnTab-control
    Local $aTabIcons[2][2] = [["shell32.dll", 10],["shell32.dll", 60]]
    Global $aCtrlTab3 = _OwnTab_Create($hGui, $aTabText, 270, 80, 200, 200, 30, 0xD5D5D5, 0x00ff00, 0x00ff00, $aTabIcons)
    _OwnTab_Add($aCtrlTab3) ;Start controls tab1
    GUICtrlCreateLabel("Just testing...", 280, 150, 100, 20)
    GUICtrlSetBkColor(-1, -2)
    _OwnTab_Add($aCtrlTab3) ;Start controls tab2
    GUICtrlCreateLabel("Hello from tab2", 280, 150, 100, 20)
    GUICtrlSetBkColor(-1, -2)
    _OwnTab_End($aCtrlTab3)
    #EndRegion Tab5

    [/autoit] [autoit][/autoit] [autoit]

    _OwnTab_End($aCtrlTab) ;new: end control-definition AND inizialize the OwnTab

    [/autoit] [autoit][/autoit] [autoit]

    _OwnTab_Disable($aCtrlTab, 3) ;new: disable tabitems
    _OwnTab_SetFontCol($aCtrlTab, 0xFF) ;new: set font-color

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()
    _OwnTab_Hover($aCtrlTab, 0xFFFF88) ;start hover-function if you want
    _OwnTab_AlarmInit()

    [/autoit] [autoit][/autoit] [autoit]

    Local $msg

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    For $a = 1 To UBound($aCtrlTab, 1) - 1
    If $msg = $aCtrlTab[$a][0] Then
    _OwnTab_Switch($aCtrlTab, $a)
    If $a = 5 Then
    _OwnTab_Switch($aCtrlTab2, $aCtrlTab2[0][0], 1)
    _OwnTab_Switch($aCtrlTab3, $aCtrlTab3[0][0], 1)
    EndIf
    EndIf
    Next
    For $a = 1 To UBound($aCtrlTab2, 1) - 1
    If $msg = $aCtrlTab2[$a][0] Then
    _OwnTab_Switch($aCtrlTab2, $a)
    EndIf
    Next
    For $a = 1 To UBound($aCtrlTab3, 1) - 1
    If $msg = $aCtrlTab3[$a][0] Then
    _OwnTab_Switch($aCtrlTab3, $a)
    EndIf
    Next
    Switch $msg
    Case $Button1
    _OwnTab_SetAlarm($aCtrlTab, 4, 0xFF0000)
    Case $Button4
    _OwnTab_ResetAlarm($aCtrlTab, 4)
    Case $BtnSet
    _OwnTab_SetAlarm($aCtrlTab2, 2, 0x5050FF)
    Case $BtnReset
    _OwnTab_ResetAlarm($aCtrlTab2, 2)
    Case $Button5
    _OwnTab_Enable($aCtrlTab, 3)
    Case $Button6
    _OwnTab_Disable($aCtrlTab, 3)
    Case $Button7
    _OwnTab_Hide($aCtrlTab, 2)
    Case $Button8
    _OwnTab_Show($aCtrlTab, 2)
    Case $Box1
    If GUICtrlRead($Box1) = 1 Then
    _OwnTab_Hover($aCtrlTab, 0xFFFF88, GUICtrlRead($Input1))
    Else
    _OwnTab_Hover($aCtrlTab, 0xFFFF88, 0)
    EndIf
    Case $Input1
    If GUICtrlRead($Box1) = 1 Then _OwnTab_Hover($aCtrlTab, 0xFFFF88, GUICtrlRead($Input1))
    Case -3
    Exit
    EndSwitch
    Sleep(10)
    WEnd

    [/autoit]
    OwnTab.au3
    [autoit]

    #include-once
    #include <GDIPlus.au3>
    #include <Array.au3>
    #include <Constants.au3>
    #include <WindowsConstants.au3>
    #Include <Timers.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #cs
    Copyrights to funkey from Autoit.de
    #ce

    [/autoit] [autoit][/autoit] [autoit]

    Local $HoverArray[1], $ControlID, $Global_I = 0, $__ControlID, $HoverActive = 0, $Temp_Found = 0, $szTemp_Array[2]
    Local $OwnTabHoverCol[2], $OwnTabHoverHelp[1], $OwnTabHoverSwitch, $aOwnTabHoverCount, $OwnTabHoverCtrl
    Local $aOwnTabAlarm[1][3], $iOwnTabAlarm, $hOwnTabGui, $hTimerAlarm, $hTimerHover
    Local $OwnTab_Style = 0 ; only 0 or 1 !

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()
    Opt("OnExitFunc", "_OwnTab_OnExit")

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_Create($hWnd, $aTabText, $xPos, $yPos, $iWidth, $iHeight, $iItemHeight = -1, $nColNoSel = -1, $nColSel = -1, $nColBg = -1, $aIcons = "")
    Local $aSize, $aSize2[UBound($aTabText)][2], $xLast = 0, $aCtrl[UBound($aTabText) + 1][11], $iOffset = 0
    If Not IsArray($aIcons) Then
    Local $Icons[UBound($aTabText)][2]
    Else
    Local $Icons = $aIcons
    EndIf
    If Not IsArray($aTabText) Then Return SetError(1, 0, "")
    For $i = 0 To UBound($aTabText) - 1
    If $aTabText[$i] = "" Then Return SetError(2, $i + 1, "")
    $aSize = _GetTextSize($aTabText[$i])
    $aSize[0] += Ceiling($aSize[0] / 10) ;make it 10% longer for bold text
    $aSize2[$i][0] = $aSize[0]
    $aSize2[$i][1] = $aSize[1]
    If $iItemHeight = -1 Then $iItemHeight = $aSize[1]
    If $Icons[$i][0] <> "" Then
    $iOffset = $iItemHeight
    $aTabText[$i] &= " "
    Else
    $iOffset = 0
    EndIf
    $aCtrl[$i + 1][7] = $Icons[$i][0] ;filename for icon
    $aCtrl[$i + 1][8] = $Icons[$i][1] ;index for icon
    $aCtrl[$i + 1][9] = $aSize[0] + 5 + $iOffset ;labelwidth
    $aCtrl[$i + 1][0] = GUICtrlCreateLabel($aTabText[$i], $xPos + $xLast + 5, $yPos + 2, $aCtrl[$i + 1][9], $iItemHeight, 0x411201 + ($Icons[$i][0] <> ""), $OwnTab_Style)
    _HoverAddCtrl($aCtrl[$i + 1][0])
    If $Icons[$i][0] <> "" Then
    $aCtrl[$i + 1][6] = GUICtrlCreateIcon("", 0, $xPos + $xLast + 8, $yPos + 5, $iItemHeight - 6, $iItemHeight - 6)
    Else
    $aCtrl[$i + 1][6] = GUICtrlCreateDummy()
    EndIf
    ;~ If $Icons[$i][0] <> "" Then _SetBkIcon($aCtrl[$i + 1][6], $nColNoSel, $aCtrl[$i + 1][7], $aCtrl[$i + 1][8], $iItemHeight - 6, $iItemHeight - 6)
    GUICtrlCreateLabel($aCtrl[$i + 1][7], -200, -200) ;For information
    GUICtrlCreateLabel($aCtrl[$i + 1][8], -200, -200) ;For information
    GUICtrlCreateLabel($iItemHeight - 6, -200, -200) ;For information
    $aCtrl[$i + 1][2] = $nColNoSel
    $aCtrl[$i + 1][3] = $nColSel
    $xLast += $aCtrl[$i + 1][9]
    Next
    GUICtrlCreateLabel("", $xPos, $yPos + $iItemHeight, $iWidth, $iHeight, 0x411000, $OwnTab_Style)
    GUICtrlSetState(-1, 128) ;$GUI_DISABLE
    GUICtrlSetBkColor(-1, $nColBg)
    $xLast = 0
    For $i = 0 To UBound($aTabText) - 1
    If $Icons[$i][0] <> "" Then
    $iOffset = $iItemHeight
    Else
    $iOffset = 0
    EndIf
    $aCtrl[$i + 1][1] = GUICtrlCreateLabel("", $xPos + $xLast + 6, $yPos + $iItemHeight - $OwnTab_Style, $aSize2[$i][0] + 3 + $iOffset, 2+2*$OwnTab_Style)
    GUICtrlSetBkColor(-1, $nColSel)
    $xLast += $aSize2[$i][0] + 5 + $iOffset
    Next
    $aCtrl[0][1] = $iItemHeight
    $aCtrl[0][2] = $nColNoSel
    $aCtrl[0][3] = $nColSel
    $aCtrl[0][9] = $yPos + 2
    $hOwnTabGui = $hWnd
    Return $aCtrl
    EndFunc ;==>_OwnTab_Create

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_Switch(ByRef $aOwnTab, $iIndex, $fForce = 0)
    _OwnTab_UnRegisterHover($aOwnTab, $iIndex)
    If _OwnTab_IsAlarmed($aOwnTab[$iIndex][0]) Then $aOwnTabAlarm[@extended][2] = $aOwnTabAlarm[@extended][1]
    $HoverActive = 0
    If $aOwnTab[0][0] = $iIndex And $fForce = 0 Then Return
    For $s = 1 To UBound($aOwnTab, 1) - 1
    If $iIndex <> $s Then
    GUICtrlSetState($aOwnTab[$s][1], 32) ;$GUI_HIDE
    GUICtrlSetFont($aOwnTab[$s][0], -1, 400)
    If Not _OwnTab_IsAlarmed($aOwnTab[$s][0]) Then
    GUICtrlSetBkColor($aOwnTab[$s][0], $aOwnTab[$s][2])
    If $aOwnTab[$s][7] <> "" Then _SetBkIcon($aOwnTab[$s][6], $aOwnTab[$s][2], $aOwnTab[$s][7], $aOwnTab[$s][8], GUICtrlRead($aOwnTab[$s][0] + 4), GUICtrlRead($aOwnTab[$s][0] + 4))
    EndIf
    If _ArraySearch($OwnTabHoverHelp, $aOwnTab[$s][0]) = -1 Then
    _OwnTab_RegisterHover($aOwnTab, $s)
    EndIf
    Else
    GUICtrlSetFont($aOwnTab[$iIndex][0], -1, 1000)
    If Not _OwnTab_IsAlarmed($aOwnTab[$s][0]) Then
    GUICtrlSetBkColor($aOwnTab[$iIndex][0], $aOwnTab[$iIndex][3])
    If $aOwnTab[$s][7] <> "" Then _SetBkIcon($aOwnTab[$iIndex][6], $aOwnTab[$iIndex][3], $aOwnTab[$s][7], $aOwnTab[$s][8], GUICtrlRead($aOwnTab[$s][0] + 4), GUICtrlRead($aOwnTab[$s][0] + 4))
    EndIf
    GUICtrlSetState($aOwnTab[$iIndex][1], 16) ;$GUI_SHOW
    EndIf
    Next
    If $aOwnTab[0][0] = "" Or $fForce Then
    For $t = $aOwnTab[0][4] To $aOwnTab[UBound($aOwnTab, 1) - 1][4]
    GUICtrlSetState($t, 32) ;$GUI_HIDE
    If $t > $aOwnTab[$iIndex - 1][4] And $t < $aOwnTab[$iIndex][4] Then GUICtrlSetState($t, 16) ;$GUI_SHOW
    Next
    Else
    For $t = $aOwnTab[$aOwnTab[0][0] - 1][4] To $aOwnTab[$aOwnTab[0][0]][4]
    GUICtrlSetState($t, 32) ;$GUI_HIDE
    Next
    For $t = $aOwnTab[$iIndex - 1][4] To $aOwnTab[$iIndex][4]
    GUICtrlSetState($t, 16) ;$GUI_SHOW
    Next
    EndIf
    $aOwnTab[0][0] = $iIndex
    EndFunc ;==>_OwnTab_Switch

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_SetTip(ByRef $aOwnTab, $ToolTips = "", $iIndex = "")
    If IsArray($ToolTips) Then
    For $i = 1 To UBound($aOwnTab, 1) - 1
    $aOwnTab[$i][5] = $ToolTips[$i - 1]
    GUICtrlSetTip($aOwnTab[$i][0], $ToolTips[$i - 1])
    Next
    Else
    If $iIndex = "" Then Return SetError(1)
    $aOwnTab[$iIndex][5] = $ToolTips
    GUICtrlSetTip($aOwnTab[$iIndex][0], $ToolTips)
    EndIf
    EndFunc ;==>_OwnTab_SetTip

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_AlarmInit($iTime = 555)
    If Not $hTimerAlarm Then
    $hTimerAlarm = _Timer_SetTimer($hOwnTabGui, $iTime, "_OwnTab_AlarmBlink")
    Else
    $hTimerAlarm = _Timer_SetTimer($hOwnTabGui, $iTime, "", $hTimerAlarm)
    EndIf
    EndFunc ;==>_OwnTab_AlarmInit

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_AlarmBlink($hWnd, $Msg, $iIDTimer, $dwTime)
    Local $AlarmColAct
    $iOwnTabAlarm = Not $iOwnTabAlarm
    For $i = 1 To UBound($aOwnTabAlarm, 1) - 1
    If $iOwnTabAlarm Then
    $AlarmColAct = $aOwnTabAlarm[$i][2]
    Else
    $AlarmColAct = $aOwnTabAlarm[$i][1]
    EndIf
    GUICtrlSetBkColor($aOwnTabAlarm[$i][0], $AlarmColAct)
    _SetBkIcon($aOwnTabAlarm[$i][0] + 1, $AlarmColAct, GUICtrlRead($aOwnTabAlarm[$i][0] + 2), GUICtrlRead($aOwnTabAlarm[$i][0] + 3), GUICtrlRead($aOwnTabAlarm[$i][0] + 4), GUICtrlRead($aOwnTabAlarm[$i][0] + 4))
    Next
    EndFunc ;==>_OwnTab_AlarmBlink

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_SetAlarm(ByRef $aOwnTab, $iIndex, $nAlarmSel = 0xFF0000)
    Local $hCtrl = $aOwnTab[$iIndex][0]
    Local $iSearch = _ArraySearch($aOwnTabAlarm, $hCtrl)
    If $iSearch <> -1 Then Return
    ReDim $aOwnTabAlarm[UBound($aOwnTabAlarm, 1) + 1][3]
    $aOwnTabAlarm[UBound($aOwnTabAlarm, 1) - 1][0] = $hCtrl
    $aOwnTabAlarm[UBound($aOwnTabAlarm, 1) - 1][1] = $nAlarmSel
    $aOwnTabAlarm[UBound($aOwnTabAlarm, 1) - 1][2] = $aOwnTab[$iIndex][2]
    ;~ GUICtrlSetBkColor($aOwnTab[$iIndex][1], $nAlarmSel)
    EndFunc ;==>_OwnTab_SetAlarm

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_ResetAlarm(ByRef $aOwnTab, $iIndex)
    Local $hCtrl = $aOwnTab[$iIndex][0]
    Local $iSearch = _ArraySearch($aOwnTabAlarm, $hCtrl)
    If $iSearch = -1 Then Return
    _ArrayDelete($aOwnTabAlarm, $iSearch)
    $aOwnTab[$iIndex][2] = $aOwnTab[0][2]
    $aOwnTab[$iIndex][3] = $aOwnTab[0][3]
    ;~ GUICtrlSetBkColor($aOwnTab[$iIndex][1], $aOwnTab[0][3])
    If $aOwnTab[0][0] <> $iIndex Then
    GUICtrlSetBkColor($aOwnTab[$iIndex][0], $aOwnTab[0][2])
    Else
    _SetBkIcon($aOwnTab[$iIndex][0] + 1, $aOwnTab[$iIndex][3], $aOwnTab[$iIndex][7], $aOwnTab[$iIndex][8], GUICtrlRead($aOwnTab[$iIndex][0] + 4), GUICtrlRead($aOwnTab[$iIndex][0] + 4))
    GUICtrlSetBkColor($aOwnTab[$iIndex][0], $aOwnTab[0][3])
    EndIf
    EndFunc ;==>_OwnTab_ResetAlarm

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_Add(ByRef $aOwnTab)
    Local $i = 0
    While 1
    If $aOwnTab[$i][4] = "" Then ExitLoop
    $i += 1
    WEnd
    $aOwnTab[$i][4] = GUICtrlCreateDummy()
    EndFunc ;==>_OwnTab_Add

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_End(ByRef $aOwnTab, $iIndex = 1)
    $aOwnTab[UBound($aOwnTab, 1) - 1][4] = GUICtrlCreateDummy()
    _OwnTab_Switch($aOwnTab, $iIndex)
    EndFunc ;==>_OwnTab_End

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_Hover($aOwnTab, $nColHover, $fSwitch = 0, $iTime = 50)
    $OwnTabHoverCol[0] = $nColHover
    $OwnTabHoverCol[1] = $aOwnTab[0][2]
    $OwnTabHoverSwitch = $fSwitch
    If Not $hTimerHover Then
    $hTimerHover = _Timer_SetTimer($hOwnTabGui, $iTime, "_ProcessHover")
    Else
    $hTimerHover = _Timer_SetTimer($hOwnTabGui, $iTime, "", $hTimerHover)
    EndIf
    EndFunc ;==>_OwnTab_Hover

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_RegisterHover($aOwnTab, $iIndex)
    If _ArraySearch($HoverArray, $aOwnTab[$iIndex][0]) = -1 Then _HoverAddCtrl($aOwnTab[$iIndex][0])
    EndFunc ;==>_OwnTab_RegisterHover

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_UnRegisterHover($aOwnTab, $iIndex)
    Local $iSearch = _ArraySearch($HoverArray, $aOwnTab[$iIndex][0])
    If $iSearch <> -1 Then _ArrayDelete($HoverArray, $iSearch)
    EndFunc ;==>_OwnTab_UnRegisterHover

    [/autoit] [autoit][/autoit] [autoit]

    #Region Disable and Enable Tab-Register
    Func _OwnTab_Disable($aOwnTab, $iIndex)
    GUICtrlSetState($aOwnTab[$iIndex][0], 128)
    _OwnTab_UnRegisterHover($aOwnTab, $iIndex)
    Local $iSearch = _ArraySearch($OwnTabHoverHelp, $aOwnTab[$iIndex][0])
    If $iSearch = -1 Then _ArrayAdd($OwnTabHoverHelp, $aOwnTab[$iIndex][0])
    EndFunc ;==>_OwnTab_Disable

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_Enable($aOwnTab, $iIndex)
    GUICtrlSetState($aOwnTab[$iIndex][0], 64)
    _OwnTab_RegisterHover($aOwnTab, $iIndex)
    Local $iSearch = _ArraySearch($OwnTabHoverHelp, $aOwnTab[$iIndex][0])
    If $iSearch <> -1 Then _ArrayDelete($OwnTabHoverHelp, $iSearch)
    EndFunc ;==>_OwnTab_Enable
    #EndRegion Disable and Enable Tab-Register

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_Hide(ByRef $aOwnTab, $iIndex)
    If $iIndex = 0 Or $iIndex > UBound($aOwnTab, 1) - 1 Then Return SetError(1)
    If BitAND(GUICtrlGetState($aOwnTab[$iIndex][0]), 32) Then Return
    GUICtrlSetState($aOwnTab[$iIndex][0], 32) ;$GUI_HIDE
    GUICtrlSetState($aOwnTab[$iIndex][1], 32) ;$GUI_HIDE
    GUICtrlSetState($aOwnTab[$iIndex][6], 32) ;$GUI_HIDE

    [/autoit] [autoit][/autoit] [autoit]

    Local $Offset = 3
    For $o = 0 To $iIndex - 1
    $Offset += $aOwnTab[$o][9] - 0
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $o = $iIndex + 1 To UBound($aOwnTab, 1) - 1
    GUICtrlSetPos($aOwnTab[$o][0], $Offset, $aOwnTab[0][9])
    GUICtrlSetPos($aOwnTab[$o][1], $Offset + 1, $aOwnTab[0][9] + $aOwnTab[0][1] - 2 - $OwnTab_Style)
    GUICtrlSetPos($aOwnTab[$o][6], $Offset + 3, $aOwnTab[0][9] + 3)
    $Offset += $aOwnTab[$o][9]
    Next
    If $iIndex = $aOwnTab[0][0] Then
    If $iIndex = 1 Then
    _OwnTab_Switch($aOwnTab, 2)
    Else
    _OwnTab_Switch($aOwnTab, $iIndex - 1)
    EndIf
    EndIf
    EndFunc ;==>_OwnTab_Hide

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_Show(ByRef $aOwnTab, $iIndex, $iActivate = 0)
    If $iIndex = 0 Or $iIndex > UBound($aOwnTab, 1) + 1 Then Return SetError(1)
    If BitAND(GUICtrlGetState($aOwnTab[$iIndex][0]), 16) Then Return

    [/autoit] [autoit][/autoit] [autoit]

    Local $Offset = 3
    For $o = 0 To UBound($aOwnTab, 1) - 2
    $Offset += $aOwnTab[$o][9] - 0
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $o = UBound($aOwnTab, 1) - 1 To $iIndex + 1 Step -1
    GUICtrlSetPos($aOwnTab[$o][0], $Offset, $aOwnTab[0][9])
    GUICtrlSetPos($aOwnTab[$o][1], $Offset + 1, $aOwnTab[0][9] + $aOwnTab[0][1] - 2 - $OwnTab_Style)
    GUICtrlSetPos($aOwnTab[$o][6], $Offset + 3, $aOwnTab[0][9] + 3)
    $Offset -= $aOwnTab[$o - 1][9]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetState($aOwnTab[$iIndex][0], 16) ;$GUI_SHOW
    GUICtrlSetState($aOwnTab[$iIndex][6], 16) ;$GUI_SHOW

    [/autoit] [autoit][/autoit] [autoit]

    If $iActivate Then
    _OwnTab_Switch($aOwnTab, $iIndex)
    EndIf
    EndFunc ;==>_OwnTab_Show

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_SetFontCol($aOwnTab, $nColor, $iIndex = "")
    If $iIndex = "" Then
    For $i = 1 To UBound($aOwnTab, 1) - 1
    GUICtrlSetColor($aOwnTab[$i][0], $nColor)
    Next
    Else
    If $iIndex < 1 Or $iIndex >= UBound($aOwnTab, 1) Then Return SetError(1)
    GUICtrlSetColor($aOwnTab[$iIndex][0], $nColor)
    EndIf
    EndFunc ;==>_OwnTab_SetFontCol

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_SetOnEvent($aOwnTab, $sFunc = "", $iIndex = "")
    If $sFunc = "" Then $sFunc = "_OwnTab_OnEvent"
    If $iIndex = "" Then
    For $f = 1 To UBound($aOwnTab, 1) -1
    GUICtrlSetOnEvent($aOwnTab[$f][0], $sFunc)
    Next
    Else
    If $iIndex < 1 Or $iIndex >= UBound($aOwnTab, 1) Then Return SetError(1)
    GUICtrlSetOnEvent($aOwnTab[$iIndex][0], $sFunc)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Func _OwnTab_OnEvent() ;for example
    ;~ For $a = 1 To UBound($aCtrlTab, 1) -1
    ;~ If @GUI_CtrlId = $aCtrlTab[$a][0] Then ExitLoop
    ;~ Next
    ;~ If $a < UBound($aCtrlTab, 1) Then _OwnTab_Switch($aCtrlTab, $a)
    ;~ EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_OnExit()
    _GDIPlus_Shutdown()
    If $hTimerAlarm Then _Timer_KillTimer($hOwnTabGui, $hTimerAlarm)
    If $hTimerHover Then _Timer_KillTimer($hOwnTabGui, $hTimerHover)
    EndFunc ;==>_OwnTab_Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetTextSize($nText, $sFont = 'Microsoft Sans Serif', $iFontSize = 8.5, $iFontAttributes = 0)
    ;Author: Bugfix
    ;Modified: funkey
    If $nText = '' Then Return
    Local $hGui = GUICreate("Textmeter by Bugfix")
    ;~ _GDIPlus_Startup()
    Local $hFormat = _GDIPlus_StringFormatCreate(0)
    Local $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    Local $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, $iFontAttributes, 3)
    Local $tLayout = _GDIPlus_RectFCreate(15, 171, 0, 0)
    Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $nText, $hFont, $tLayout, $hFormat)
    Local $iWidth = Ceiling(DllStructGetData($aInfo[0], "Width"))
    Local $iHeight = Ceiling(DllStructGetData($aInfo[0], "Height"))
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_GraphicsDispose($hGraphic)
    ;~ _GDIPlus_Shutdown()
    GUIDelete($hGui)
    Local $aSize[2] = [$iWidth, $iHeight]
    Return $aSize
    EndFunc ;==>_GetTextSize

    [/autoit] [autoit][/autoit] [autoit]

    Func _ProcessHover($hWnd, $Msg, $iIDTimer, $dwTime)
    If $OwnTabHoverSwitch > 1 And $OwnTabHoverCtrl <> "" Then
    If $aOwnTabHoverCount < $OwnTabHoverSwitch Then $aOwnTabHoverCount += 1
    If $aOwnTabHoverCount >= $OwnTabHoverSwitch Then
    ControlClick($hOwnTabGui, "", $OwnTabHoverCtrl)
    $aOwnTabHoverCount = 0
    $OwnTabHoverCtrl = ""
    EndIf
    EndIf
    $ControlID = _HoverCheck()
    If IsArray($ControlID) Then
    If $ControlID[0] = "AcquiredHover" Then
    $OwnTabHoverCtrl = $ControlID[1]
    $aOwnTabHoverCount = 0
    If $OwnTabHoverSwitch = "1" Then
    Return ControlClick($hOwnTabGui, "", $OwnTabHoverCtrl)
    Else
    _HoverFound($ControlID[1])
    EndIf
    Else
    If $ControlID[1] <> "" Then
    _HoverLost($ControlID[1])
    $OwnTabHoverCtrl = ""
    EndIf
    EndIf
    EndIf
    EndFunc ;==>_ProcessHover

    [/autoit] [autoit][/autoit] [autoit]

    Func _HoverLost($ControlID)
    If _OwnTab_IsAlarmed($ControlID) Then Return
    GUICtrlSetBkColor($ControlID, $OwnTabHoverCol[1])
    If GUICtrlRead($ControlID + 2) <> "" Then _SetBkIcon($ControlID + 1, $OwnTabHoverCol[1], GUICtrlRead($ControlID + 2), GUICtrlRead($ControlID + 3), GUICtrlRead($ControlID + 4), GUICtrlRead($ControlID + 4))
    EndFunc ;==>_HoverLost

    [/autoit] [autoit][/autoit] [autoit]

    Func _HoverFound($ControlID)
    If _OwnTab_IsAlarmed($ControlID) Then Return
    GUICtrlSetBkColor($ControlID, $OwnTabHoverCol[0])
    If GUICtrlRead($ControlID + 2) <> "" Then _SetBkIcon($ControlID + 1, $OwnTabHoverCol[0], GUICtrlRead($ControlID + 2), GUICtrlRead($ControlID + 3), GUICtrlRead($ControlID + 4), GUICtrlRead($ControlID + 4))
    EndFunc ;==>_HoverFound

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTab_IsAlarmed($hCtrl)
    Local $iSearch = _ArraySearch($aOwnTabAlarm, $hCtrl)
    If $iSearch = -1 Then Return 0
    Return SetExtended($iSearch, 1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    #Region _MouseHover.au3
    ;====================================================================================================================================
    ; UDF Name: _MouseHover.au3
    ;
    ; Author: marfdaman (Marvin)
    ;
    ; Contributions: RazerM (adding SetText parameter to _HoverFound and _HoverUndo).
    ;
    ; email: marfdaman at gmail dot com
    ;
    ; Use: Enable hover events for controls
    ;
    ; Note(s): If you want to use this i.c.w. an AdlibEnable in your current script, make your Adlib call "_HoverCheck()" as well.
    ; In this case, _HoverOn must NOT be called.
    ;====================================================================================================================================

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Description: _HoverAddCtrl
    ; Parameter(s): $___ControlID -> Control ID of control to be hoverchecked
    ;
    ; Requirement: Array.au3
    ; Return Value(s): None
    ;===============================================================================
    Func _HoverAddCtrl($___ControlID)
    _ArrayAdd($HoverArray, $___ControlID)
    EndFunc ;==>_HoverAddCtrl

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Description: Checks whether the mousecursor is hovering over any of the defined controls.
    ; Parameter(s): None
    ; Requirement: None
    ; Return Value(s): If a control has matched, an array will be returned, with $array[1] being either
    ; "AcquiredHover" or "LostHover". $array[2] will contain the control ID.
    ; It is recommended that you put this function in an AdlibEnable, since it's EXTREMELY
    ; resource friendly.
    ;===============================================================================
    Func _HoverCheck()
    $HoverData = GUIGetCursorInfo()
    If Not IsArray($HoverData) Then Return
    $Temp_Found = 0
    For $i = 1 To UBound($HoverArray) - 1
    If $HoverData[4] = $HoverArray[$i] Or $HoverData[4] = $HoverArray[$i] + 1 Then
    $Temp_Found = $i
    EndIf
    Next
    Select
    Case $Temp_Found = 0 And $HoverActive = 1 Or $Temp_Found <> 0 And $Temp_Found <> $Global_I And $HoverActive = 1
    $HoverActive = 0
    $Temp_Found = 0
    $szTemp_Array[0] = "LostHover"
    $szTemp_Array[1] = $HoverArray[$Global_I]
    Return $szTemp_Array
    Case $Temp_Found > 0 And $HoverActive = 0
    $Global_I = $Temp_Found
    $HoverActive = 1
    $Temp_Found = 0
    $szTemp_Array[0] = "AcquiredHover"
    $szTemp_Array[1] = $HoverArray[$Global_I]
    Return $szTemp_Array
    EndSelect
    EndFunc ;==>_HoverCheck
    #EndRegion _MouseHover.au3

    [/autoit] [autoit][/autoit] [autoit]

    Func _SetBkIcon($ControlID, $iBackground, $sIcon, $iIndex, $iWidth, $iHeight)
    ;Yashied
    ;http://www.autoitscript.com/forum/index.ph…ndpost&p=662886
    Const $STM_SETIMAGE = 0x0172

    [/autoit] [autoit][/autoit] [autoit]

    Local $tIcon, $tID, $hDC, $hBackDC, $hBackSv, $hBitmap, $hImage, $hIcon, $hBkIcon

    [/autoit] [autoit][/autoit] [autoit]

    $tIcon = DllStructCreate('hwnd')
    $tID = DllStructCreate('hwnd')
    $hIcon = DllCall('user32.dll', 'int', 'PrivateExtractIcons', 'str', $sIcon, 'int', $iIndex, 'int', $iWidth, 'int', $iHeight, 'ptr', DllStructGetPtr($tIcon), 'ptr', DllStructGetPtr($tID), 'int', 1, 'int', 0)
    If (@error) Or ($hIcon[0] = 0) Then
    Return SetError(1, 0, 0)
    EndIf
    $hIcon = DllStructGetData($tIcon, 1)
    $tIcon = 0
    $tID = 0

    [/autoit] [autoit][/autoit] [autoit]

    $hDC = _WinAPI_GetDC(0)
    $hBackDC = _WinAPI_CreateCompatibleDC($hDC)
    $hBitmap = _WinAPI_CreateSolidBitmap(0, $iBackground, $iWidth, $iHeight)
    $hBackSv = _WinAPI_SelectObject($hBackDC, $hBitmap)
    _WinAPI_DrawIconEx($hBackDC, 0, 0, $hIcon, 0, 0, 0, 0, $DI_NORMAL)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $hBkIcon = DllCall($ghGDIPDll, 'int', 'GdipCreateHICONFromBitmap', 'hWnd', $hImage, 'int*', 0)
    $hBkIcon = $hBkIcon[2]
    _GDIPlus_ImageDispose($hImage)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSendMsg($ControlID, $STM_SETIMAGE, $IMAGE_ICON, _WinAPI_CopyIcon($hBkIcon))
    _WinAPI_RedrawWindow(GUICtrlGetHandle($ControlID))

    [/autoit] [autoit][/autoit] [autoit]

    ;~ _GDIPlus_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    _WinAPI_SelectObject($hBackDC, $hBackSv)
    _WinAPI_DeleteDC($hBackDC)
    _WinAPI_ReleaseDC(0, $hDC)
    _WinAPI_DeleteObject($hBkIcon)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteObject($hIcon)

    [/autoit] [autoit][/autoit] [autoit]

    Return SetError(0, 0, 1)
    EndFunc ;==>_SetBkIcon

    [/autoit]

    Edit: Fehler mit Hover-Funktion ausgebessert
    Edit: Icon-Support ergänzt
    Edit: Screenshot hinzugefügt
    Edit: Blinken des alarmierten Registers hinzugefügt, verstecken und anzeigen von Registern
    Edit: Problem mit Icons gefixt
    Edit: Problem mit Switch on hover gefixt, 2. Style eingebunden, einige Verbesserungen
    Edit: bilder-Galerie hinzugefügt

  • Grafisch nicht berauschend, es ging mir nur darum es mal zu versuchen ;)

    Naja es kommt nicht auf die Grafik an, sondern wie es Programmiert wurde, und ich hätte es nicht hinbekommen.
    Grafik geht so, aber Programmierweise richtig gut :D

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Neue Version ;)
    Grafisch etwas verbessert und außerdem sind nun mehrere Tabs möglich.

    Spoiler anzeigen
    [autoit]

    #Include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Funkey's Own Tabs ;)", 500, 700)
    Local $aTabText[4] = ["Item 1", "Longer Item 2", "3rd Item", "Tab in Tab"] ;Declare the regions for the OwnTab-control

    [/autoit] [autoit][/autoit] [autoit]

    Global $aCtrlTab = _OwnTabCreate($aTabText, 10, 10, 480, 300, 25, -1, 0x00FF00, 0x00FF00)

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab1
    $aCtrlTab[0][4] = GUICtrlCreateDummy() ;Start controls tab1
    Global $Edit1 = GUICtrlCreateEdit("Edit in Tab1", 20, 50, 300, 50)
    Global $Label1 = GUICtrlCreateLabel("Label in Tab1", 20, 100, 300, 20)
    #EndRegion

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab2
    $aCtrlTab[1][4] = GUICtrlCreateDummy() ;Start controls tab2
    Global $Edit2 = GUICtrlCreateEdit("Edit in Tab2", 20, 150, 300, 50)
    Global $Label2 = GUICtrlCreateLabel("Label in Tab2", 20, 200, 300, 20)
    #EndRegion

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab3
    $aCtrlTab[2][4] = GUICtrlCreateDummy() ;Start controls tab3
    Global $Edit3 = GUICtrlCreateEdit("Edit in Tab3", 20, 250, 300, 50)
    Global $Label3 = GUICtrlCreateLabel("Label in Tab3", 20, 300, 300, 20)
    #EndRegion

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab4
    $aCtrlTab[3][4] = GUICtrlCreateDummy() ;Start controls tab4
    Local $aTabText[2] = ["Test 1", "Test 2"] ;Declare the regions for the OwnTab-control
    Global $aCtrlTab2 = _OwnTabCreate($aTabText, 50, 50, 280, 100, 25, 0xFF0000, 0xFFFF00, 0xFFFF00)

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab1 in Tab4
    $aCtrlTab2[0][4] = GUICtrlCreateDummy() ;Start controls tab1
    Global $Edit41 = GUICtrlCreateEdit("Edit in Tab1 in Tab4", 70, 100, 200, 70)
    #EndRegion

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab2 in Tab4
    $aCtrlTab2[1][4] = GUICtrlCreateDummy() ;Start controls tab1
    Global $Button42 = GUICtrlCreateButton("A Button in a tab in a tab", 70, 100, 200, 30)
    #EndRegion

    [/autoit] [autoit][/autoit] [autoit]

    $aCtrlTab2[2][4] = GUICtrlCreateDummy() ;End controls for tab in tab
    $aCtrlTab[4][4] = GUICtrlCreateDummy() ;End controls for tab

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Label unterhalb des OwnTab", 20, 350, 300, 20)

    [/autoit] [autoit][/autoit] [autoit]

    Local $aTabText[2] = ["Buttons Page 1", "Buttons Page 2"] ;Declare the regions for the OwnTab-control
    Global $aCtrlTab3 = _OwnTabCreate($aTabText, 10, 400, 400, 250, 20, 0xaaaaaa, 0xffff, 0xffff)

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab1
    $aCtrlTab3[0][4] = GUICtrlCreateDummy() ;Start controls tab1
    Global $Button11 = GUICtrlCreateButton("Button1", 20, 440, 80, 30)
    Global $Button12 = GUICtrlCreateButton("Button2", 20, 480, 80, 30)
    Global $Button13 = GUICtrlCreateButton("Button3", 20, 520, 80, 30)
    Global $Button14 = GUICtrlCreateButton("Button4", 20, 560, 80, 30)
    Global $Button15 = GUICtrlCreateButton("Button5", 20, 600, 80, 30)
    #EndRegion

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab2
    $aCtrlTab3[1][4] = GUICtrlCreateDummy() ;Start controls tab2
    Global $Button21 = GUICtrlCreateButton("Button6", 20, 440, 80, 30)
    Global $Button22 = GUICtrlCreateButton("Button7", 20, 480, 80, 30)
    Global $Button23 = GUICtrlCreateButton("Button8", 20, 520, 80, 30)
    Global $Button24 = GUICtrlCreateButton("Button9", 20, 560, 80, 30)
    Global $Button25 = GUICtrlCreateButton("Button10", 20, 600, 80, 30)
    #EndRegion

    [/autoit] [autoit][/autoit] [autoit]

    $aCtrlTab3[2][4] = GUICtrlCreateDummy() ;End controls for tab in tab

    [/autoit] [autoit][/autoit] [autoit]

    Global $MemTabInTab1 = 4 ; This variable shows where the tab in tab is.
    Global $MemTabInTab2 = 1 ; Variable to remember what register in the tab in tab was selected

    [/autoit] [autoit][/autoit] [autoit]

    _OwnTabSwitch($aCtrlTab3, 1) ; show first tab-register in tab in tab
    _OwnTabSwitch($aCtrlTab2, $MemTabInTab2) ; show first tab-register in tab in tab
    _OwnTabSwitch($aCtrlTab, 1) ; show first tab-register

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    Local $msg
    Do
    $msg = GUIGetMsg()
    For $a = 1 To UBound($aCtrlTab, 1) - 1
    If $msg = $aCtrlTab[$a][0] Then
    _OwnTabSwitch($aCtrlTab, $a)
    If $a = $MemTabInTab1 Then _OwnTabSwitch($aCtrlTab2, $MemTabInTab2)
    EndIf
    Next
    For $a = 1 To UBound($aCtrlTab2, 1) - 1
    If $msg = $aCtrlTab2[$a][0] Then
    _OwnTabSwitch($aCtrlTab2, $a)
    $MemTabInTab2 = $a ;remember the selected register
    EndIf
    Next
    For $a = 1 To UBound($aCtrlTab3, 1) - 1
    If $msg = $aCtrlTab3[$a][0] Then _OwnTabSwitch($aCtrlTab3, $a)
    Next
    Sleep(10)
    Until $msg = -3

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTabCreate($aTabText, $xPos, $yPos, $iWidth, $iHeight, $iItemHeight = -1, $nColNoSel = -1, $nColSel = -1, $nColBg = -1)
    Local $aSize, $xLast = 0, $aCtrl[UBound($aTabText) + 1][5]
    If Not IsArray($aTabText) Then Return SetError(1, 0, "")
    GUICtrlCreateLabel("", $xPos, $yPos + $iItemHeight, $iWidth, $iHeight, 0x1000)
    GUICtrlSetState(-1, 128) ;$GUI_DISABLE
    GUICtrlSetBkColor(-1, $nColBg)
    For $i = 0 To UBound($aTabText) -1
    If $aTabText[$i] = "" Then Return SetError(2, $i+1, "")
    $aSize = _GetTextSize($aTabText[$i])
    If $iItemHeight = -1 Then $iItemHeight = $aSize[1]
    $aCtrl[$i+1][0] = GUICtrlCreateLabel($aTabText[$i], $xPos + $xLast + 2, $yPos + 2, $aSize[0] + 5, $iItemHeight, BitOR(0x201, 0x411000))
    $aCtrl[$i+1][1] = GUICtrlCreateLabel("", $xPos + $xLast + 4, $yPos + $iItemHeight, $aSize[0] + 1, 2)
    GUICtrlSetBkColor(-1, $nColSel)
    $aCtrl[$i+1][2] = $nColNoSel
    $aCtrl[$i+1][3] = $nColSel
    $xLast += $aSize[0] + 5
    Next
    Return $aCtrl
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTabSwitch($aOwnTab, $iIndex)
    Local $iSwitch = $iIndex
    For $s = 1 To UBound($aOwnTab, 1) - 1
    If $iIndex <> $s Then
    GUICtrlSetState($aOwnTab[$s][1], 32) ;$GUI_HIDE
    GUICtrlSetBkColor($aOwnTab[$s][0], $aOwnTab[$s][2])
    Else
    GUICtrlSetBkColor($aOwnTab[$iIndex][0], $aOwnTab[$s][3])
    GUICtrlSetState($aOwnTab[$iIndex][1], 16) ;$GUI_SHOW
    EndIf
    Next
    For $t = $aOwnTab[0][4] To $aOwnTab[UBound($aOwnTab, 1)-1][4]
    GUICtrlSetState($t, 32) ;$GUI_HIDE
    If $t > $aOwnTab[$iIndex-1][4] And $t < $aOwnTab[$iIndex][4] Then GUICtrlSetState($t, 16) ;$GUI_SHOW
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetTextSize($nText, $sFont = 'Microsoft Sans Serif', $iFontSize = 8.5, $iFontAttributes = 0)
    ;Author: Bugfix
    ;Modified: funkey
    If $nText = '' Then Return
    Local $hGui = GUICreate("Textmeter by Bugfix")
    _GDIPlus_Startup()
    Local $hFormat = _GDIPlus_StringFormatCreate(0)
    Local $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    Local $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, $iFontAttributes, 3)
    Local $tLayout = _GDIPlus_RectFCreate(15, 171, 0, 0)
    Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $nText, $hFont, $tLayout, $hFormat)
    Local $iWidth = Ceiling(DllStructGetData($aInfo[0], "Width"))
    Local $iHeight = Ceiling(DllStructGetData($aInfo[0], "Height"))
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    GUIDelete($hGui)
    Local $aSize[2] = [$iWidth, $iHeight]
    Return $aSize
    EndFunc ;==>_GetTextSize

    [/autoit]
  • Wird immer besser dein Tabmenü !
    So langsam kommt es echt an das Original und man muss erst mal auch die Idee kommen ;)
    Super mach weiter so :thumbup:

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

  • Zitat von tobi_girst

    Graphisch: 4-5


    :(
    Ich hoffe das liegt hauptsächlich nur an den Farben, die ich für die Beispiele verwendet habe. :D

    Danke für die ansonsten positiven Kommentare!

    Hab das Skript noch ein bischen weiter verbessert.
    Der Text des aktiven Registers wird nun fett angezeigt.

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Funkey's Own Tabs ;)", 500, 345)
    GUISetBkColor(0xbbbbbb)

    [/autoit] [autoit][/autoit] [autoit]

    Local $aTabText[4] = ["Item 1", "Much More Longer Item 2", "Pic", "Empty"] ;Declare the regions for the OwnTab-control
    Global $aCtrlTab = _OwnTabCreate($aTabText, 10, 10, 480, 300, 25, 0xD5D5D5, 0xCFE0E7, 0xCFE0E7)

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab1
    $aCtrlTab[0][4] = GUICtrlCreateDummy() ;Start controls tab1
    Global $Edit1 = GUICtrlCreateEdit("Edit in Tab1", 20, 50, 300, 50, 0)
    Global $Label1 = GUICtrlCreateButton("Button in Tab1", 20, 120, 300, 20)
    #EndRegion Tab1

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab2
    $aCtrlTab[1][4] = GUICtrlCreateDummy() ;Start controls tab2
    Global $Edit2 = GUICtrlCreateEdit("Edit in Tab2", 20, 150, 300, 50, 0)
    Global $Label2 = GUICtrlCreateLabel("Label in Tab2", 20, 220, 300, 20, 0x201)
    GUICtrlSetBkColor(-1, -2) ;$GUI_BKCOLOR_TRANSPARENT
    #EndRegion Tab2

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab3
    $aCtrlTab[2][4] = GUICtrlCreateDummy() ;Start controls tab3
    Global $Edit3 = GUICtrlCreatePic(@DocumentsCommonDir & '\Eigene Bilder\Beispielbilder\Winter.jpg', 20, 45, 460, 280)
    #EndRegion Tab3

    [/autoit] [autoit][/autoit] [autoit]

    $aCtrlTab[3][4] = GUICtrlCreateDummy() ;Empty tab
    $aCtrlTab[4][4] = GUICtrlCreateDummy() ;End own tabs

    [/autoit] [autoit][/autoit] [autoit]

    _OwnTabSwitch($aCtrlTab, 1)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    Local $msg
    Do
    $msg = GUIGetMsg()
    For $a = 1 To UBound($aCtrlTab, 1) - 1
    If $msg = $aCtrlTab[$a][0] Then _OwnTabSwitch($aCtrlTab, $a)
    Next
    Sleep(10)
    Until $msg = -3

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTabCreate($aTabText, $xPos, $yPos, $iWidth, $iHeight, $iItemHeight = -1, $nColNoSel = -1, $nColSel = -1, $nColBg = -1)
    Local $aSize, $aSize2[UBound($aTabText)][2], $xLast = 0, $aCtrl[UBound($aTabText) + 1][5]
    If Not IsArray($aTabText) Then Return SetError(1, 0, "")
    For $i = 0 To UBound($aTabText) - 1
    If $aTabText[$i] = "" Then Return SetError(2, $i + 1, "")
    $aSize = _GetTextSize($aTabText[$i])
    $aSize[0] += Ceiling($aSize[0] / 10) ;make it 10% longer for bold text
    $aSize2[$i][0] = $aSize[0]
    $aSize2[$i][1] = $aSize[1]
    If $iItemHeight = -1 Then $iItemHeight = $aSize[1]
    $aCtrl[$i + 1][0] = GUICtrlCreateLabel($aTabText[$i], $xPos + $xLast + 5, $yPos + 2, $aSize[0] + 5, $iItemHeight, 0x411201)
    $aCtrl[$i + 1][2] = $nColNoSel
    $aCtrl[$i + 1][3] = $nColSel
    $xLast += $aSize[0] + 5
    Next
    GUICtrlCreateLabel("", $xPos, $yPos + $iItemHeight, $iWidth, $iHeight, 0x411000)
    GUICtrlSetState(-1, 128) ;$GUI_DISABLE
    GUICtrlSetBkColor(-1, $nColBg)
    $xLast = 0
    For $i = 0 To UBound($aTabText) - 1
    $aCtrl[$i + 1][1] = GUICtrlCreateLabel("", $xPos + $xLast + 6, $yPos + $iItemHeight, $aSize2[$i][0] + 3, 2)
    GUICtrlSetBkColor(-1, $nColSel)
    $xLast += $aSize2[$i][0] + 5
    Next
    Return $aCtrl
    EndFunc ;==>_OwnTabCreate

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTabSwitch($aOwnTab, $iIndex)
    Local $iSwitch = $iIndex
    For $s = 1 To UBound($aOwnTab, 1) - 1
    If $iIndex <> $s Then
    GUICtrlSetState($aOwnTab[$s][1], 32) ;$GUI_HIDE
    GUICtrlSetBkColor($aOwnTab[$s][0], $aOwnTab[$s][2])
    GUICtrlSetFont($aOwnTab[$s][0], -1, 400)
    Else
    GUICtrlSetBkColor($aOwnTab[$iIndex][0], $aOwnTab[$s][3])
    GUICtrlSetFont($aOwnTab[$iIndex][0], -1, 1000)
    GUICtrlSetState($aOwnTab[$iIndex][1], 16) ;$GUI_SHOW
    EndIf
    Next
    For $t = $aOwnTab[0][4] To $aOwnTab[UBound($aOwnTab, 1) - 1][4]
    GUICtrlSetState($t, 32) ;$GUI_HIDE
    If $t > $aOwnTab[$iIndex - 1][4] And $t < $aOwnTab[$iIndex][4] Then GUICtrlSetState($t, 16) ;$GUI_SHOW
    Next
    EndFunc ;==>_OwnTabSwitch

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetTextSize($nText, $sFont = 'Microsoft Sans Serif', $iFontSize = 8.5, $iFontAttributes = 0)
    ;Author: Bugfix
    ;Modified: funkey
    If $nText = '' Then Return
    Local $hGui = GUICreate("Textmeter by Bugfix")
    _GDIPlus_Startup()
    Local $hFormat = _GDIPlus_StringFormatCreate(0)
    Local $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    Local $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, $iFontAttributes, 3)
    Local $tLayout = _GDIPlus_RectFCreate(15, 171, 0, 0)
    Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $nText, $hFont, $tLayout, $hFormat)
    Local $iWidth = Ceiling(DllStructGetData($aInfo[0], "Width"))
    Local $iHeight = Ceiling(DllStructGetData($aInfo[0], "Height"))
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    GUIDelete($hGui)
    Local $aSize[2] = [$iWidth, $iHeight]
    Return $aSize
    EndFunc ;==>_GetTextSize

    [/autoit]
    • Offizieller Beitrag

    Also mir gefällt dein Script. Finde es sehr interessant und hab es gleich mal archiviert. :thumbup:
    Die Optik finde ich eigentlich gut gelungen.

  • Thx Raupi!

    Nächste Version! Jetzt kann die Farbe der einzelnen Register geändert werden, z.B. wenn ein Alarm auftritt ;)

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Funkey's Own Tabs ;)", 500, 345)
    GUISetBkColor(0xbbbbbb)

    [/autoit] [autoit][/autoit] [autoit]

    Local $aTabText[4] = ["Item 1", "Much More Longer Item 2", "Pic", "Status"] ;Declare the regions for the OwnTab-control
    Global $aCtrlTab = _OwnTabCreate($aTabText, 10, 10, 480, 300, 25, 0xD5D5D5, 0xCFE0E7, 0xCFE0E7)

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab1
    $aCtrlTab[0][4] = GUICtrlCreateDummy() ;Start controls tab1
    Global $Edit1 = GUICtrlCreateEdit("Edit in Tab1", 20, 50, 300, 50, 0)
    Global $Button1 = GUICtrlCreateButton("Simulate an alarm", 20, 120, 300, 20)
    #EndRegion Tab1

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab2
    $aCtrlTab[1][4] = GUICtrlCreateDummy() ;Start controls tab2
    Global $Edit2 = GUICtrlCreateEdit("Edit in Tab2", 20, 150, 300, 50, 0)
    Global $Label2 = GUICtrlCreateLabel("Label in Tab2", 20, 220, 300, 20, 0x201)
    GUICtrlSetBkColor(-1, -2) ;$GUI_BKCOLOR_TRANSPARENT
    #EndRegion Tab2

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab3
    $aCtrlTab[2][4] = GUICtrlCreateDummy() ;Start controls tab3
    Global $Edit3 = GUICtrlCreatePic(@DocumentsCommonDir & '\Eigene Bilder\Beispielbilder\Winter.jpg', 20, 45, 460, 280)
    #EndRegion Tab3

    [/autoit] [autoit][/autoit] [autoit]

    #Region Tab4
    $aCtrlTab[3][4] = GUICtrlCreateDummy() ;Start controls tab4
    Global $Button4 = GUICtrlCreateButton("Acknowledge the alarm", 20, 120, 300, 20)
    #EndRegion Tab4

    [/autoit] [autoit][/autoit] [autoit]

    $aCtrlTab[4][4] = GUICtrlCreateDummy() ;End OwnTab

    [/autoit] [autoit][/autoit] [autoit]

    _OwnTabSwitch($aCtrlTab, 1)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    Local $msg
    Do
    $msg = GUIGetMsg()
    For $a = 1 To UBound($aCtrlTab, 1) - 1
    If $msg = $aCtrlTab[$a][0] Then _OwnTabSwitch($aCtrlTab, $a)
    Next
    If $msg = $Button1 Then _OwnTabSetCol($aCtrlTab, 4, 0xFF0000, 0xFF0000)
    If $msg = $Button4 Then _OwnTabSetCol($aCtrlTab, 4)
    Sleep(10)
    Until $msg = -3

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTabCreate($aTabText, $xPos, $yPos, $iWidth, $iHeight, $iItemHeight = -1, $nColNoSel = -1, $nColSel = -1, $nColBg = -1)
    Local $aSize, $aSize2[UBound($aTabText)][2], $xLast = 0, $aCtrl[UBound($aTabText) + 1][5]
    If Not IsArray($aTabText) Then Return SetError(1, 0, "")
    $aCtrl[0][2] = $nColNoSel
    $aCtrl[0][3] = $nColSel
    For $i = 0 To UBound($aTabText) - 1
    If $aTabText[$i] = "" Then Return SetError(2, $i + 1, "")
    $aSize = _GetTextSize($aTabText[$i])
    $aSize[0] += Ceiling($aSize[0] / 10) ;make it 10% longer for bold text
    $aSize2[$i][0] = $aSize[0]
    $aSize2[$i][1] = $aSize[1]
    If $iItemHeight = -1 Then $iItemHeight = $aSize[1]
    $aCtrl[$i + 1][0] = GUICtrlCreateLabel($aTabText[$i], $xPos + $xLast + 5, $yPos + 2, $aSize[0] + 5, $iItemHeight, 0x411201)
    $aCtrl[$i + 1][2] = $nColNoSel
    $aCtrl[$i + 1][3] = $nColSel
    $xLast += $aSize[0] + 5
    Next
    GUICtrlCreateLabel("", $xPos, $yPos + $iItemHeight, $iWidth, $iHeight, 0x411000)
    GUICtrlSetState(-1, 128) ;$GUI_DISABLE
    GUICtrlSetBkColor(-1, $nColBg)
    $xLast = 0
    For $i = 0 To UBound($aTabText) - 1
    $aCtrl[$i + 1][1] = GUICtrlCreateLabel("", $xPos + $xLast + 6, $yPos + $iItemHeight, $aSize2[$i][0] + 3, 2)
    GUICtrlSetBkColor(-1, $nColSel)
    $xLast += $aSize2[$i][0] + 5
    Next
    Return $aCtrl
    EndFunc ;==>_OwnTabCreate

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTabSwitch(ByRef $aOwnTab, $iIndex)
    If $aOwnTab[0][0] = $iIndex Then Return
    For $s = 1 To UBound($aOwnTab, 1) - 1
    If $iIndex <> $s Then
    GUICtrlSetState($aOwnTab[$s][1], 32) ;$GUI_HIDE
    GUICtrlSetBkColor($aOwnTab[$s][0], $aOwnTab[$s][2])
    GUICtrlSetFont($aOwnTab[$s][0], -1, 400)
    Else
    GUICtrlSetBkColor($aOwnTab[$iIndex][0], $aOwnTab[$s][3])
    GUICtrlSetFont($aOwnTab[$iIndex][0], -1, 1000)
    GUICtrlSetState($aOwnTab[$iIndex][1], 16) ;$GUI_SHOW
    EndIf
    Next
    For $t = $aOwnTab[0][4] To $aOwnTab[UBound($aOwnTab, 1) - 1][4]
    GUICtrlSetState($t, 32) ;$GUI_HIDE
    If $t > $aOwnTab[$iIndex - 1][4] And $t < $aOwnTab[$iIndex][4] Then GUICtrlSetState($t, 16) ;$GUI_SHOW
    Next
    $aOwnTab[0][0] = $iIndex
    EndFunc ;==>_OwnTabSwitch

    [/autoit] [autoit][/autoit] [autoit]

    Func _OwnTabSetCol(ByRef $aOwnTab, $iIndex, $nColNoSel = -1, $nColSel = -1)
    If $nColNoSel = -1 Then
    $aOwnTab[$iIndex][2] = $aOwnTab[0][2]
    Else
    $aOwnTab[$iIndex][2] = $nColNoSel
    EndIf
    If $nColNoSel = -1 Then
    $aOwnTab[$iIndex][3] = $aOwnTab[0][3]
    Else
    $aOwnTab[$iIndex][3] = $nColSel
    EndIf
    If $aOwnTab[0][0] <> $iIndex Then
    GUICtrlSetBkColor($aOwnTab[$iIndex][0], $aOwnTab[$iIndex][2])
    Else
    GUICtrlSetBkColor($aOwnTab[$iIndex][0], $aOwnTab[$iIndex][3])
    EndIf
    GUICtrlSetBkColor($aOwnTab[$iIndex][1], $aOwnTab[$iIndex][3])
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetTextSize($nText, $sFont = 'Microsoft Sans Serif', $iFontSize = 8.5, $iFontAttributes = 0)
    ;Author: Bugfix
    ;Modified: funkey
    If $nText = '' Then Return
    Local $hGui = GUICreate("Textmeter by Bugfix")
    _GDIPlus_Startup()
    Local $hFormat = _GDIPlus_StringFormatCreate(0)
    Local $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    Local $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, $iFontAttributes, 3)
    Local $tLayout = _GDIPlus_RectFCreate(15, 171, 0, 0)
    Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $nText, $hFont, $tLayout, $hFormat)
    Local $iWidth = Ceiling(DllStructGetData($aInfo[0], "Width"))
    Local $iHeight = Ceiling(DllStructGetData($aInfo[0], "Height"))
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    GUIDelete($hGui)
    Local $aSize[2] = [$iWidth, $iHeight]
    Return $aSize
    EndFunc ;==>_GetTextSize

    [/autoit]
  • @funkey:sicher meinte ich die Farben, der Rest ist doch gut!
    Zum neuen Script: Finde ich gut, die Wenn sich im Hintergrund ein Fenster öffnet! Ach ja: kann man das blinken lassen?
    MfG tobi_girst

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)

  • Zitat von funkey

    Das habe ich nicht ganz verstanden.

    Wenn sich im Hintergrund ein Fenster öffnet, fängt es in der Taskleiste an zu blinken, damit man es sieht.
    MfG tobi_girst

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)

  • Damit meinst du WinFlash, oder?

    [autoit]

    WinFlash
    _WinAPI_FlashWindow
    _WinAPI_FlashWindowEx

    [/autoit]

    Welches Fenster sollte sich im Hintergrund öffnen? Sorry aber ich hab's immer noch nicht ganz verstanden!
    Wenn also z.B. ein Alarm eines Registers auftritt und das Fenster mit dem OwnTab im Hintergrund ist, dass dann WinFlash aufgerufen wird?

  • hi funkey

    super udf
    könntest ja noch eine hintergrund funktion für die einzelnen tabs einbauen

    gruß Simon