Sign in to follow this  
Followers 0
Mun

Owntab UDF Support Request.

2 posts in this topic

I appologized for posting in wrong thread.

I was able to modified the UDF into vertical tabs but it completely broke the hide/show.

Can anyone lend a hand with the hide/show section of the UDF?

Hiding 1 a time sometime work but when I hides more than 1 tab - It's borked.

Semi Working Vertical - (Hide/Show doesn't work)

#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
#include <GuiScrollBars.au3>
#include <ScrollBarConstants.au3>
#include <OwnTab_Mod.au3>
#include <ComboConstants.au3>
#include <Constants.au3>
#include <GuiComboBox.au3>

Local $hGui = GUICreate("(Draft Vertical)", 500, 500)
GUISetBkColor(0xFFFFFF)

$OwnTab_Style = 0 ;random style (only 2 styles available!!)
$Total = 7
Local $aTabText[$Total] = ["1. Test", "2. Test", "3. Test", "4. Test", "5. Test", "6. Test", "7. Test"] ;Declare the regions for the OwnTab-control
;~ Local $aTabIcons[$Total][2] = [[""],[""],[""],[""],[""],[""],[""]]
Global $aCtrlTab = _OwnTab_Create($hGui, $aTabText, 10, 70, 300, 380, 25, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF)

Local $aTabTip[$Total] = ["1. Test", "2. Test", "3. Test", "4. Test", "5. Test", "6. Test", "7. Test"]
_OwnTab_SetTip($aCtrlTab, $aTabTip) ;set the tooltips for the OwnTab-control

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

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

#Region Tab3
_OwnTab_Add($aCtrlTab) ;Start controls tab3
Global $Edit3 = GUICtrlCreatePic(@DocumentsCommonDir & '\Eigene Bilder\Beispielbilder\Winter.jpg', 20, 55, 460, 280)
#EndRegion Tab3

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

#Region Tab5
_OwnTab_Add($aCtrlTab) ;Start controls tab5

Global $Button4 = GUICtrlCreateButton("Acknowledge the alarm", 200, 120, 300, 20)
Global $Button5 = GUICtrlCreateButton("Enable tab 3", 200, 150, 300, 20)
Global $Button6 = GUICtrlCreateButton("Disable tab 3", 200, 180, 300, 20)
Global $Button7 = GUICtrlCreateButton("Hide tab 2", 200, 240, 300, 20)
Global $Button8 = GUICtrlCreateButton("Show tab 2", 200, 210, 300, 20)

#EndRegion Tab5

#Region Tab6
_OwnTab_Add($aCtrlTab) ;Start controls tab6

#EndRegion Tab6

#Region Tab7
_OwnTab_Add($aCtrlTab) ;Start controls tab7

#EndRegion Tab7

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

;~ _OwnTab_Disable($aCtrlTab, 5) ;new: disable tabitems

;~ For $i = 2 To 3
;~ _OwnTab_Hide($aCtrlTab, $i)
;~ Next
_OwnTab_Switch($aCtrlTab, 3)

_OwnTab_SetFontCol($aCtrlTab, 0x000000) ;new: set font-color

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

;~ _GUIScrollBars_Init($hGUI, -1, -1)
Local $msg

While 1
$msg = GUIGetMsg()
For $a = 0 To UBound($aCtrlTab, 1) - 1
If $msg = $aCtrlTab[$a][0] Then
_OwnTab_Switch($aCtrlTab, $a)
EndIf
Next

Switch $msg
Case $Button1
_OwnTab_Enable($aCtrlTab, 3)
Case $Button4
_OwnTab_ResetAlarm($aCtrlTab, 4)

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 -3
Exit
EndSwitch
Sleep(10)
WEnd

Modified OwnTab UDF

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

#cs
Copyrights to funkey from Autoit.de
#ce

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 !

_GDIPlus_Startup()
OnAutoItExitRegister ( "_OwnTab_OnExit" )

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, $iItemWidth = 150
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] = $iItemWidth; $aSize[0] + 5 + $iOffset ;labelwidth
$aCtrl[$i + 1][0] = GUICtrlCreateLabel($aTabText[$i], $xPos, $yPos + $xLast, $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, $yPos + $xLast, $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 += $iItemHeight
Next
GUICtrlCreateLabel("", $xPos + $iItemWidth - 1, $yPos, $iWidth, $iHeight, 0x411000, $OwnTab_Style);("", $xPos, $yPos + $iItemHeight, $iWidth, $iHeight, 0x411000, $OwnTab_Style)
GUICtrlSetState(-1, $GUI_DISABLE) ;$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 + $iItemWidth - 2, $yPos + $xLast + 2, 4+2*$OwnTab_Style, $iItemHeight - 4) ;GUICtrlCreateLabel("", $xPos + $xLast + 6, $yPos + $iItemHeight - $OwnTab_Style, $aSize2[$i][0] + 3 + $iOffset, 2+2*$OwnTab_Style)
GUICtrlSetBkColor(-1, $nColSel)
$xLast += $aSize2[$i][1] + 10 + $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

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

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

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

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

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

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

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

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

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

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

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

#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

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

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]), $GUI_HIDE) Then Return
GUICtrlSetState($aOwnTab[$iIndex][0], $GUI_HIDE)
GUICtrlSetState($aOwnTab[$iIndex][1], $GUI_HIDE)
GUICtrlSetState($aOwnTab[$iIndex][6], $GUI_HIDE)

Local $Offset = 50 - 4
For $o = 0 To $iIndex - 1
$Offset += $aOwnTab[0][1]
Next
;~ _ArrayDisplay($aOwnTab)
For $o = $iIndex + 1 To UBound($aOwnTab, 1) - 1
GUICtrlSetPos($aOwnTab[$o][0], 10, $Offset - 1)
GUICtrlSetPos($aOwnTab[$o][1], $aOwnTab[1][9] + 7, $Offset)
GUICtrlSetPos($aOwnTab[$o][6], 10, $Offset)
$Offset += $aOwnTab[0][1]
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

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

GUICtrlSetState($aOwnTab[$iIndex][0], $GUI_SHOW) ;$GUI_SHOW
GUICtrlSetState($aOwnTab[$iIndex][1], $GUI_SHOW) ;$GUI_SHOW
GUICtrlSetState($aOwnTab[$iIndex][6], $GUI_SHOW) ;$GUI_SHOW
Local $Offset = 0
For $o = 0 To UBound($aOwnTab, 1) - 2
$Offset += 25
Next

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

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

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

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

;~ 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

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

Func _GetTextSize($nText, $sFont = 'Microsoft Sans Serif', $iFontSize = 8.5, $iFontAttributes = 0)
If $nText = '' Then Return
Local $hGui = GUICreate("Nothing")
;~ _GDIPlus_Startup()
Local $hFormat = _GDIPlus_StringFormatCreate(0)
Local $hFamily = _GDIPlus_FontFamilyCreate($sFont)
Local $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, $iFontAttributes, 3)
Local $tLayout = _GDIPlus_RectFCreate(0, 0, 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

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

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

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

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

#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.
;====================================================================================================================================


;===============================================================================
; 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


;===============================================================================
; 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

Func _SetBkIcon($ControlID, $iBackground, $sIcon, $iIndex, $iWidth, $iHeight)
;Yashied
;http://www.autoitscript.com/forum/index.php?showtopic=92207&view=findpost&p=662886
Const $STM_SETIMAGE = 0x0172

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

$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

$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)

;~ _GDIPlus_Startup()

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

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

;~ _GDIPlus_Shutdown()

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

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

Share this post


Link to post
Share on other sites



It is years ago I did something with my OwnTab-UDF. I hope I will get time to have a look at this.


Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs, and the Universe
trying to produce bigger and better idiots.
So far, the Universe is winning.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0