Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Установлен ли шрифт?


Автор: Borland_Delphi_6 22.7.2004, 15:05
Смотрел ФАК, там есть нечто похожее, но не то. Нужно проверить, есть ли в системе необходимый шрифт.

Автор: Girder 22.7.2004, 17:07
Честно признаюсь в ФАК не заглядывал, т.ч. может повторюсь wink.gif .

Код
Type TPBoolean=^Boolean;
...
function EnumProc(var elf: TEnumLogFont; var ntm: TNewTextmetric; FontType: Integer; FlagData: TPBoolean): Integer; stdcall;
begin
{Здест проверяеш шрифты которые есть для данного семейства}
{К примеру:
 if elf.elfLogFont.lfHeight=13 then
  begin
   FlagDate^:=true;
   Result:=0;
  end else Result:=1; //просматриваем дальше
end;

procedure TForm1.FormCreate(Sender: TObject); //Начинаем
var aFonts:TStrings;
      f:boolean;
      i:integer;
begin
f:=false;
aFonts:=TStringList.Create;
aFonts.Assign(Screen.Fonts);
i:=aFonts.Count
if i>0 then
 repeat
  dec(i);
   if ansicomparetext(aFonts.Strings[i],'твое семейство')=0 then
     EnumFontFamilies(Self.Canvas.Handle, PChar(aFonts.Strings[i]),@EnumProc, DWord(PChar(f))); //перечисляем
 until (i=0)or(f);
aFonts.Free;
if f then
 begin
  //шрифт найден
 end else
 begin
  шрифт не найден
 end;
end;


Удачи.

Автор: Borland_Delphi_6 23.7.2004, 11:54
Что-то не получается...
Код

Type TPBoolean=^Boolean;

function EnumProc(var elf: TEnumLogFont; var ntm: TNewTextmetric; FontType: Integer; FlagData: TPBoolean): Integer; stdcall;
begin
{Здест проверяеш шрифты которые есть для данного семейства}
{К примеру:}
if elf.elfLogFont.lfHeight=13 then
 begin
  FlagData^:=true;
  Result:=0;
 end else Result:=1; //просматриваем дальше
end;


procedure TForm1.FormCreate(Sender: TObject);
var aFonts:TStrings;
     f:boolean;
     i:integer;

begin
ComboBox1.Items := Screen.Fonts;
Combobox1.Items.
f:=false;
aFonts:=TStringList.Create;
aFonts.Assign(Screen.Fonts);
i:=aFonts.Count;
if i>0 then
repeat
 dec(i);
  if ansicomparetext(aFonts.Strings[i],'Tahoma')=0 then
    EnumFontFamilies(Self.Canvas.Handle, PChar(aFonts.Strings[i]),@EnumProc, DWord(PChar(f))); //перечисляем
until (i=0)or(f);
aFonts.Free;
if f then
begin
 ShowMessage('Found!');
 end else
begin
 ShowMessage('Not Found!');
 end;

end;

Автор: Girder 23.7.2004, 12:32
1) строку
Цитата
EnumFontFamilies(Self.Canvas.Handle, PChar(aFonts.Strings[i]),@EnumProc, DWord(PChar(f)));
замени на
Код
EnumFontFamilies(Self.Canvas.Handle, PChar(aFonts.Strings[i]),@EnumProc, integer(PChar(@f)));

2) http://www.gemma.ru/articles/sprgr45/article54.htm
Код
if elf.elfLogFont.lfHeight=13 then
- если этого размера нет, это не значить что этим размером ты не можеш пользоваться. Замени её к примеру, на
Код
if fonttype = TRUETYPE_FONTTYPE
или там стиль проверяй и т.д. и т.п. - короче на то, без чего ты точно не сможеш(или не желательно) этот шрифт использовать.

Удачи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)