Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.21;
Скачать: CL | DM;

Вниз

Как получить CharSet шрифта   Найти похожие ветки 

 
Alex_C ©   (2006-05-03 12:02) [0]

Допустим Courier"а. Нашел следующее:

function EnumProc(const EnumLogFontEx: TEnumLogFontEx;
  const NewTextMetricEx: TNewTextMetricEx;
  FontType: Integer;
  Strings: TStrings): Integer; stdcall;
var
  I: Integer;
  ID: Integer;
  S: string;
begin
  ID := EnumLogFontEx.elfLogFont.lfCharSet;
  S  := Format("Unknown charset %d", [ID]);
  for I := 0 to NumCharSets - 1 do
    if CharSets[I].ID = ID then
    begin
      S := CharSets[I].Name;
      Break;
    end;
  Strings.Add(S);
  Result := 1
end;

procedure GetAvailableCharSets(const FaceName: string; CharSets: TStrings);
var
  DC: THandle;
  LogFont: TLogFont;
begin
  DC := GetDC(GetDesktopWindow);
  if DC <> 0 then
    try
      FillChar(LogFont, SizeOf(LogFont), 0);
      Move(FaceName[1], LogFont.lfFaceName, Length(FaceName));
      LogFont.lfCharSet := DEFAULT_CHARSET;
      EnumFontFamiliesEx(DC, LogFont, @EnumProc, lParam(CharSets), 0);
    finally
      ReleaseDC(GetDesktopWindow, DC)
    end
end;

Все прекрасно работает, с одной проблемой: если в системе есть Courier и допустим Courier New, то в CharSets будет занесены charset для обохих шрифтов (в меня в сис-ме просто 2 раза пишет RUSSIAN_CHARSET, RUSSIAN_CHARSET). Как этого избежать? Т.е. чтобы было только для Courier"а?


 
TUser ©   (2006-05-03 13:00) [1]

Например

var EnumFlag: boolean;

function EnumProc(const EnumLogFontEx: TEnumLogFontEx;
...
begin
 if Flag then Exit;
 Flag := true;

...

Flag := false;
EnumFontFamiliesEx(DC, LogFont, @EnumProc, lParam(CharSets), 0);

Прим. Этот код потоконебезопасен, в многопоточных приложения следует использовать Critical Sections.


 
Alex_C ©   (2006-05-03 13:49) [2]

Ок! Идею понял , спасибо!



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

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

Наверх




Память: 0.47 MB
Время: 0.055 c
15-1146061971
Yanis
2006-04-26 18:32
2006.05.21
Может и баян, но улыбнуло


2-1146609152
Couter Terranist
2006-05-03 02:32
2006.05.21
Перенос БД на другой компютер


8-1135358895
Gorger
2005-12-23 20:28
2006.05.21
Почему не работает CreatePolygonRgn?


1-1144751354
pound
2006-04-11 14:29
2006.05.21
как записать в буфер обмена


2-1146741214
KyRo
2006-05-04 15:13
2006.05.21
TServerSocket;