Что нового

[Элементы GUI, ToolTip] Динамический расчет координат для отображения подсказки

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Доброго времени суток. Впервые столкнулся с 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) относительно нижнего угла кнопки.
 
Автор
firex

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Все еще актуально
Неужели я задаю такие сложные вопросы что опять нет предложений? :smile:
 
Автор
firex

firex

AutoIT Гуру
Сообщения
943
Репутация
208
inververs
В общем - в зависимости от введенного текста в Input выводится подсказка с динамическим содержимым, обновление происходит после каждого нового введенного символа. При потере фокуса input'ом - подсказка скрывается, при получении фокуса и любом обновлении и подсказке не равной "" - смена текста в подсказке на новый и ее отображение, при обновлении данных - обновление подсказки(или ее скрытие если подсказка не получена с текущего текста).

Все это я сделал, дело в том, что я частично не могу отображать подсказку в строгих координатах (левый верхний угол подсказки всегда должен находится в одном месте).

Должно быть всегда так:
74wX4.png
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
firex
вот, так лучше намного :smile:. Но я незнаю, никогда с ToolTip не работал.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
firex
А чем вас не устраивает встроенный
Код:
ToolTip()
 
Автор
firex

firex

AutoIT Гуру
Сообщения
943
Репутация
208
InnI
Если честно, то что-то я упустил из вида эту функцию, спасибо. :smile:
 
Верх