Тултип - всплывающая подсказка, показывается при задержке указателя мыши над конкретной областью, обычно элементом управления.
Область контроля - прямоугольник с заданными координатами
Текст тултипа может быть многострочным, с разделителем код 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