Продолжаю тему. На PSP нет, к сожалению, встроенной системы шрифтов, поэтому одна из проблем при программировании - это поддержка этих самых шрифтов. Парсинг стандартных шрифтов - это очень сложно и окажется задачей более сложной и объемной (даже если использовать наработки) чем сама задуманная программа. Второй способ - это использование спрайтов с изображениями букв, очень легко в использовании, но нарисовать этот набор тоже трудоемко. Но есть выход, программа, которая по заданному шрифту, размеру и стилю создаст этот
набор ! Держите исходник на Delphi (автор с ником Spose) :
На форме должны присутствовать:
Button1: TButton; //Кнопка генерации
Image1: TImage; //Тут будем рисовать
Edit1: TEdit;//От суда будем брать название шрифта
Edit3: TEdit;//От суда будем брать цвет шрифта
На нажатие кнопки(OnClick) пишем: var
x,y,z:integer;
c:char;
begin
Image1.Picture.LoadFromFile(′shablon.bmp′); //Ну берем 24 разрядный фон из БИТМАПА
x:=2; //Устанавливаем место отрисовки первой буквы на 2 (первое место будет пробелом)
for c:=′!′ to ′я′ do //Из таблицы символов от "!" до буквы "я" делаем:
with image1.Canvas do
begin
font.Name:=(edit1.Text); //Узнаем название шрифта
font.Size:=12; //Его размер ставим на 12
font.Style:=[fsBold]; //Делаем шрифт ЖИРНЫМ
font.Color:=stringtocolor(edit3.Text); //Ставим цвет шрифта
textout(x*20-trunc(textwidth(c)*1.5),10-(textheight(c) div 2),c); //Рисуем данный(по номеру) символ из таблицы символов (см. выше) на этом месте
x:=x+1; //Следующее место отрисовки
end; //Отрисовали все символы!!!
//Далее идет фильтр обводящий каждую букву черным цветом
for y:=0 to x*20 do //20 - ширина кадра(в одном кадре - одна буква)
for z:=0 to 20 do
if image1.Canvas.Pixels[y,z]=stringtocolor(edit3.Text) then //Если цвет пикселя=Цвету шрифта то
begin
if image1.Canvas.Pixels[y-1,z]=clWhite then //Если надо то обводим
image1.Canvas.Pixels[y-1,z]:=clBlack;
if image1.Canvas.Pixels[y-1,z-1]=clWhite then
image1.Canvas.Pixels[y-1,z-1]:=clBlack;
if image1.Canvas.Pixels[y+1,z-1]=clWhite then
image1.Canvas.Pixels[y+1,z-1]:=clBlack;
if image1.Canvas.Pixels[y,z+1]=clWhite then
image1.Canvas.Pixels[y,z+1]:=clBlack;
if image1.Canvas.Pixels[y,z-1]=clWhite then
image1.Canvas.Pixels[y,z-1]:=clBlack;
if image1.Canvas.Pixels[y+1,z+1]=clWhite then
image1.Canvas.Pixels[y+1,z+1]:=clBlack;
if image1.Canvas.Pixels[y+1,z]=clWhite then
image1.Canvas.Pixels[y+1,z]:=clBlack;
if image1.Canvas.Pixels[y-1,z+1]=clWhite then
image1.Canvas.Pixels[y-1,z+1]:=clBlack;
end;
image1.picture.SaveToFile(edit1.text+′.bmp′); //Сохраняем полученый БИТМАП в "Название Шрифта".bmp
end;
Как видите, все очень просто !