Имя пользователя:
Пароль:
 

Название темы: [решено] Checkbox и ToolTip
Показать сообщение отдельно

Аватара для madmasles

Ветеран


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

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


-TRM-,
Или так сделать, чтобы ToolTip перемещался вместе с окном.
читать дальше »
Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Global $hGui, $iMsg, $iDummy, $a_ChBx[6][2] = [[5],['Первый', 'Первая подсказка'],['Второй', 'Вторая подсказка'],['Третий', 'Третья подсказка'], _
        ['Четвертый', 'Четвертая подсказка'],['Пятый', 'Пятая подсказка']], $a_Check[2] = [@LF & '(Не отмечен)', @LF & '(Отмечен)'], $aTT

$hGui = GUICreate('Test', 200, $a_ChBx[0][0] * 30 + 30, -1, -1, $WS_OVERLAPPEDWINDOW)
For $i = 1 To $a_ChBx[0][0]
    $a_ChBx[$i][0] = GUICtrlCreateCheckbox($a_ChBx[$i][0], 50, 20 + ($i - 1) * 30, 100, 20)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
Next
$iDummy = GUICtrlCreateDummy()
GUISetState()
While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $iDummy
            __TT_MoveControl($aTT)
        Case $a_ChBx[1][0]
            $aTT = _Create_ToolTip_Control($a_ChBx[1][0], $a_ChBx[1][1] & $a_Check[GUICtrlSendMsg($a_ChBx[1][0], 0xF0, 0, 0)], 'My Title', 1, 1, 50000);$BM_GETCHECK = 0xF0
            ConsoleWrite('_Create_ToolTip_Control error: ' & @error & @LF)
        Case $a_ChBx[2][0] To $a_ChBx[$a_ChBx[0][0]][0]
            For $i = 2 To $a_ChBx[0][0]
                If $iMsg = $a_ChBx[$i][0] Then
                    $aTT = _Create_ToolTip_Control($a_ChBx[$i][0], $a_ChBx[$i][1] & $a_Check[GUICtrlSendMsg($a_ChBx[$i][0], 0xF0, 0, 0)]);$BM_GETCHECK = 0xF0
                    ConsoleWrite('_Create_ToolTip_Control error: ' & @error & @LF)
                    ExitLoop
                EndIf
            Next
    EndSwitch
WEnd
_KillTT()
GUIDelete($hGui)
Exit

Func _Create_ToolTip_Control($i_ID, $s_Text, $s_Title = '', $i_Icon = 0, $i_Right = 0, $i_Time = 10000)
    Local $h_ID, $ai_XY, $h_TT, $a_Ret[3], $i_Opt

    $h_ID = GUICtrlGetHandle($i_ID)
    If Not $h_ID Then Return SetError(1, 0, 0)
    $ai_XY = _WinAPI_GetWindowXY_Ex($h_ID, $i_Right)
    If @error Then Return SetError(2, 0, 0)
    If ToolTip($s_Text, $ai_XY[0], $ai_XY[1], $s_Title, $i_Icon) Then
        $i_Opt = Opt('WinTitleMatchMode', 1)
        $h_TT = WinGetHandle('[Class:tooltips_class32;Title:' & StringLeft($s_Text, 24) & ']')
        Opt('WinTitleMatchMode', $i_Opt)
        If $h_TT Then
            $a_Ret[0] = $h_ID
            $a_Ret[1] = $h_TT
            $a_Ret[2] = $i_Right
            GUIRegisterMsg($WM_WINDOWPOSCHANGED, '_WM_WINDOWPOSCHANGED')
            GUIRegisterMsg($WM_SIZE, '_WM_SIZE')
        EndIf
        AdlibUnRegister('_KillTT')
        AdlibRegister('_KillTT', $i_Time)
        Return $a_Ret
    EndIf
    Return SetError(3, 0, 0)
EndFunc   ;==>_Create_ToolTip_Control

Func _KillTT()
    If Not IsArray($aTT) Then Return
    GUIRegisterMsg($WM_WINDOWPOSCHANGED, '')
    GUIRegisterMsg($WM_SIZE, '')
    $aTT = 0
    AdlibUnRegister('_KillTT')
    ToolTip('')
EndFunc   ;==>_KillTT

Func _WM_WINDOWPOSCHANGED($h_Wnd, $iMsg, $i_wParam, $i_lParam)
    Switch $h_Wnd
        Case $hGui
            __TT_MoveControl($aTT)
            GUICtrlSendToDummy($iDummy)
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_WINDOWPOSCHANGED

Func _WM_SIZE($h_Wnd, $iMsg, $i_wParam, $i_lParam)
    Switch $h_Wnd
        Case $hGui
            Switch $i_wParam
                Case 1, 2
                    GUICtrlSendToDummy($iDummy)
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_SIZE

Func __TT_MoveControl($a_TT)
    If Not IsArray($a_TT) Then Return 0
    If Not $a_TT[1] Then Return 0

    Local $ai_XY

    $ai_XY = _WinAPI_GetWindowXY_Ex($a_TT[0], $a_TT[2])
    If @error Then Return SetError(1, 0, 0)
    Return WinMove($a_TT[1], '', $ai_XY[0], $ai_XY[1])
EndFunc   ;==>__TT_MoveControl

Func _WinAPI_GetWindowXY_Ex($h_Wnd, $i_Right = 0)
    Local $t_Rect, $p_Rect, $a_Res, $ai_XY[2]

    If Not IsHWnd($h_Wnd) Then Return SetError(1, 0, 0)
    $t_Rect = DllStructCreate('long[4]')
    $p_Rect = DllStructGetPtr($t_Rect)
    $a_Res = DllCall('user32.dll', 'int', 'GetWindowRect', 'hwnd', $h_Wnd, 'ptr', $p_Rect)
    If (@error) Or (Not $a_Res[0]) Then Return SetError(2, 0, 0)
    If $i_Right Then
        $ai_XY[0] = DllStructGetData($t_Rect, 1, 3)
    Else
        $ai_XY[0] = DllStructGetData($t_Rect, 1, 1)
    EndIf
    $ai_XY[1] = DllStructGetData($t_Rect, 1, 4)
    Return $ai_XY
EndFunc   ;==>_WinAPI_GetWindowXY_Ex

Последний раз редактировалось madmasles, 20-05-2014 в 19:24.


Отправлено: 15:48, 19-05-2014 | #5

Название темы: [решено] Checkbox и ToolTip