![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение фиксированного шрифта, медленно работает [D7, WinXP]
Pavel__ © (2006-01-20 16:57:00)...функция. Написал, вот:
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]);
слишком долго соображает. Может есть другие методы определения сабжа? Или можно поправить этот? Спасибо.
Pavel__ (2006-01-23 15:40:00) [1]2 Leonid Troyanovsky
Огромное спасибо, разобрался.
Leonid Troyanovsky (2006-01-23 13:10:00) [2]
> 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-20 21:40:00) [3]Пардон, заговариваюсь уже.
> вот только не пойму как передать чтобы именно с фиксированной
> шириной текст вывело..
читать как
> вот только не пойму, какие параметры передать, чтобы вывело
> список шрифтов с фиксированной шириной..
Pavel__ (2006-01-20 21:36:00) [4]2 MBo
пример нашел, http://vsokovikov.narod.ru/Msdn_api/Global_SDK/Reference_API/Functions/Fn_E/fn_enumfontfamiliesex.htm, вот только не пойму как передать чтобы именно с фиксированной шириной текст вывело..
2 Игорь Шевченко
> Уж не из-за этой ли строчки ?
Сомнительно. Закомментировал -- ничего не изменилось. something -- стандартный tcombobox.
Игорь Шевченко (2006-01-20 17:05:00) [5]
> слишком долго соображает
Уж не из-за этой ли строчки ?
> something.Items.Add(Screen.Fonts[I]);
MBo (2006-01-20 17:02:00) [6]EnumFontFamilies(Ex)?