Тултип - всплывающая подсказка, показывается при задержке указателя мыши над конкретной областью, обычно элементом управления.
Область контроля - прямоугольник с заданными координатами
Текст тултипа может быть многострочным, с разделителем код 13 (\r), произвольным размером шрифта.
В первой версии тултип выводится ниже курсора мыши и вправо. Учитывайте при планировании интерфейса.
Используется динамическая память, соответственно библиотека должны быть загружена с функциями
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
и куча должна быть инициализирована вызовом SysFn 68.11
Все функции используют x86-32 calling convention, stdcall.
Это означает, что регистры EAX, ECX, EDX могут не сохранять свои значения после вызова функций.
Примеры вызовов смотрите в программе - примере.
Параметр - указатель на первый в цепочке тултип.
Возврат EAX==1 при успешном выделениии памяти, 0 при сбое.
Вызывается один раз, инициализирует все тултипы, выделяя память и рассчитывая внутренние переменные.
Параметр - указатель на первый в цепочке тултип.
Возврат - нет.
Освобождает выделенную память.
Параметр - указатель на первый в цепочке тултип.
Возврат - нет.
Показ нужного из всей цепочки тултипов при бездействии. Должна вызываться при бездействии или периодически для проверки таймера. Например при опросе событий функцией SysFn 23 (event 0).
Параметр - указатель на первый в цепочке тултип.
Возврат - нет.
Эта функция должна вызываться при событии мыши. Стирает тултип при выходе мыши из зоны контроля
Параметр - цвет текста с размером шрифта, в формате функции SysFn 4.
Возврат - EAX = width shl 16 + height.
Декодирует из комбинированного цвета/размера ширину и высоту шрифта в пикселях
Макрос для создания структуры тултипа ниже, включен в box_lib.mac. Не забываем объединить тултипы в список.
struc tooltip txt, next, zone_x, zone_w, zone_y, zone_h, col_txt, col_bkg, tm_wait
{
.txt dd txt ; указатель на текст asciiz, разделитель \r 13
.next dd next ; следующиий tooltip в цепочке или 0
.zone_y dw zone_y ; зона контроля (в 90% случаев совпадает с размером контрола)
.zone_x dw zone_x ;
.zone_h dw zone_h ;
.zone_w dw zone_w ;
.col_txt dd col_txt ; цвет текста тултипа, включая размер SysFn4
.col_bkg dd col_bkg ; цвет фона тултипа
.tm_wait dw tm_wait ; время ожидания х10мс
;временные переменные
.font_sz dd ? ; font size
.mouse dd ? ; предыдущее положение (x, y)
.tm_strt dd ? ; время запуска таймера (входа мыши в зону) х10мс
.video dd ? ; память для сохраненного под тултипом
.video_y dw ? ; координаты запомненной области экрана, или 0 если пусто
.video_x dw ?
.video_h dw ? ; размер предрасчитывается при init
.video_w dw ?
}
Исходный код находится в библиотеке box_lib, файл tooltip.asm
Пример использования находится в box_lib\asm\trunk\tooltip_demo.asm