firex
AutoIT Гуру
- Сообщения
- 943
- Репутация
- 208
Доброго времени суток. Впервые столкнулся с ToolTip - и тут же возникла одна проблема:
Думаю вы поняли что я хочу получить, но дело в том, что пока TrackActivate = False - функция _GUIToolTip_GetBubbleSize всегда возвращает 0, следовательно первое отображение всегда "центрируется" по центру подсказки в нужных мне координатах (а нужно именно по Left-Top).
Предполагаю, что есть более простой и красивый способ, собственно хочу его получить. Заранее спасибо.
P.S. Пример на котором можете проверить свой вариант:
http://azjio.narod.ru/autoit3_docs/libfunctions/_guitooltip_trackposition.htm
Разместите подсказку под кнопкой. Центрирование по Left Top(ToolTip) относительно нижнего угла кнопки.
Код:
$iSendInput_InputTip = _GUIToolTip_Create( $hGui, 0x01 )
_GUIToolTip_AddTool( $iSendInput_InputTip, 0, "", $iMainEdit[5], 0, 0, 0, 0, 8 + $TTM_TRACKPOSITION )
_GUIToolTip_SetMaxTipWidth( $iSendInput_InputTip, 400 )
Код:
Func _WM_COMMAND( $hWnd, $iMsg, $wParam, $lParam )
#forceref $hWnd, $iMsg
Local $iCode, $iIDFrom, $tRect, $iWord, $sTip, $iLeft, $iBottom
; ---
$iCode = _WinAPI_HiWord( $wParam )
$iIDFrom = _WinAPI_LoWord( $wParam )
Switch $hWnd
Case $hGuiMain
If $iIDFrom = $iMainEdit[5] Then
Switch $iCode
Case $EN_CHANGE
If $fSendInput_IsFocused Then
$sTip = __BTIn_GetDvarTip( GUICtrlRead( $iMainEdit[5] ) )
If Not @Error And $sTip <> "" Then
_GUIToolTip_UpdateTipText( $iSendInput_InputTip, 0, $iMainEdit[5], $sTip )
; ---
$tRect = _WinAPI_GetWindowRect( $lParam )
$iLeft = DllStructGetData($tRect, "Left")
$iBottom = DllStructGetData($tRect, "Bottom")
$iWord = _GUIToolTip_GetBubbleSize( $iSendInput_InputTip, 0, $iMainEdit[5] )
$iLeft += _WinAPI_LoWord( $iWord ) / 2
$iBottom += _WinAPI_HiWord( $iWord ) / 2
_GUIToolTip_TrackPosition( $iSendInput_InputTip, $iLeft, $iBottom )
_GUIToolTip_TrackActivate( $iSendInput_InputTip, True, 0, $iMainEdit[5] )
EndIf
EndIf
Case $EN_SETFOCUS
$fSendInput_IsFocused = True
Case $EN_KILLFOCUS
$fSendInput_IsFocused = False
; *
_GUIToolTip_TrackActivate( $iSendInput_InputTip, False, 0, $iMainEdit[5] )
EndSwitch
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Думаю вы поняли что я хочу получить, но дело в том, что пока TrackActivate = False - функция _GUIToolTip_GetBubbleSize всегда возвращает 0, следовательно первое отображение всегда "центрируется" по центру подсказки в нужных мне координатах (а нужно именно по Left-Top).
Предполагаю, что есть более простой и красивый способ, собственно хочу его получить. Заранее спасибо.
P.S. Пример на котором можете проверить свой вариант:
http://azjio.narod.ru/autoit3_docs/libfunctions/_guitooltip_trackposition.htm
Разместите подсказку под кнопкой. Центрирование по Left Top(ToolTip) относительно нижнего угла кнопки.