Стандартный шрифт имеет множество недостатков: - На многих телефонах огромный - На каждом телефоне свой шрифт, разного размера и толщины. - Переносить текст нужно самостоятельно
Чтобы не создавать себе проблемы, используйте библиотеку Lib_font32. Она состоит из 3 файлов: сама библиотека, графический шрифт (обычная .*png картинка), и *.dat файл, в котором описаны ширина каждого символа. Lib_font32 следует скидывать в папку Libs (она находится там же, где установлен MidletPascal). Графический шрифт и *.dat файл загружаем в проект.
Теперь как работать с Lib_font32.
Как обычно, активируем её. для этого пишем "font32.init(x);" вместо x - число шрифтов, которые мы собираемся использовать. В данном случае 1.
Теперь нужно загрузить в память графический шрифт. Пишем "Font(x);". Вместо x - номер шрифта (начиная с нуля!). Так как шрифт у нас пока только 1, вместо x пишем 0.
Теперь нужно указать название шрифта. Пишем "LoadFont('name');". Вместо name - имя шрифта. Без расширения ".png" (в данном случае имя будет такое - "Verdana_11"
Так, все настроено, теперь пора бы что-нибудь написать: Сначала надо задать окно, в пределах которого и будет написан текст. Задается оно так: "TextWindow (x,y,w,h);", где x,y - координаты левого-верхнего угла окна. w - ширина окна h - высота окна
Теперь нужно разбить текст на строчки, чтобы он вместился в заданное окно. Пишем функцию "Format(s,x)". Она вернет нам высоту полученного текста "s". x означает способ вывода текста: 0 - оставить только новый текст
1 - добавить к существующему тексту новый.
Теперь нужно вывести на экран всё то, что мы готовили. Для этого пишем "DrawTextWindow;" ВАЖНО: "TextWindow" и "Format" можно вызывать 1 раз, после чего юзать только "DrawTextWindow;". Если, конечно, Вы не решили изменить текст или параметры вывода (сменить размер окна, например).
Итак, выводить текст на экран мы научились, теперь будем его форматировать. Вот список возможного форматирования: Spacing (x) -межбуквенное расстояние (в пикселях) Leading (x) -межстрочное расстояние (в пикселях) Align - выравнивание
0 - по левому краю 1 - по центру краю 2 - по по правому краю
Если текст большой и не влазит, существует прокрутка:MoveUp(x) - прокрутка вверх в пикселях. Возвращает:
1 - если текст был сдвинут 0 - если не был сдвинут (в случае, если текст прокручен максимально вверх или прокрутки нет вообще)
MoveDown(x) - прокрутка вниз в пикселях. Возвращает: 1 - если текст был сдвинут
0 - если не был сдвинут (в случае, если текст прокручен максимально вниз или прокрутки нет вообще)
ВАЖНО: Есть небольшой баг (или так задумано?) - если вывести большой текст с прокруткой, а затем вывести маленький текст, то прокрутка так и останется. То есть прокрутка будет больше, чем высота области, занимаемой всем текстом. Из-за этого текст "исчезнет". Лечится так: MoveUp(9999) так не лечиться, ибо если величина задаваемого скролла больше возможного, ничего не происходит. Приходится шаманить так: for i:=1 to 9 do begin MoveUp(100); MoveUp(10); MoveUp(1);
end;
|