![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определить моноширинный шрифт
Alextp © (2006-06-07 22:47:00)Как определить, является ли шрифт (TFont) моноширинным?
Пока придумал только так:
with Canvas do
Mono:= TextWidth('.')=TextWidth('W');
есть ли более нормальный способ?
Johnmen (2006-06-12 00:02:00) [1]Не знаю что и как ты проверял, но код 100% рабочий.
Alextp (2006-06-09 22:02:00) [2]
> Это ты кому?
Тебе :) - ты же написал код, проверяющий шрифты на флаг FIXED_PITCH:
Result:=integer((EnumLogFont.elfLogFont.lfPitchAndFamily and FIXED_PITCH)=FIXED_PITCH);
end;
Так вот, этот флаг установлен не у всех моноширинных шрифтов. Я и привел пример.
Johnmen (2006-06-09 00:00:00) [3]Это ты кому?
Alextp (2006-06-08 19:37:00) [4]Сделал проверку на FIXED_PITCH. Для шрифтов Courier New/FixedSys
не работает: у них установлен DEFAULT_PITCH.
Win98, может в XP не так?
Johnmen (2006-06-08 01:30:00) [5]
var
YourFont : TFont; // твой шрифт
function EnumFontsProc(var EnumLogFont: TEnumLogFont;
var TextMetric: TNewTextMetric;
FontType: Integer;
Data: LPARAM): Integer; export; stdcall;
begin;
Result:=integer((EnumLogFont.elfLogFont.lfPitchAndFamily and FIXED_PITCH)=FIXED_PITCH);
end;
procedure FixedPitch_OR_NotFixedPitch; // быть или не быть
var
DC : HDC;
begin;
DC:=GetDC(0);
try
if EnumFontFamilies(DC,PChar(YourFont.Name),@EnumFontsProc,0) then
ShowMessage('моноширинный')
else ShowMessage('НЕмоноширинный');
finally
ReleaseDC(0,DC);
end;
end;
McSimm (2006-06-08 00:43:00) [6]Может быть TFont.Pitch = fpFixed