Вниз
Скачать: CL | DM;

Определение фиксированного шрифта, медленно работает   Найти похожие ветки 

← →
Pavel__   (2006-01-20 16:57) [0]

...функция. Написал, вот:


function IsFixedFont(const FontName: TFontName): Boolean;
var
 DC: HDC;
 Save: THandle;
 Metrics: TTextMetric;
 Font: TFont;
begin
 Font := TFont.Create;
 try
   Font.Name := FontName;
   DC := GetDC(0);
   Save := SelectObject(DC, Font.Handle);
   GetTextMetrics(DC, Metrics);
   SelectObject(DC, Save);
   ReleaseDC(0, DC);
   Result := (((Metrics.tmPitchAndFamily and FF_MODERN) <> 0) and
     ((Metrics.tmPitchAndFamily and $01) = 0));
 finally
   Font.Free;
 end;
end;


Работает нормально, но при проходе списка вида


for I := 0 to Screen.Fonts.Count - 1 do
 if IsFixedFont(Screen.Fonts[I]) then
   something.Items.Add(Screen.Fonts[I]);


слишком долго соображает. Может есть другие методы определения сабжа? Или можно поправить этот? Спасибо.


← →
MBo ©   (2006-01-20 17:02) [1]

EnumFontFamilies(Ex)?


← →
Игорь Шевченко ©   (2006-01-20 17:05) [2]


> слишком долго соображает


Уж не из-за этой ли строчки ?


>  something.Items.Add(Screen.Fonts[I]);


← →
Pavel__   (2006-01-20 21:36) [3]

2 MBo

пример нашел, http://vsokovikov.narod.ru/Msdn_api/Global_SDK/Reference_API/Functions/Fn_E/fn_enumfontfamiliesex.htm, вот только не пойму как передать чтобы именно с фиксированной шириной текст вывело..

2 Игорь Шевченко

> Уж не из-за этой ли строчки ?


Сомнительно. Закомментировал -- ничего не изменилось. something -- стандартный tcombobox.


← →
Pavel__   (2006-01-20 21:40) [4]

Пардон, заговариваюсь уже.


> вот только не пойму как передать чтобы именно с фиксированной
> шириной текст вывело..


читать как


> вот только не пойму, какие параметры передать, чтобы вывело
> список шрифтов с фиксированной шириной..


← →
Leonid Troyanovsky ©   (2006-01-23 13:10) [5]


> Pavel__   (20.01.06 21:40) [4]

> > вот только не пойму, какие параметры передать, чтобы вывело
> > список шрифтов с фиксированной шириной..


Передавать, видимо, logfont.lfCharSet.
А вот фильтровать в EnumProc (var elf: TEnumLogFontEx, ..):

if (elf.elfLogFont.lfPitchAndFamily and FIXED_PITCH <> 0) then {fixed}

--
Regards, LVT.


← →
Pavel__   (2006-01-23 15:40) [6]

2 Leonid Troyanovsky

Огромное спасибо, разобрался.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.025 c
15-1138476997
syte_ser78
2006-01-28 22:36
2006.02.19
dma для dvd


1-1137730928
ZilonAtakuit
2006-01-20 07:22
2006.02.19
Создание таймера


15-1138534223
Kerk
2006-01-29 14:30
2006.02.19
Я сейчас убью соседей


1-1137578199
__DATA__
2006-01-18 12:56
2006.02.19
CreateProcess не запускает файлы с параметрами


15-1138453656
PARUS
2006-01-28 16:07
2006.02.19
Компоненты Delphi (2005).




   Наверх