Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.19;
Скачать: 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 вся ветка

Текущий архив: 2006.02.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.051 c
10-1114066988
Der Schlangen
2005-04-21 11:03
2006.02.19
Композитный ActiveX компонент как создать?


1-1137329594
SergP
2006-01-15 15:53
2006.02.19
Array ==> Tdataset


15-1138214260
tesseract
2006-01-25 21:37
2006.02.19
Rootkit али кто?


4-1133714790
Volf_555
2005-12-04 19:46
2006.02.19
Как определить количество файлов, помещённых на значок программы?


2-1139133870
**Сергей**
2006-02-05 13:04
2006.02.19
Пункт в меню