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

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

Ответить
Настройки темы
[решено] Checkbox и ToolTip

Старожил


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


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

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


Здравствуйте!
Суть вопроса : Есть любое окно GUI и в нём указаны разные Checkbox`сы. Нужно, чтобы при нажатии на Checkbox снизу под Checkbox`ом появлялось окно ToolTip приблизительно такое
Код: Выделить весь код
If Not IsDeclared("sToolTipAnswer") Then Local $sToolTipAnswer
$sToolTipAnswer = ToolTip("tresgfdsgfdsgfdsg",20,10,"643",0,1)
c разным тестом в зависимости от Checkbox`са.
Проблема в том что ToolTip работает по координатам экрана, а Checkbox имеет координаты самого окна GUI т.е. нужно определить координаты расположения самого Checkbox`са на экране и ниже уже вывести ToolTip. Нужно сделать приблизительно похожее на команду GUICtrlSetTip.

Отправлено: 10:58, 18-05-2014

 

Аватара для AZJIO

Старожил


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

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


В справке _WinAPI_ScreenToClient. Там готовый пример. Есть ещё _WinAPI_ClientToScreen.
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:32, 19-05-2014 | #2



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

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


Старожил


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

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


AZJIO, у меня видимо справка старая на русском языке, не могли бы Вы мне ссылочку дать ?

Отправлено: 13:17, 19-05-2014 | #3


Аватара для madmasles

Ветеран


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

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


Цитата -TRM-:
у меня видимо справка старая на русском языке, не могли бы Вы мне ссылочку дать ? »
Развитие русской справки

Можно примерно так сделать.
читать дальше »
Код: Выделить весь код
#include <GUIConstantsEx.au3>

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

$hGui = GUICreate('Test', 200, $a_ChBx[0][0] * 30 + 30)
For $i = 1 To $a_ChBx[0][0]
    $a_ChBx[$i][0] = GUICtrlCreateCheckbox($a_ChBx[$i][0], 20, 20 + ($i - 1) * 30, 100, 20)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
Next
GUISetState()
While 1
    $i_Msg = GUIGetMsg()
    Switch $i_Msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $a_ChBx[1][0]
            ConsoleWrite(_ToolTipControl($a_ChBx[1][0], $a_ChBx[1][1] & $a_Check[GUICtrlSendMsg($a_ChBx[1][0], 0xF0, 0, 0)], 'My Title', 1, 1, 5000) & @LF)
        Case $a_ChBx[2][0] To $a_ChBx[$a_ChBx[0][0]][0]
            For $i = 2 To $a_ChBx[0][0]
                If $i_Msg = $a_ChBx[$i][0] Then
                    ConsoleWrite(_ToolTipControl($a_ChBx[$i][0], $a_ChBx[$i][1] & $a_Check[GUICtrlSendMsg($a_ChBx[$i][0], 0xF0, 0, 0)]) & @LF);$BM_GETCHECK = 0xF0
                    ExitLoop
                EndIf
            Next
    EndSwitch
WEnd
_KillTT()
Exit

Func _ToolTipControl($i_ID, $s_Text, $s_Title = '', $i_Icon = 0, $i_Right = 0, $i_Time = 3000)
    Local $h_ID, $t_Rect, $p_Rect, $a_Res, $i_X, $i_Y, $i_Ret

    $h_ID = GUICtrlGetHandle($i_ID)
    If Not $h_ID Then Return 0
    $t_Rect = DllStructCreate('long[4]')
    $p_Rect = DllStructGetPtr($t_Rect)
    $a_Res = DllCall('user32.dll', 'int', 'GetWindowRect', 'hwnd', $h_ID, 'ptr', $p_Rect);_WinAPI_GetWindowRect()
    If (@error) Or (Not $a_Res[0]) Then Return 0
    If $i_Right Then
        $i_X = DllStructGetData($t_Rect, 1, 3)
    Else
        $i_X = DllStructGetData($t_Rect, 1, 1)
    EndIf
    $i_Y = DllStructGetData($t_Rect, 1, 4)
    $i_Ret = ToolTip($s_Text, $i_X, $i_Y, $s_Title, $i_Icon)
    If $i_Ret Then
        AdlibUnRegister('_KillTT')
        AdlibRegister('_KillTT', $i_Time)
    EndIf
    Return $i_Ret
EndFunc   ;==>_ToolTipControl

Func _KillTT()
    AdlibUnRegister('_KillTT')
    ToolTip('')
EndFunc   ;==>_KillTT

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

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:39, 19-05-2014 | #4


Аватара для 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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
.NET - DataGridView с Checkbox LilLoco Программирование и базы данных 6 15-10-2010 01:21
[решено] Как закрыть ToolTip? Smokie_id11243755 AutoIt 13 06-09-2010 18:39
[решено] ToolTip в правом нижнем углу Smokie_id11243755 AutoIt 6 03-09-2010 19:18
Delphi - checkbox в dbgrid chikara Программирование и базы данных 1 16-08-2010 22:41
Visual Basic + CheckBox Artya Программирование и базы данных 3 26-03-2003 13:23




 
Переход