1 (изменено: minesemka, 2017-01-16 00:56:10)

Тема: АНК: Автоматический ToolBox

Здравствуйте, не могли бы вы мне подсказать как сделать автоматический ToolBox.

Пример:
Я навожу на определённый элемент управления (ComboBox) и через 1 секунду у меня появляется "Подсказка" для чего этот Бокс нужен и что туда писать, но когда я убираю мышку с элемента управления "Подсказка" исчезает.

Подскажите как это всё реализовать! (Лучше готовый код/пример).

Заранее спасибо!

2

Re: АНК: Автоматический ToolBox

Это принято называть "всплывающая подсказка" (ToolTip). Реализуется так: командой MouseGetPos периодически проверяется элемент управления под курсором. Потом сопоставляется этот ЭУ по ClassNN или другому признаку с массивом, в котором содержится перечень всех нужных ЭУ и соответствующие подсказки. Далее выводится подсказка командой "ToolTip". Этой же командой можно убрать подсказку, когда под курсором нет ЭУ.

3 (изменено: stealzy, 2017-01-16 03:51:03)

Re: АНК: Автоматический ToolBox

Можно и без таймера:

Gui Add, text, HwndMyTextHwnd, Move the mouse cursor here
Gui Show,, Test
HowerFn := Func("Hower").bind(MyTextHwnd)
OnMessage(WM_MOUSEMOVE := 0x200, HowerFn)
Return

Hower(MyControlHwnd, timer := false) {
	MouseGetPos,,,, ControlHwnd, 2
	if (ControlHwnd = MyControlHwnd) {
		if !timer {
			ToolTip Ok
			HowerTimerFn := Func("Hower").bind(MyControlHwnd, true)
			SetTimer % HowerTimerFn, -100
		}
	} else
		ToolTip
}

Реальный пример смотрите в скрипте VirusTotal HashChecker. Запустите и поводите курсором.
Строки 93,94 и 169-219.

4

Re: АНК: Автоматический ToolBox

stealzy пишет:

Можно и без таймера:

stealzy пишет:
SetTimer Hide, -100

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: stealzy, 2017-01-16 04:01:20)

Re: АНК: Автоматический ToolBox

Я говорил, что можно, я не сказал что так сделал, однако ;-).
Ну для тебя, так уж и быть:

Gui Add, text, HwndMyTextHwnd, Move the mouse cursor here
Gui Show,, Test
HowerFn := Func("Hower").bind(MyTextHwnd)
OnMessage(WM_MOUSEMOVE := 0x200, HowerFn)
Return

Hower(MyControlHwnd) {
	MouseGetPos,,,, ControlHwnd, 2
	ToolTip % (ControlHwnd = MyControlHwnd) ? "Ok" : ""
}

В этом случае, если контрол близко к границе окна и курсор резко смещается за границу, окно не получит WM сообщение и тултип останется. Таймер вставлен для подстраховки.
К тому же, таймер, который крутится только при движении мышки над окном, выглядит лучше, чем постоянно крутящийся.

6

Re: АНК: Автоматический ToolBox

Так не получится. Если резко убрать курсор с окна, ToolTip останется висеть. И если уж приводить пример, то

minesemka пишет:

Я навожу на определённый элемент управления (ComboBox)

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7 (изменено: stealzy, 2017-01-16 07:05:25)

Re: АНК: Автоматический ToolBox

Да, я как раз упомянул это в комментарии выше, когда ты писал ответ.
Если резко не дергать мышь, вполне вариант.

Gui Add, text, HwndCntrl1Hwnd, Move the mouse cursor here
Gui Add, text, HwndCntrl2Hwnd, Do not move cursor here!
Gui Show
; Magic ↓
Array := Object(Cntrl1Hwnd, "You did it!", Cntrl2Hwnd, "You don``t have to do that.")
HowerFn := Func("Hower").bind(Array)
OnMessage(WM_MOUSEMOVE := 0x200, HowerFn)
Return

Hower(ControlsHowerArr, timer := false) {
	MouseGetPos,,,, CurrentControlHwnd, 2
	ToolTip % ControlsHowerArr[CurrentControlHwnd] ? ControlsHowerArr[CurrentControlHwnd] : ""
}

8

Re: АНК: Автоматический ToolBox

stealzy, ваш скрипт у меня глючит - тултип постоянно мигает.
minesemka, пользуйтесь поиском:
http://forum.script-coding.com/viewtopi … 358#p77358