Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2013, 12:08   #1
Alexandr17-10
Пользователь
 
Регистрация: 12.08.2013
Сообщений: 99
По умолчанию Код применения своего шрифта не работает.

Вот процедуры дл установки шрифта в программу
Код:
Procedure AddFont(NameFont:String);
var str:String;
begin
  str:=ExtractFilePath(Application.ExeName)+'AEFont\'+NameFont+'.ttf';
  AddFontResource(StringToOleStr(str));
  SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;  //применяем его
end;

Procedure ClearFont(NameFont:String);
var str:String;
begin
  str:=ExtractFilePath(Application.ExeName)+'AEFont\'+NameFont+'.ttf';
  RemoveFontResource(StringToOleStr(str));
  SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
end;
Вот код для пользования этими процедурами
Код:
or i := 0 to High(TextArrayOf) do begin
    TextArrayOf[i].Text:=GetStrIni('AE-->Maps',IntToStr(i)+'Caption',ExtractFilePath(Application.ExeName)+'AE_Project.aeIni');
    TextArrayOf[i].Names:=GetStrIni('AE-->Maps',IntToStr(i)+'Name',ExtractFilePath(Application.ExeName)+'AE_Project.aeIni');
    TextArrayOf[i].txtColor:=GetClrIni('AE-->Maps',IntToStr(i)+'TColor',ExtractFilePath(Application.ExeName)+'AE_Project.aeIni');
    TextArrayOf[i].txtFont:=GetStrIni('AE-->Maps',IntToStr(i)+'TFont.Name',ExtractFilePath(Application.ExeName)+'AE_Project.aeIni');
    AddFont(TextArrayOf[i].txtFont);
    TextArrayOf[i].txtSize:=GetIntIni('AE-->Maps',IntToStr(i)+'TFont.Size',ExtractFilePath(Application.ExeName)+'AE_Project.aeIni');
    ListBox1.Items.Add('');
  end;
А вот его применения
Код:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  ListBox1.Canvas.Font.Name:=TextArrayOf[Index].txtFont;
  ListBox1.Canvas.Font.Size:=TextArrayOf[Index].txtSize;
  ListBox1.Canvas.Font.Color:=TextArrayOf[Index].txtColor;
  ListBox1.ItemHeight:=TextArrayOf[Index].txtSize+6;
  ListBox1.Canvas.FillRect(Rect);
  ListBox1.Canvas.TextOut(Rect.Left,Rect.Top,TextArrayOf[Index].Text);
end;
Все шрифты находиться в папке AEFont
Имя шрифта = zanes.ttf
Переменная TextArrayOf[Index].txtFont - содержит имя шрифта без его расширения
Можете сказать что я не так делаю.
Alexandr17-10 вне форума Ответить с цитированием
Старый 11.11.2013, 06:50   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Не совсем понятно, что надо, что не получается.

Вроде проблема в том, что Вы пытаетесь указать имя шрифта (свойство TFont.Name) как имя файла. Это неправильно, т.к это свойство для т.н. FontFace - внутреннего имени шрифта и к имени файла отношения не имеет никакого, но я не знаю, что у Вас из инишки читается... (по Вашим словам - имя файла без расширения). Да Вы даже процедуры GetStrIni не приводите.
ПС. Код я бы упростил, введите переменную для ExtractFilePath(Application.ExeName ) и для неё же плюс всякие 'AE_Project.aeIni', 'AEFont\' , также константу для 'AE-->Maps'
Довольно опасна неявная связка массива TextArrayOf и итемов в листбоксе.
Возможно, будут полезны мои исследования по шрифтам:
http://programmersforum.ru/showthread.php?t=180046
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает код hello19 Общие вопросы C/C++ 11 08.08.2011 16:08
Установка своего приложения, как программы по умалчанию для файлов с которыми оно работает almostdj Общие вопросы .NET 2 07.08.2010 13:58
Программа разработки своего шрифта... Altera Софт 2 24.12.2008 22:17
Не работает код... prizrak1390 Общие вопросы Delphi 3 22.10.2008 14:59