dll-ка рисующая текст подготовленым шрифтом сразу в спрайт
для vb6 один модуль modSR2DPrint и 2 класса SR2D_Font0 и SR2D_Font1
SR2D_Font1 содержит один шрифт с одним размером (набор рисунков символов)
SR2D_Font0 содержит коллекцию SR2D_Font1 с возможностью выбора по заданному FontSize подходящего SR2D_Font1 и также возможность сохранять коллекцию в файл и читать
modSR2DPrint содержит Type ... End Type и подпрограмму вывода текста и подпрограммы настройки способа вывода (цвета, прозрачность, рамку, заливку, наличие или отсутствие ограниченного окна внутри спрайта, центровки по вертикали и горизонтали и т.д.
первая форма

первая форма с прозрачным ClearBuffer_Alpha на заданную область

и вторая форма Form2 для испытаний и настройки текста

текст можно двигать мышкой левой кнопкой
[file=134329]
убрал мерцание при поднятии вверх и растяжение закраски фона под символом (режим: общий фон не красится(FonClearBox=0), но фон под каждым символом персонально красится (FonClearSim=1))
[file=134356]
[file=134358]
Кажется, баг: бордер обрезает символы, но не фоновую заливку.
проверил в 2.4 ничего нету - возможно убрал - много сегодня дорабатывал границы выше написано про растяжение фона от символа
а по клику правой кнопкой сделал имитацию нажатия кнопки (вкл режим кнопки и отмено фонового рисунка)
а баги с фоном и мерцанием на границе ранее не замечал так как не было нормальной тестилки а целью было доработать и совместить свойства
11-09-2018 проверил варианты ещё раз (запускал проект из редактора а не .EXE файл) не одного визуального бага не заметил - откомпилирую и выложу
[file=134384]
упс заметил - щас поправлю
[file=134387]
остался мелкий баг при центровке по центру вертикально если плавно сужать границы верхняя строка исчезает на 3 пикселя раньше чем можно было бы
14-09-2018 справку с примерами на выходных только смогу
17-09-2018 а вот и выходной
вот пока неполная справка (прокоментировал что успел в проге и скопировал в текст файл)
HELP справка по Print2D
и прога с этими коментариями [file=134470]
Включение-выключение Border сдвигают строки вправо-вниз на пиксель, но не всегда и не все строки. С фоновой заливкой теперь всё нормально.
да вкл бордера сдвигают текст на 1 пиксель так как бордер рисуется в границах окна и ранее там где был бордер было место для символов но с появлением рамки текст ограничивается на 1 пиксель со всех сторон чтобы не затереть бордер и ограничение текста слева и сверху на пиксель по сути сдвигают начало рисования на пиксель которы теперь занят бордеромм (толщина бордера 1 пиксель)
и ещё дополнительно при включении опции Bordert3dDown текст сдвигается дополнительно на 1 пиксель вправо и вниз - это сделано для визуального эфекта нажатия кнопки так как при внешнем виде вдавливания поверхности текст не вдавливается и возникает эфект что текст всплыл чуть верх что полностью уничтожает визуальный эффект вдавливания кнопки
для справки если ColorBord1=белый и ColorBord2=чёрный то на сером фоне при Bordert=1 и Bordert3d=1 Bordert3dDown=0 возникает вид стандартной кнопки и если Bordert3dDown переключить из 0 в 1 (что меняет цвета местами) вид кнопки становится "нажатым"
Neirapik
> да вкл бордера сдвигают текст на 1 пиксель так как бордер рисуется в границах окна
Это понятно, но я писал: "но не всегда и не все строки". Я включаю-выключаю бордюр - некоторые строки не сдвигаются вправо, только вниз. Меняю содержимое строк - меняется поведение, но закономерности я не нашёл.
но тут может быть просто - если центровка включена по центру то текст не сдвигается - уменьшается свободное пространство вокруг строки (или срезается часть строки) а сама строка остаётся по центру
соответственно для горизонтальной и вертикальной центровки если горизонтальная по центру а вертикальная по верху или никак то вертикальный старт строки смещается а горизонтальный нет и т.д. и т.п. - коротко говоря привязка положения строки (строк) может быть к краям, а может быть и к центру - смотря что выбрано
и да расчёт центра идёт по целочисленному и округление при делении может давать погрешность в один пиксель для строк разной длины при изменении свободного места - попробую вещественные числа
хотя мне кажется полностью избежать взаимный сдвиг строк на 1 пиксель туда сюда вокруг оптимального положения при изменении размера по горизонтали никак не избежать ведь положение на экране идёт в реально существующих и неделимых пикселях что всё равно требует округления которое при разнице в 0.1 пикселя может дать целый пиксель (выбирать то приходиться между пикселями а не их частями)
и кстати такой же эффект однопиксельного блуждания строк относительного друг друга можно увидеть при плавном изменении горизонтального размера окна текста.
- и повторюсь: размер окна можно плавно менять стрелками на клавиатуре попиксельно поставив курсор в числовой текст размера окна (в левом верхнем углу Form2 два белых текстовых окошка друг за другом)

пардон был неправ - сделал расчёт на числах с запятой вместо целочисленных с округлением результата к ближайшему целому - и хм - блуждания исчезли (мдааа старею)
[file=134487]
также перевёл на вещественные числа и расчёт положения по вертикали
[file=134488]
проявился баг растяжки фона при плавном опускании окна за низ спрайта (из за особености SetLockRect (которую раньше не замечал) в нём нижняя и правая граница пропускает пиксели а верхняя и левая нет то есть верх и лево по принципу ">", а низ и право "=>")
[file=134511]
извиняюсь что долго отсутствую - смена вертикали власти на работе и нет слов пока для форума (одни лишь выражения не имеющие отношение к этой теме)
упс! на днях заметил что при выводе текста и фона не учитывается исходный SetLockRect в спрайте и поправил этот досадный момент. Позже выложу исправленный исходник
P.S. заметил когда применил эту текстовыводилку в самодельном компоненте типа List - таблица и увидел как крайние блоки текста вылазиют за пределы окна компонента
P.P.S. ну и наверно уберу все лишние публичные параметры и процедуры кроме самых нужных в компоненте (наверно, даже может быть скоро !?! )
Тема в архиве.