Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.062 c
15-1138013263
pavel_guzhanov
2006-01-23 13:47
2006.02.19
DirectX или OpenGL


4-1133437485
Avers_SM
2005-12-01 14:44
2006.02.19
Ув. мастера. Как найти хендлы всех контролов на форме?


4-1133558140
TheEd
2005-12-03 00:15
2006.02.19
Изменить размер шрифта MainMenu


2-1139089031
Вячеслав Бессонов
2006-02-05 00:37
2006.02.19
TMemo


15-1138627801
msguns
2006-01-30 16:30
2006.02.19
Рынок vs Базар





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский