forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_font32: Графические шрифты (http://forum.boolean.name/showthread.php?t=6103)

odd 12.07.2008 04:08

Lib_font32: Графические шрифты
 
Вложений: 3
Поседнее обновление 02.10.2009
Начал ваять библиотеку с поддержкой графических шрифтов.
Пока функции такие:

Init(k: integer) - Начальная инициализация библиотеки.
k - количество шрифтов, которое мы собираемся использовать
Font(i: integer) - Выбрать текущий шрифт.
i - номер шрифта, может быть от 0 до k-1 (см. init)
LoadFont(fname: string) - Загрузить шрифт. Номер шрифта должен был быть задан заранее процедурой Font().
fname - название шрифта
DrawString(s: string; x: integer; y: integer) - Вывод одной строки текста на экран (без переносов)
s - текст выводимой строки
x, y - координаты, куда нужно выводить строку
TextWindow(x: integer; y: integer; w: integer; h: integer) - Задать окно, в которое будет выводиться строка
x, y - координаты верхнего левого угла окна
w, h - ширина и высота окна
integer TextHeight - Возвращает высоту текущего шрифта в пикселах
integer TextWidth(s: string) - Возвращает длину текста s в пикселах.
Это нужно, например, для того, чтобы прикинуть влезет ли данная строка на экран?

Щас работаю над процедурой вывода текста в окошко с возможностью скролинга. Скоро будет.
Сами шрифты можно создавать с помощью программы GenFont.exe, которая уже ранее выкладывалась на данном форуме. Соответственно в проект нужно будет добавлять для каждого шрифта 2 файлика: png и dat.
При желании, можно делать полупрозрачность и менять цвет шрифта с помощью библиотеки Lib_alpha.

По глобальным замыслам, это будет первая библиотека в череде библиотек реализации собственного GUI интерфейса. Позже будут библиотеки для меню и окон.

PS: Всё таки иногда полезно подождать каменный цветок.

InkutaY 12.07.2008 14:54

Ответ: Lib_font32: Графические шрифты
 
Прикольно!
а можно суда еще и цвет шрифта добавить ?
DrawString(s: string; x: integer; y: integer, color: integer)

odd 13.07.2008 03:20

Ответ: Lib_font32: Графические шрифты
 
Добавил функции модификации шрифта, вывода длинного текста в окно и скролинга.
Теперь можно поспорить какая либа круче Lib_text aka MultiLine или моя. :-D
Новый список функций:

PHP код:

Init(kinteger) - Начальная инициализация библиотеки.
    
количество шрифтовкоторое мы собираемся использовать
    
Font
(iinteger) - Выбрать текущий шрифт.
    
номер шрифтаможет быть от 0 до k-(смinit)
    
LoadFont(fnamestring) - Загрузить шрифтНомер шрифта должен был быть задан заранее процедурой Font().
    
fname название шрифта
    
DrawString
(sstringxintegeryinteger) - Вывод одной строки текста на экран (без переносов)
    
текст выводимой строки
    x
координатыкуда нужно выводить строку
    
TextWindow
(xintegeryintegerwintegerhinteger) - Задать окнов которое будет выводиться строка
    x
координаты верхнего левого угла окна
    w
ширина и высота окна

integer TextHeight 
Возвращает высоту текущего шрифта в пикселах

integer TextWidth
(sstring) - Возвращает длину текста s в пикселах.
    
Это нужнонапримердля тогочтобы прикинуть влезет ли данная строка на экран.

Modify(imimage) - Модифицировать текущий шрифтПрименяется для изменения цвета/прозрачности
    шрифта
например с помощью библиотеки Lib_alpha.
    
integer Format(sstring) - Разбить длинный текст на мелкие строчки такчтобы он помещался в
    окно
заданное процедурой TextWindowФункция возвращает расчётну высоту полученного разбитого текста
    в пикселах
.
    
DrawTextWindow Нарисовать ранее разбитый функцией Format текст в окне
    Окно должно было быть заданно функцией TextWindow до форматирования
.

integer MoveUp(pxinteger) - Перемотать текст в окне на px пикселов вверх
    Функция возвращает 1 если нужна перерисовка экрана 
(т.етекст был сдвинутили 0 если перерисовка не нужна
    
integer MoveDown
(pxinteger) - Перемотать текст в окне на px пикселов вниз
    Функция возвращает 1 если нужна перерисовка экрана 
(т.етекст был сдвинутили 0 если перерисовка не нужна 

Думаю прикрутить ещё и выравнивание текста влево и по центру. Ну, это уже элементарно. Скоро будет.

Romanzes 13.07.2008 15:33

Ответ: Lib_font32: Графические шрифты
 
У меня функция Format вешает телефон, если в строке есть буква "я". Вот, например:
Код:

Program Font32test;
Uses        font32;

var
  scrW,scrH,h,k: integer;

Begin
  scrW:=GetWidth;
  scrH:=GetHeight;
  font32.init(1); // Инициализация (всего у нас будет 1 шрифт)
  font32.Font(0); // Выбираем шрифт номер 0
  LoadFont('Verdana_7'); // Загружаем шрифт
  font32.TextWindow(50,50,50,50);
  h:=font32.Format('Раз Два Три Четыре Пять Шесть Семь Восемь Девять Десять'); //Здесь ошибка
  while true do
  begin
    SetColor(255,255,255);
    FillRect(0,0,scrW,scrH);
    SetColor(255,0,0);
    DrawRect(49,49,52,52);
    k:=KeyToAction(GetKeyPressed);
    if k=GA_UP then h:=MoveUp(3);
    if k=GA_DOWN then h:=MoveDown(3);
    DrawTextWindow;
    Repaint;
  end;
End.

Если убрать буквы "я", то пример будет работать. Можно, конечно, писать "йа", но неудобно

odd 14.07.2008 08:16

Ответ: Lib_font32: Графические шрифты
 
Прошу прощения, маленькая опечаточка в программе. Пофиксено.
Щас работаю над добавлением функций регулировки межстрочного и межбуквенного расстояния, выравнивания. Скоро будет.
PS: Исправь у себя в программе строку:
Repaint; на if h<>0 then Repaint; :)

odd 15.07.2008 08:07

Ответ: Lib_font32: Графические шрифты
 
Всё. Работы закончены. Добавил выравнивание, регулировку межстрочного и мужбуквенного расстояний. Всё, что я хотел добавить и сделать сделано. Библиотеку можно добавлять в коллекции. Обязательно почитайте документацию к библиотеке и посмотрите демку. Там я показал некоторые интересные возможности (компилировать только в английской версии MP).

Phantom 21.07.2008 21:29

Ответ: Lib_font32: Графические шрифты
 
А почему компилировать только в английской версии? У меня до этого три разных паскаля стояло, недавно оставил один - с твоего сайта... О_о Теперь нету английского у меня... :'(
- - -
Добавил позже:
Пробовал русской версей компилировать, всё скомпилировалось, но в архив jar не добавились либы АЛЬФА и ФОНТ32. После того, как их руками туда засунул, всё заработало.
- - -
Слушай, я примерно то же самое, что и ты хотел сделать, но мозга мне не хватает. Поэтому, у меня предложение, не мог бы ты сделать что-нибудь подобное, как в моей либе для стилизированного вывода текста. Сейчас поясню, для чего это нужно. Например, хочу я вывести многострочный, скролируемый текст, в котором есть и жирные буквы, и тонкие, и разноцветные, с разным выравниванием. Чтобы такое сделать через твою либу, придётся очень много писать. Представь, что мне нужно вывести строку, в которой каждая буква разного цвета - представь, какой код придётся писать. Почему бы не сделать описание стилей прямо в строке. А потом уже специальный метод в классе будет парсить строку и стилизировать всё это дело как надо. Ну типа как я сделал. Может ты круче что-то придумаешь? Тогда вообще офигенная вещь получится =)
- - -
А потом можно ещё прогу для компа написать для конвертации html документов в этот формат строки и тогда можно, например, сделать читалку текстов для мобил. А то я читал, на каком-то форуме люди пытались сделать прогу для конвертации html страниц в страницы oms для просмотра в опере мини, так максимум, что кто-то смог сделать - это прогу для конвертации через интернет - через сервак оперы мини. Вот.
- - -
В общем, что скажешь. Сложно будет это сделать? И нужно ли это кому-нибудь кроме меня? О_о

odd 22.07.2008 08:02

Ответ: Lib_font32: Графические шрифты
 
Русская версия неправильно распознает запятую в списке библиотек. Т.е. если я напишу Uses alpha, font32; то программа будет искать 1 файл с именем Lib_alphafont32 или что-то типа того. Просто я в русской версии хотел сделать так, чтобы можно было добавлять библиотеки с любыми именами, а не типа Lib_*, но у меня ничего не получилось, а BackUp я забыл тогда сделать. В итоге нужно садиться и руссифицировать программу заново. А это довольно сложно. Хотел сделать руссификатор в виде крэка, так он насчитал, что более 500000 байт изменено и завис при создании патча.

Да я тоже уже подумываю добавить такие функции в библиотеку.
У меня, например, есть мидлет HTML-справочник, который я хочу перевести на Lib_font32, но там без раскрашивания текста в разные цвета ну никак не обойтись.
Сделать это правда будет не просто, но возможно.

Phantom 22.07.2008 09:57

Ответ: Lib_font32: Графические шрифты
 
Видел твой HTML-справочник, качал. Сайт у тебя привлекательный.

Romanzes 30.07.2008 15:21

Ответ: Lib_font32: Графические шрифты
 
Odd, можешь сделать функцию, которая показывает, на сколько пикселей вниз прокручен текст? И еще вот такой косяк: если, к примеру, вызвать MoveDown(10), а до конца осталось меньше 10 пикселей, то текст не прокрутится!

odd 07.08.2008 08:09

Ответ: Lib_font32: Графические шрифты
 
Цитата:

Сообщение от Romanzes (Сообщение 83368)
Odd, можешь сделать функцию, которая показывает, на сколько пикселей вниз прокручен текст? И еще вот такой косяк: если, к примеру, вызвать MoveDown(10), а до конца осталось меньше 10 пикселей, то текст не прокрутится!

1. Считать на сколько пикселов текст передвинется можно и самому. Завидишь пременную counter. Потом, зная шаг сдвига (например 2) можно вычислять:

PHP код:

if movedown(2)=1 then begin counter:=counter+2Repaintend

2. Это не косяк. Так сделано специально. :rolleyes:

Romanzes 07.08.2008 22:06

Ответ: Lib_font32: Графические шрифты
 
Я извращался примерно таким способом:

Код:

k:=KeyToAction(GetKeyPressed);
    if k=GA_DOWN then
      for i:=1 to 5 do
        if font32.MoveDown(1)=1 then counter:=counter+1;
    if k=GA_UP then
      for i:=1 to 5 do
        if font32.MoveUp(1)=1 then counter:=counter-1;


odd 08.08.2008 08:30

Ответ: Lib_font32: Графические шрифты
 
Ну да. Это я и имел ввиду. А что это ты делаешь? Меню? Я щас работаю над его реализацией.

Romanzes 08.08.2008 14:59

Ответ: Lib_font32: Графические шрифты
 
Не, это хелп в арканоиде. Посмотри в проектах, если хочешь, там исходник есть.

Kurdt 09.08.2008 15:13

Re: Lib_font32: Графические шрифты
 
Библиотека супер, но помоему требует усовершенствования для идеала
*очень медленное отображение скролинга текста на моем телефоне около 1 фпс. исправить можно если генерировать 3 изображения в буфере и их скролить. тоесть верхсередина и низ и помере скролинга генерировать новые. но это конечно сложно. потому может алгоритм усовершенствовать.

*остаются артефакты даже если в строке есть разделители, в тестовый пример вставь эту строку увидшшь артефакты буква "р" полностью вылазит
s:='Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне.Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне.';

*если слово больше размера отображаемого окна, то оно не обрезается, что неплохо было бы исправить.


Часовой пояс GMT +4, время: 12:55.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot