Что нового

Появление ToolTip (подсказки) в заданых координатах без обновления...

KitRoo_t

Новичок
Сообщения
9
Репутация
0
Кодъ:
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Global $FileOpenDlg1 = "тест", $ToolTip1
Opt("MouseCoordMode", 2)

$Form1 = GUICreate("v.0.1.0", 512, 398)

$Group1 = GUICtrlCreateGroup("Аккаунты", 16, 48, 166, 199)
$Input1 = GUICtrlCreateInput("", 24, 70, 129, 21)
$Button1 = GUICtrlCreateButton("...", 153, 70, 21, 21)

GUISetState(@SW_SHOW)

While 1
   ConsoleWrite($ToolTip1)
   
   $MouseGetPos1 = MouseGetPos();24, 70, 129, 21
   
   If $MouseGetPos1[0] > 24 And $MouseGetPos1[0] < 153 And $MouseGetPos1[1] > 70 And $MouseGetPos1[1] < 91 Then
      If $ToolTip1 = "" Then
         $ToolTip1 = ToolTip($FileOpenDlg1)
      EndIf
   Else
      $ToolTip1 = ToolTip("")
   EndIf
   
   
   Switch GUIGetMsg()
      Case $GUI_EVENT_CLOSE
         Exit
   EndSwitch
WEnd

Подсказка должна появляться только когда мышь находится в координатах клиентской области окна - (квадрат) x24, y70, 153, 91. Т.е. когда курсор на поле ввода.
Если курсор перемещается в этой области, подсказка обновляться не должна, но должна быть видна, и находится в месте где она изначально появилась, - не бегать за курсором. Если курсор вышел из области, подсказка должна пропадать.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
KitRoo_t

ToolTip_UDF
http://www.autoitscript.com/forum/topic/72983-tooltip-udf/#entry532263

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

#include <ToolTip_UDF.au3>


Global $FileOpenDlg1 = "тест", $ToolTip1
Opt("MouseCoordMode", 2)

$Form1 = GUICreate("v.0.1.0", 512, 398)

$Group1 = GUICtrlCreateGroup("Аккаунты", 16, 48, 166, 199)


$Input1 = GUICtrlCreateInput("", 24, 70, 129, 21)
_ToolTip_SetText($Input1, $FileOpenDlg1)
_ToolTip_SetTextColor($Input1, 0x808080)
_ToolTip_SetBkColor($Input1, 0xFFFFFF)
_ToolTip_SetShowTime(3500)


$Button1 = GUICtrlCreateButton("...", 153, 70, 21, 21)

GUISetState(@SW_SHOW)

While 1
	;ConsoleWrite($ToolTip1)

;~    $MouseGetPos1 = MouseGetPos();24, 70, 129, 21

;~    If $MouseGetPos1[0] > 24 And $MouseGetPos1[0] < 153 And $MouseGetPos1[1] > 70 And $MouseGetPos1[1] < 91 Then
;~       If $ToolTip1 = "" Then
;~          $ToolTip1 = ToolTip($FileOpenDlg1)
;~       EndIf
;~    Else
;~       $ToolTip1 = ToolTip("")
;~    EndIf

	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Использование переменной как тригера, и проверка на её использование. Сойдет?
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $triger=False
$Form1 = GUICreate("v.0.1.0", 512, 398)
$Group1 = GUICtrlCreateGroup("Аккаунты", 16, 48, 166, 199)
$Input1 = GUICtrlCreateInput("", 24, 70, 129, 21)
Global $hEdit=GUICtrlGetHandle($Input1)
$Button1 = GUICtrlCreateButton("...", 153, 70, 21, 21)
GUIRegisterMsg($wm_setcursor,"__SetToolTip")
GUISetState(@SW_SHOW)
While 1
   Switch GUIGetMsg()
      Case $GUI_EVENT_CLOSE
         Exit
   EndSwitch
WEnd
Func __SetToolTip($hWin,$Msg,$wPar,$lPar)
    Switch $wPar
        Case $hEdit
            If Not $triger Then
				Sleep(400)
                ToolTip("Тест для ТулТипа на элементе Edit")
                $triger=True
				AdlibRegister("__UnSetToolTip",3500)
            EndIf
        Case Else
            Tooltip("")
            $triger=False
    EndSwitch
EndFunc
Func __UnSetToolTip()
	If $triger Then
		ToolTip("")
	EndIf
	AdlibUnRegister("__UnSetToolTip")
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
MnM,
Код:
;...
        Case Else
			If $fTriger Then
				Tooltip('')
				$fTriger = False
			EndIf
    EndSwitch
;...

А так не проще?
Код:
GUICtrlSetTip($Input1, "Тест для ТулТипа на элементе Input")
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Код:
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>

Global $FileOpenDlg1 = "тест", $ToolTip1, $iX, $iY, $Toggle = True
Opt("MouseCoordMode", 2)

$Form1 = GUICreate("v.0.1.0", 512, 398)

$Group1 = GUICtrlCreateGroup("Аккаунты", 16, 48, 166, 199)
$Input1 = GUICtrlCreateInput("", 24, 70, 129, 21)
$Button1 = GUICtrlCreateButton("...", 153, 70, 21, 21)

GUISetState(@SW_SHOW)

While 1
	$aCursorInfo = GUIGetCursorInfo()

	If $aCursorInfo[4] = $Input1 Then
		If $Toggle Then
			$Toggle = Not $Toggle
			$iX = 24
			$iY = 70 + 21
			_ClientToScreen($Form1, $iX, $iY)
			$ToolTip1 = ToolTip($FileOpenDlg1, $iX, $iY)
		EndIf
	Else
		$Toggle = Not $Toggle
		$ToolTip1 = ToolTip("")
	EndIf

	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _ClientToScreen($hWnd, ByRef $iX, ByRef $iY)
	Local $tPoint = DllStructCreate("int X;int Y")
	DllStructSetData($tPoint, "X", $iX)
	DllStructSetData($tPoint, "Y", $iY)
	_WinAPI_ClientToScreen($hWnd, $tPoint)
	$iX = DllStructGetData($tPoint, "X")
	$iY = DllStructGetData($tPoint, "Y")
EndFunc   ;==>_ClientToScreen



Добавлено:
Сообщение автоматически объединено:

madmasles [?]
На WinXP проблема, что подсказка пропадает если передержать курсор (на v3.2.12.1 работает). И это вероятно не будет исправлено. Было введено для поддержки Win7. Если я правильно понял диалог на офсайте.
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
AZIO
Прикольно использовать постоянные координаты=) но почему то ToolTip не всегда появляется.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
Global $FileOpenDlg1 = "тест", $ToolTip1, $iX, $iY, $Toggle = True
Opt("MouseCoordMode", 2)
$Form1 = GUICreate("v.0.1.0", 512, 398)
$Group1 = GUICtrlCreateGroup("Аккаунты", 16, 48, 166, 199)
$Input1 = GUICtrlCreateInput("", 24, 70, 129, 21)
$hEdit=GUICtrlGetHandle($Input1)
$Button1 = GUICtrlCreateButton("...", 153, 70, 21, 21)
GUIRegisterMsg($wm_setcursor,"__SetTool")
GUISetState(@SW_SHOW)
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
Func __SetTool($hWin,$Msg,$wPar,$lPar)
	if $wPar=$hEdit Then
		if not $Toggle Then
			$Toggle=True
			$iX = 24
			$iY = 70 + 21
			_ClientToScreen($Form1, $iX, $iY)
			ToolTip($FileOpenDlg1,$iX,$iY)
		EndIf
	Else
		$Toggle=False
		ToolTip("")
	EndIf
EndFunc
Func _ClientToScreen($hWnd, ByRef $iX, ByRef $iY)
    Local $tPoint = DllStructCreate("int X;int Y")
    DllStructSetData($tPoint, "X", $iX)
    DllStructSetData($tPoint, "Y", $iY)
    _WinAPI_ClientToScreen($hWnd, $tPoint)
    $iX = DllStructGetData($tPoint, "X")
    $iY = DllStructGetData($tPoint, "Y")
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Вариант
Код:
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>

Global $FileOpenDlg1 = "тест", $ToolTip1 = "подсказка"

$Form1 = GUICreate("v.0.1.0", 512, 398)

$Group1 = GUICtrlCreateGroup("Аккаунты", 16, 48, 166, 199)
$Input1 = GUICtrlCreateInput("", 24, 70, 129, 21)
$Button1 = GUICtrlCreateButton("...", 153, 70, 21, 21)

GUISetState(@SW_SHOW)

While 1
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      Exit
    Case $GUI_EVENT_MOUSEMOVE
      ShowTooltip()
  EndSwitch
WEnd

Func ShowTooltip()
  Local $Pos = _WinAPI_GetMousePos()
  Local $Rect = _WinAPI_GetWindowRect(GUICtrlGetHandle($Input1))
  If _WinAPI_PtInRect($Rect, $Pos) Then
    ToolTip($ToolTip1, DllStructGetData($Rect, "Right"), DllStructGetData($Rect, "Bottom"))
  Else
    ToolTip("")
  EndIf
EndFunc
 
Верх