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:='Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне.Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне.';

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

odd 10.08.2008 09:19

Ответ: Lib_font32: Графические шрифты
 
У тебя наверное экран 240х320, а буковки маленькие вот и медленно скроллируется потому что надо отрисовать оч. много букаф. Сделай шрифт побольше или скролируй сразу на 2 или 3 пиксела. Вся проблема в том, что там учитывается фон под текстом. Если бы не фон, то можно было бы скролить всё окно как одну картинку, что было бы намного быстрее. Можно добавить функцию типа учитывать фон или нет...
Ладно. Будем фиксить... :@

Kurdt 10.08.2008 12:09

Re: Lib_font32: Графические шрифты
 
да. поставь учитывать фон или нет.
я делал другимми алгоритмами с малюсиньким шрифтом то сролится оч быстро, но там совсем другое. там скролится по строкам а не по пикселям.

(в библиотеке твоей пробовал ставить 4 пикселя здвиг. больше если воодишь то скролит не доконца)

Kurdt 15.08.2008 20:29

Re: Lib_font32: Графические шрифты
 
odd можешь сделать функции скрол боттом и скрол топ
для коректного использования скрола нехватает этих функций, или просто поставь если MoveDown(x) (текущая позиция + x ) > (высоты в пикселях поля - высота отображаемого окна) то делать скрол ботом или наоборот если в верху

odd 18.08.2008 08:26

Ответ: Lib_font32: Графические шрифты
 
Хорошо. Я подправлю функции скролинга.

Piligrim 18.08.2008 14:53

Ответ: Lib_font32: Графические шрифты
 
Большая просьба к авторам библиотек:
1. Обновлять загрузки в первом сообщении темы, а не добавлять их по всей теме.
2. Указывать что изменилось в библиотеке и совместима ли она со старой версией. Если нет, то оставлять старую версию также.

odd 20.08.2008 08:41

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

Сообщение от pilgrim (Сообщение 84643)
Большая просьба к авторам библиотек:
1. Обновлять загрузки в первом сообщении темы, а не добавлять их по всей теме.
2. Указывать что изменилось в библиотеке и совместима ли она со старой версией. Если нет, то оставлять старую версию также.

Я не могу редактировать свой первый пост :mad: видимо прав не хватает. :dontknow:
Нельзя ли что-то там подкрутить в настройках форума?... :wallbash:

Я подкорректировал перемотку текста. Теперь нормально всё должно отображаться. Ещё добавлена функция GetPosition (См. документацию) для поддержки полосы прокрутки.

Rosetau 08.11.2008 23:21

Ответ: Lib_font32: Графические шрифты
 
подскажите пожалуйста

у меня в проге функция, которая в зависимости от параметром показывает на экране разный длинный текст

если первый текст скроллить вниз, а потом вызвать второй - второй текст появится уже отскроленным на эту высоту. как сделать чтобы он показывался сам сначала?

odd 11.11.2008 08:04

Ответ: Lib_font32: Графические шрифты
 
Странно. По-идее процедура format должна сама устанавливать перемотку на 0 позицию, что конечно не всегда хорошо. Например, я подгужаю текст небольшими порциями и добавляю к уже отформатированному тексту. В этом случае каждый раз перематывать неудобно. Если у тебя format работает некорректно, попробуй просто перед отображением нового текста перематывать его вверх на какую-то заранее завышенную величину, типа 100000.

Вот более свежая версия библиотеки (исправлен баг с отображением длинных слов, кот. не влазят в одну строку и некоторые другие мелкие подправки):

Piligrim 11.11.2008 13:36

Ответ: Lib_font32: Графические шрифты
 
ох, стрельнуть бы в тебя odd, за то что не обновляешь в одном месте файл, а новые добавляешь. :imp:

http://forum.boolean.name/showthread.php?t=5499 и внимательно!

odd 14.11.2008 03:32

Ответ: Lib_font32: Графические шрифты
 
Прям как в фильме "Лолита": "Не стреляйте, не стреляйте..." :-D

Блин. Я не виноват. Сколько вам объяснять:
У МЕНЯ НЕТ ПРАВ НА РЕДАКТИРОВАНИЕ СВОИХ СТАРЫХ ПОСТОВ.
Если бы были, я бы всегда свежие библиотеки выкладывал на самой первой странице. И вообще готовится крупное обновление всех библиотек пакета, которое будет выложено и по-идее в дальнейшем выкладываться в соответствующей теме. "GUI2", кажется?..

GomZik 26.12.2008 01:26

Ответ: Lib_font32: Графические шрифты
 
Почемуто, если отградить TextWindow сверху, то при скроллинге получаеться, что текст выходит за верхнюю рамку, а ведь я просто хотел совместить VScroll и окна...в итоге текст залазит на верх окна и вообще при малейшем скролинге убираеться заголовок окна...

odd 26.12.2008 19:01

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

Сообщение от GomZik (Сообщение 92841)
Почемуто, если отградить TextWindow сверху, то при скроллинге получаеться, что текст выходит за верхнюю рамку, а ведь я просто хотел совместить VScroll и окна...в итоге текст залазит на верх окна и вообще при малейшем скролинге убираеться заголовок окна...

Попробуй окно скроллинга задавать ПОСЛЕ того как отрисуешь заголовок окна. Просто функция TextWindow запоминает состояние экрана в момент вызова и потом восстанавливает фон, используя эту информацию.

GomZik 27.12.2008 03:30

Ответ: Lib_font32: Графические шрифты
 
короче, вот модифицированный код, а то я не могу понять, что ты имеешь ввиду... Но если я правильно понял, то именно так у меня и происходит.
Код:

Program VscollDemo;

Uses        gui32, vscroll, font32;

Var                wi, hi, text_height, key: integer;

Begin       
       
        wi:=GetWidth; hi:=GetHeight; // Ширина и высота экрана
       
        // ------------------------- Загружаем шрифт ---------------------------
        font32.init(1);
        Font(0); LoadFont('Verdana_11');
       
        gui32.init;gui32.setskin(loadimage('/main.png'));
        gui32.SetWindow(0,0,wi,hi,'Письмо');
        gui32.showwindow;
       
        Loadvscroll(LoadImage('/vscroll.png')); // Загрузка скина для скроллера
        SetVScroll(wi - VScrollWidth, 24, hi-24); // Установка положения и длины скроллера
        vscroll.SetOffset(16); // Отступ (чтоб не закрыть ползунком стрелочки)
       
        TextWindow(0, 24, wi - VScrollWidth, hi-24); // Установка текстового окна (на весь экран за вычетом ширины скроллера)
       
        text_height:=Format('"Это - признание: я люблю вас," - так начиналось письмо, и в продолжение одной искаженной секунды я принял этот истерический почерк за каракули школьницы: "На днях, в воскресенье, во время службы (кстати хочу пожурить вас, нехорошего, за отказ прийти посмотреть на дивные новые расписные окна в нашей церкви), да, в это воскресенье, так недавно, когда я спросила Господа Бога, что мне делать, мне было сказано поступить так, как поступаю теперь. Другого исхода нет. Я люблю вас с первой минуты, как увидела вас. Я страстная и одинокая женщина, и вы любовь моей жизни. А теперь, мой дорогой, мой самый дорогой, mon cher, cher Monsieur, вы это прочли; вы теперь знаете. Посему попрошу вас, пожалуйста, немедленно уложить вещи и отбыть. Это вам приказывает квартирная хозяйка. Уезжайте! Вон! Departez! Я вернусь к вечеру, если буду делать восемьдесят миль в час туда и обратно - без крушения (впрочем, кому какое дело?) и не хочу вас застать. Пожалуйста, пожалуйста, уезжайте тотчас, теперь жe, даже не читайте этой смешной записки до конца. Уезжайте. Прощайте. Положение, mon cheri, чрезвычайно простое. Разумеется, я знаю с абсолютной несомненностью, что я для вас не значу ничего, ровно ничего. О да, вы обожаете болтать со мной (и шутить надо мною, бедной); вы полюбили наш гостеприимный дом, мне нравящиеся книги, мой чудный сад и даже проказы моей шумной дочки; но я для вас - ничто. Так? Так. Совершенное ничто. Но, если, по прочтении моего "признания", вы решили бы, как европеец и сумрачный романтик, что я достаточно привлекательна для того, чтобы вам воспользоваться моим письмом и завязать со мной "интрижку", тогда знайте, это будет преступно - преступнее, чем было бы насилие над похищенным ребенком. Видите ли, любимый, если бы вы решили остаться, если бы я вас застала тут (чего, конечно, не случится, и потому могу так фантазировать), самый факт вашего оставания мог бы быть истолкован только в одном смысле: что вы для меня хотите стать тем же, чем я хочу стать для вас - спутником жизни - и что вы готовы соединить навсегда свою жизнь с моей и быть отцом моей девочки. Позвольте мне еще чуточку побредить и побродить мыслью, мой драгоценнейший; ведь я знаю, вы уже разорвали это письмо, и его куски (неразборчиво) в водоворот клозета. Мой драгоценнейший, mon tres, tres cher, какую гору любви я воздвигла для тебя в течение этого магического июня месяца! Знаю, как вы сдержанны, как много в вас "британского". Возможно, что вашу старосветскую замкнутость, ваше чувство приличия, покоробит прямота бедной американочки! Вы, который скрываете ваши сильнейшие порывы, должны почесть меня бесстыдной дурочкой за то, что раскрываю так широко свое несчастное раненое сердце. В былые годы я испытала немало разочарований. Мистер Гейз был прекрасный человек, надежный и цельный, но, увы, он был на двадцать лет старше меня, так что - но не будем сплетничать о прошлом. Мой дорогой, твое любопытство должно быть полностью удовлетворено, если ты пренебрег моею просьбой и дочитал это письмо до горького конца. Впрочем, это неважно. Уничтожь его - и уезжай. Не забудь оставить ключи у себя на столе. И хоть какой-нибудь адрес, чтобы я могла вернуть двенадцать долларов, заплаченные тобой за остаток месяца. Прощай, дорогой мой. Молись за меня - если ты когда-нибудь молишься"', 0);

        DrawTextWindow; DrawVScroll(0, text_height, 0, hi-24); Repaint;
       
        SetColor(255,255,255);
       
        repeat // Главный цикл программы
                key:=KeyToAction(GetKeyPressed);
                if key = GA_DOWN then
                        begin
                                MoveDown(2); // Сдвигаем текст вниз
                                FillRect(0,0,wi,hi); // Очистка фона
                                gui32.showwindow;
                                DrawTextWindow; // Рисуем текст
                                DrawVScroll(0, text_height, GetPosition, hi-24); // Отрисовка скроллера
                end;
                if key = GA_UP then
                        begin
                                MoveUp(2); // Сдвигаем текст вверх
                                FillRect(0,0,wi,hi); // Очистка фона
                                gui32.showwindow;
                                DrawTextWindow; // Рисуем текст
                                DrawVScroll(0, text_height, GetPosition, hi-24);  // Отрисовка скроллера
                        end;
                if key = GA_FIRE then Halt; // Выход
               
                Repaint; Delay(5); // Всё таки для Verdanы 7 медленновато скролирует. Надо ещё улучшать алгоритм.
               
        until false;
       
End.

P.S. с самим скролом всё окей, вот текст должен поидии скрыться, не запозая не верхнюю часть окна... Но нифига(

Chehovich-Igor 28.12.2008 01:45

Ответ: Lib_font32: Графические шрифты
 
Почему не отображает украинськую букву " Ї " в Lib_font32.

odd 29.12.2008 01:20

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

Сообщение от Chehovich-Igor (Сообщение 93016)
Почему не отображает украинськую букву " Ї " в Lib_font32.

Блин, надо разобраться. Помню я долго воевал с буквой Ё. С этой, по-ходу, тоже надо повоевать немного.

Цитата:

P.S. с самим скролом всё окей, вот текст должен поидии скрыться, не запозая не верхнюю часть окна... Но нифига(
С этим тоже обещаю разобраться. В чём тут собака порылась. :-D

Trazzy 29.12.2008 06:35

Ответ: Lib_font32: Графические шрифты
 
odd, я тут прошнырил по символам, тем, что могут быть на моб телефонах и заметил, что "Ї" - отображается, а "ї" - нет, и "Є" - отображается, а "є" - нет. Т.е. те символы, что в верхнем регистре - выводятся нормально, а в нижнем регистре - нет. Потом еще какая-то фигня с евро, не выводится символ хоть ты башкой об дерево бахнись... Чет можно придумать?

Chehovich-Igor 29.12.2008 15:45

Ответ: Lib_font32: Графические шрифты
 
Спасибо, жду исправление если можна исправить.Если нет то как выкрутиться с этого положения.

Trazzy 31.12.2008 05:04

Ответ: Lib_font32: Графические шрифты
 
Ааа... и буква "і" - украинская. То же самое что и с "ї" и "є". Просто это важно для украинских пользователей. Бывает, что мидлет просто виснет и полностью не отображает сообщение. Помоги, а?!

Trazzy 31.12.2008 06:18

Ответ: Lib_font32: Графические шрифты
 
Хорошо бы еще сделать полосу прокрутки к окну где текст скроллится, но ладно - это так на заметку. Пока что разберись с символами, оч. прошу тя...

VM 09.01.2009 23:38

Re: Lib_font32: Графические шрифты
 
У меня почему-то на компилируется Lib_font32. Кладу эту библ. в папку classes, при компиляции выдает ошибку failed to load 'font32' после этого файл с библиотекой удаляется из этой папки.
Подскажите, пожалуйста, в чем проблемка?

У меня англ. версия MP 2.02.

Trazzy 10.01.2009 04:53

Ответ: Lib_font32: Графические шрифты
 
Помести библиотеку Lib_font32.class в папку Libs, что находится в дирекории MidletPascal. Если это сообщение было полезным щелкни "Полезно!"


Не выпрашивайте полезность. Некрасиво. (Piligrim)

GRAY_WOLF 10.01.2009 23:18

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

Сообщение от ArtikZ (Сообщение 93265)
Хорошо бы еще сделать полосу прокрутки к окну где текст скроллится, но ладно - это так на заметку. Пока что разберись с символами, оч. прошу тя...


Здеь я выложил пример с полосой прокрутки http://forum.boolean.name/showthread.php?t=7592.

VM 22.03.2009 14:35

Re: Lib_font32: Графические шрифты
 
Не понятно, как с помощью Genfont.exe получить немецкий шрифт (с умляутами). Если кто-то знает, поделитесь опытом, пожалуйста.

Richik 05.05.2009 23:53

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

Цитата:

Сижу юзаю библиотеку Font32.., не как не могу понять почему не получается так:

Код:

procedure LoadRes(namefile: string);
var s, temp, ss: string;
    res: resource;
    i: integer;   
begin
  if loadfile=false then begin
    ClearForm;       
 
    s:='';
    res:=OpenResource(namefile+'.txt');       
    repeat
      temp:=ReadLine(res);     
      if temp='###' then break;               
      s:=s + StrToUtf8(temp) + chr(10);
    until false;       
    CloseResource(res);
   
//ShowCanvas
    TextWindow(0,0,getWidth, getHeight);
    i:=Format(s, 0);
    SetColor(255,255,255);
    FillRect(0,0,getWidth, getHeight);   
    Align(i);
    DrawTextWindow;
    loadfile:=true;   
    showForm;
    addCom;
  end;

что я не так делаю?

{Приложение компилируется, библиотеку подключил, шрифт добавил (и dat-файл к нему), при загрузке тишина }


Один раз случайно в команду " i:=Format(s, 0);", место "s", написал "temp", на экране было написано "###" – конец ресурсного файла . т.е. вероятнее всего что обработка (применение шрифта) верная, наверное

odd 07.05.2009 03:10

Ответ: Lib_font32: Графические шрифты
 
Скорее всего это либо ошибка при загрузке ресурса (пытается считать файл которого нет или неправильно имя сгенерировал) или глючит твоя процедура StrToUtf8 по декодированию текста из одной кодировки в другую. Попробуй вообще отключить декодирование, font32 должен понимать обе кодировки и сам.

Richik 07.05.2009 12:02

Ответ: Lib_font32: Графические шрифты
 
вот мой проект (т.е. его мини прототип), тема

Когда делаю через формы, текст отображается (я про "StrToUtf8").

Пробовал делать вот так "s:=s +temp;", результат тот же, чистый лист((((

Делаю проверку s

Код:

    if s='' then begin
      i:=Format('s пуст', 0);
    end else
    i:=Format('s не пуст и длиной:'+ IntegerToString(Length(s)), 0);

Пишет что s не пуст и очень длинный. Может s "переключается", во время прибавление строк temp, в какой нить не string тип (глупость конечно, так не должно быть по идеи)?

..и showForm и addCom тоже отключал.

odd 07.05.2009 15:30

Ответ: Lib_font32: Графические шрифты
 
После DrawTextWindow нужно делать Repaint и хоть какую-то задержку чтобы пользователь смог прочитать что там написано, а у тебя сразу идет переключение в режим форм. К тому же опреатор Align(i) употребляется неправильно. И наверняка много других неточностей. Короче, тут без исходника не разобраться. Очень много мелких ошибок в коде.

Richik 07.05.2009 18:40

Ответ: Lib_font32: Графические шрифты
 
Вложений: 1
Вот так все прекрасно работает:

i:=Format('Текст Текст Текст Текст Текст Текст Текст Текст Текст ', 0);

а так нет: i:=Format(s, 0);


Вот навалял не большой проект

VM 08.05.2009 00:35

Re: Lib_font32: Графические шрифты
 
Нашёл след. ошибки:
1. res:=OpenResource('/123.txt'); без слэша
2. в файле 123.txt после ### идёт пробел.
И т.д., рабочий вариант здесь http://slil.ru/27518243

Winner 18.05.2009 19:11

Ответ: Lib_font32: Графические шрифты
 
Можно ли как-то вставить Enter (переход на следующую строку) в нужном мне месте? Если можно, пример в студию!

AVIZO 19.05.2009 09:50

Ответ: Lib_font32: Графические шрифты
 
Вложений: 1
Сам пользую такую функцию вывода текста с принудительными переносами. В архиве мидлет в котором используется такая функция.

//многострочное отображение длинной строки
//st - строка; x, y координаты вывода; w, h - ширина и высота в буквах!!!; dlt - пропустить строк
function DrawLongStr(st : string; x, y : integer; w, h : integer; dlt : integer) : boolean;
var
s, ss : string;
i, j, n : integer;
prn : integer;
begin
DrawLongStr := true;
if dlt > 0 then
begin
n := w * dlt;
s := Copy(st, n, Length(st));
end
else
s := st;

for i := 1 to h do
begin
if Length(s) < w then
begin
DrawString(s, x, y + ((i - 1) * h_ltr));
DrawLongStr := false;
Break;
end;
ss := Copy(s, 0, w);

//принудительные переносы!!!
prn := -1;
prn := pos(ss, perenos);
if prn > -1 then
begin
ss := Copy(s, 0, prn);
prn := prn + 1;
end
else
prn := w;

s := Copy(s, prn{w}, Length(s));
DrawString(ss, x, y + ((i - 1) * h_ltr));
end;
end;

Richik 19.05.2009 11:08

Ответ: Lib_font32: Графические шрифты
 
AVIZO, а исходник не зя)))

Цитата:

Можно ли как-то вставить Enter (переход на следующую строку) в нужном мне месте? Если можно, пример в студию!
Библиотека Lib_resloader

Цитата:

Строка ### понимается как маркер конца файла
Строка # понимается как знак перевода строки

AVIZO 19.05.2009 17:48

Ответ: Lib_font32: Графические шрифты
 
Исходник чего???
Вроде бы функцию выложил полностью. В ней все прозрачно (хотя можно сделать элегантнее).

Winner 19.05.2009 18:10

Ответ: Lib_font32: Графические шрифты
 
А именно в библиотеке font32 можно как-то вставить Enter или хотя бы получить высоту текста? Если нет, то предлагаю создателю это сделать, если не трудно.

Richik 21.05.2009 12:43

Ответ: Lib_font32: Графические шрифты
 
Winner, можно так:

В тексте на пустой строке, там, где надо установить перенос, ставим решетку.
Если строка равна "#", то строка равна "chr(32) + chr(13)"

Winner 22.05.2009 01:32

Ответ: Lib_font32: Графические шрифты
 
Т.е. chr(32) + chr(13) - это и есть мой Enter? Можно немного разъяснить новичку этот момент?

Phantom 22.05.2009 03:59

Ответ: Lib_font32: Графические шрифты
 
Для переводов строки в разных операционных системах используются разные байты.
Винда - chr(13)+chr(10)
Линукс - chr(10)
Мак - chr(13)
Обычно когда ты ЭНТЕР нажимаешь в текстовом редакторе, то вставляются именно эти символы (свои на каждой ОС).
chr(32) - это вроде пробел, он-то тут причём?

Richik 23.05.2009 00:17

Ответ: Lib_font32: Графические шрифты
 
Возможно это так, но в инструкции написано, иначе

Phantom 23.05.2009 00:26

Ответ: Lib_font32: Графические шрифты
 
Richik, в инструкции к чему?

Richik 24.05.2009 00:35

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

Цитата:

integer Format(s: string; b: integer) - Разбить длинный текст на мелкие строчки так, чтобы он помещался в
окно, заданное процедурой TextWindow. Функция возвращает расчётную высоту полученного разбитого
текста в пикселах. Параметр b определяет тип добавления текста:
0 - Форматировать новый текст (старый при этом будет удалён)
1 - Добавить строку в конец к уже отформатированному тексту
При необходимости вставки в текст переноса строки нужно делать так:
s:='Сейчас будет пере-' + chr(32) + chr(13) + 'нос текста.';
или для двойного переноса:
s:='Михаил Булгаков' + chr(32) + chr(13) + chr(13) + 'Мастер и Маргарита';

ViNT 24.05.2009 00:40

Ответ: Lib_font32: Графические шрифты
 
Здесь видимо просто добавляется пробел, для того, чтобы текст не упирался в край экрана (32dec=20hex, а это точно пробел), потом уже идет 13dec, это перевод строки.

odd 24.05.2009 21:31

Ответ: Lib_font32: Графические шрифты
 
Алгоритм разбиения текста работает так, что ему нужен пробел перед знаком переноса. Иначе перенос срабатывать не будет.

Richik 24.05.2009 23:52

Ответ: Lib_font32: Графические шрифты
 
я же говорил :p


офтоп))

Mach94 18.07.2009 02:21

Ответ: Lib_font32: Графические шрифты
 
odd, ты не мог бы сделать, чтобы у шрифтов оставалась прозрачность и чтоб в генераторе можно было задать цвет в RGB... Просто как-то не очень красиво смотрится белый прямоугольник вокруг текста, а если выбрать белый цвет шрифта, то вобще нифига не видно... Сделай плиз если не трудно...

odd 18.07.2009 15:45

Ответ: Lib_font32: Графические шрифты
 
Не понимаю в чем проблема? Там отлично поддерживается прозрачность. Просто загрузи шрифт в Photoshop и сделай там прозрачный фон в самой картинке вместо белого фона. Либо перекрась белый фон на прозрачный с помощью либы Lib_alpha. Просто генератор шрифтов не очень хороший, не умеет делать шрифты с прозрачным фоном. Вечно потом приходится самому ручками доделывать. Аналогично поступаешь и с перекраской шрифта. В любом случае с перекраской или без без Photoshop не обойтись. Он нужен хотя бы для уменьшения веса самой картинки. Можно подобрать такой алгоритм сжатия, что размер картинки уменьшится в 2 и более раз.

Mach94 25.07.2009 02:45

Ответ: Lib_font32: Графические шрифты
 
odd, Спасибо, я так и делал... просто если размер шрифта маленький, бывает что Photoshop буквы обрезает, и они становятся непохожими на сам шрифт...
Можно поподробнее про сжатие картинки в Photoshop?

odd 25.07.2009 20:39

Ответ: Lib_font32: Графические шрифты
 
Для сжатия готовой картинки нажимаешь
File --> Save for Web...
И там выставляешь оптимальные значения для сжатия,
там есть предпросмотр и пишется размер получаемого файла.
Для шрифта, как правило, оптимальный формат PNG-8, с двумя цветами.
Для других картинок поэкспериментируй с форматами и количеством цветов.

vad74 18.09.2009 16:45

Ответ: Lib_font32: Графические шрифты
 
odd
В font32 есть поддержка скролинга текста по вертикали, а можно добавить поддержку скролинга строки по горизонтали (справо-налево)? Что бы можно было сделать циклическую бегущую строку.

Dj_Alex 18.09.2009 20:08

Ответ: Lib_font32: Графические шрифты
 
а так разве нельзя?

repeat
fillrect(0,0,176,220);
x:=x+1;
drawstring('бегущая строка',x,5);
until (.....)

и строка будет двигаться вправо


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

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