|
12.07.2008, 04:08
|
#1
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Lib_font32: Графические шрифты
Поседнее обновление 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: Всё таки иногда полезно подождать каменный цветок.
Последний раз редактировалось Piligrim, 02.10.2009 в 22:34.
|
(Offline)
|
|
Эти 17 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
|
barsunduk (13.01.2011), boydjon (16.07.2010), cherepets (25.08.2009), Eggis (19.08.2010), GRAY_WOLF (03.10.2009), im_zorg (03.02.2010), InkutaY (12.07.2008), Ksanatos (11.02.2010), Kurdt (09.08.2008), Mach94 (18.07.2009), Rock2roll (31.07.2010), scimitar (02.01.2010), S_007 (23.02.2012), Trazzy (20.09.2009), valhof (09.08.2008), wrz77 (11.09.2008), Дийкстра (02.08.2008)
|
12.07.2008, 14:54
|
#2
|
Оператор ЭВМ
Регистрация: 13.06.2008
Адрес: Сочи
Сообщений: 43
Написано 6 полезных сообщений (для 12 пользователей)
|
Ответ: Lib_font32: Графические шрифты
Прикольно!
а можно суда еще и цвет шрифта добавить ?
DrawString(s: string; x: integer; y: integer, color: integer)
|
(Offline)
|
|
13.07.2008, 03:20
|
#3
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_font32: Графические шрифты
Добавил функции модификации шрифта, вывода длинного текста в окно и скролинга.
Теперь можно поспорить какая либа круче Lib_text aka MultiLine или моя.
Новый список функций:
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 в пикселах. Это нужно, например, для того, чтобы прикинуть влезет ли данная строка на экран. Modify(im: image) - Модифицировать текущий шрифт. Применяется для изменения цвета/прозрачности шрифта, например с помощью библиотеки Lib_alpha. integer Format(s: string) - Разбить длинный текст на мелкие строчки так, чтобы он помещался в окно, заданное процедурой TextWindow. Функция возвращает расчётну высоту полученного разбитого текста в пикселах. DrawTextWindow - Нарисовать ранее разбитый функцией Format текст в окне Окно должно было быть заданно функцией TextWindow до форматирования. integer MoveUp(px: integer) - Перемотать текст в окне на px пикселов вверх Функция возвращает 1 если нужна перерисовка экрана (т.е. текст был сдвинут) или 0 если перерисовка не нужна integer MoveDown(px: integer) - Перемотать текст в окне на px пикселов вниз Функция возвращает 1 если нужна перерисовка экрана (т.е. текст был сдвинут) или 0 если перерисовка не нужна
Думаю прикрутить ещё и выравнивание текста влево и по центру. Ну, это уже элементарно. Скоро будет.
Последний раз редактировалось Piligrim, 02.10.2009 в 22:35.
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
|
|
13.07.2008, 15:33
|
#4
|
Разработчик
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений (для 638 пользователей)
|
Ответ: 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.
Если убрать буквы "я", то пример будет работать. Можно, конечно, писать "йа", но неудобно
|
(Offline)
|
|
14.07.2008, 08:16
|
#5
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_font32: Графические шрифты
Прошу прощения, маленькая опечаточка в программе. Пофиксено.
Щас работаю над добавлением функций регулировки межстрочного и межбуквенного расстояния, выравнивания. Скоро будет.
PS: Исправь у себя в программе строку:
Repaint; на if h<>0 then Repaint;
Последний раз редактировалось Piligrim, 14.11.2008 в 14:14.
|
(Offline)
|
|
15.07.2008, 08:07
|
#6
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_font32: Графические шрифты
Всё. Работы закончены. Добавил выравнивание, регулировку межстрочного и мужбуквенного расстояний. Всё, что я хотел добавить и сделать сделано. Библиотеку можно добавлять в коллекции. Обязательно почитайте документацию к библиотеке и посмотрите демку. Там я показал некоторые интересные возможности (компилировать только в английской версии MP).
Последний раз редактировалось Piligrim, 02.10.2009 в 22:35.
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
|
|
21.07.2008, 21:29
|
#7
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Lib_font32: Графические шрифты
А почему компилировать только в английской версии? У меня до этого три разных паскаля стояло, недавно оставил один - с твоего сайта... О_о Теперь нету английского у меня... :'(
- - -
Добавил позже:
Пробовал русской версей компилировать, всё скомпилировалось, но в архив jar не добавились либы АЛЬФА и ФОНТ32. После того, как их руками туда засунул, всё заработало.
- - -
Слушай, я примерно то же самое, что и ты хотел сделать, но мозга мне не хватает. Поэтому, у меня предложение, не мог бы ты сделать что-нибудь подобное, как в моей либе для стилизированного вывода текста. Сейчас поясню, для чего это нужно. Например, хочу я вывести многострочный, скролируемый текст, в котором есть и жирные буквы, и тонкие, и разноцветные, с разным выравниванием. Чтобы такое сделать через твою либу, придётся очень много писать. Представь, что мне нужно вывести строку, в которой каждая буква разного цвета - представь, какой код придётся писать. Почему бы не сделать описание стилей прямо в строке. А потом уже специальный метод в классе будет парсить строку и стилизировать всё это дело как надо. Ну типа как я сделал. Может ты круче что-то придумаешь? Тогда вообще офигенная вещь получится =)
- - -
А потом можно ещё прогу для компа написать для конвертации html документов в этот формат строки и тогда можно, например, сделать читалку текстов для мобил. А то я читал, на каком-то форуме люди пытались сделать прогу для конвертации html страниц в страницы oms для просмотра в опере мини, так максимум, что кто-то смог сделать - это прогу для конвертации через интернет - через сервак оперы мини. Вот.
- - -
В общем, что скажешь. Сложно будет это сделать? И нужно ли это кому-нибудь кроме меня? О_о
Последний раз редактировалось Phantom, 21.07.2008 в 22:33.
|
(Offline)
|
|
22.07.2008, 08:02
|
#8
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_font32: Графические шрифты
Русская версия неправильно распознает запятую в списке библиотек. Т.е. если я напишу Uses alpha, font32; то программа будет искать 1 файл с именем Lib_alphafont32 или что-то типа того. Просто я в русской версии хотел сделать так, чтобы можно было добавлять библиотеки с любыми именами, а не типа Lib_*, но у меня ничего не получилось, а BackUp я забыл тогда сделать. В итоге нужно садиться и руссифицировать программу заново. А это довольно сложно. Хотел сделать руссификатор в виде крэка, так он насчитал, что более 500000 байт изменено и завис при создании патча.
Да я тоже уже подумываю добавить такие функции в библиотеку.
У меня, например, есть мидлет HTML-справочник, который я хочу перевести на Lib_font32, но там без раскрашивания текста в разные цвета ну никак не обойтись.
Сделать это правда будет не просто, но возможно.
Последний раз редактировалось odd, 22.07.2008 в 08:12.
|
(Offline)
|
|
22.07.2008, 09:57
|
#9
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Lib_font32: Графические шрифты
Видел твой HTML-справочник, качал. Сайт у тебя привлекательный.
|
(Offline)
|
|
30.07.2008, 15:21
|
#10
|
Разработчик
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений (для 638 пользователей)
|
Ответ: Lib_font32: Графические шрифты
Odd, можешь сделать функцию, которая показывает, на сколько пикселей вниз прокручен текст? И еще вот такой косяк: если, к примеру, вызвать MoveDown(10), а до конца осталось меньше 10 пикселей, то текст не прокрутится!
|
(Offline)
|
|
07.08.2008, 08:09
|
#11
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_font32: Графические шрифты
Сообщение от Romanzes
Odd, можешь сделать функцию, которая показывает, на сколько пикселей вниз прокручен текст? И еще вот такой косяк: если, к примеру, вызвать MoveDown(10), а до конца осталось меньше 10 пикселей, то текст не прокрутится!
|
1. Считать на сколько пикселов текст передвинется можно и самому. Завидишь пременную counter. Потом, зная шаг сдвига (например 2) можно вычислять:
if movedown(2)=1 then begin counter:=counter+2; Repaint; end;
2. Это не косяк. Так сделано специально.
|
(Offline)
|
|
07.08.2008, 22:06
|
#12
|
Разработчик
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений (для 638 пользователей)
|
Ответ: 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;
|
(Offline)
|
|
08.08.2008, 08:30
|
#13
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_font32: Графические шрифты
Ну да. Это я и имел ввиду. А что это ты делаешь? Меню? Я щас работаю над его реализацией.
|
(Offline)
|
|
08.08.2008, 14:59
|
#14
|
Разработчик
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений (для 638 пользователей)
|
Ответ: Lib_font32: Графические шрифты
Не, это хелп в арканоиде. Посмотри в проектах, если хочешь, там исходник есть.
|
(Offline)
|
|
09.08.2008, 15:13
|
#15
|
ПроЭктировщик
Регистрация: 28.03.2007
Сообщений: 194
Написано 7 полезных сообщений (для 25 пользователей)
|
Re: Lib_font32: Графические шрифты
Библиотека супер, но помоему требует усовершенствования для идеала
*очень медленное отображение скролинга текста на моем телефоне около 1 фпс. исправить можно если генерировать 3 изображения в буфере и их скролить. тоесть верхсередина и низ и помере скролинга генерировать новые. но это конечно сложно. потому может алгоритм усовершенствовать.
*остаются артефакты даже если в строке есть разделители, в тестовый пример вставь эту строку увидшшь артефакты буква "р" полностью вылазит
s:='Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне.Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне. Пример перемотки длинного текста в окне.';
*если слово больше размера отображаемого окна, то оно не обрезается, что неплохо было бы исправить.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:33.
|