Форум: "Начинающим";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
ВнизОпределить моноширинный шрифт Найти похожие ветки
← →
Alextp © (2006-06-07 22:47) [0]Как определить, является ли шрифт (TFont) моноширинным?
Пока придумал только так:
with Canvas do
Mono:= TextWidth(".")=TextWidth("W");
есть ли более нормальный способ?
← →
McSimm © (2006-06-08 00:43) [1]Может быть TFont.Pitch = fpFixed
← →
Johnmen © (2006-06-08 01:30) [2]
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;
← →
Alextp © (2006-06-08 19:37) [3]Сделал проверку на FIXED_PITCH. Для шрифтов Courier New/FixedSys
не работает: у них установлен DEFAULT_PITCH.
Win98, может в XP не так?
← →
Johnmen © (2006-06-09 00:00) [4]Это ты кому?
← →
Alextp © (2006-06-09 22:02) [5]
> Это ты кому?
Тебе :) - ты же написал код, проверяющий шрифты на флаг FIXED_PITCH:Result:=integer((EnumLogFont.elfLogFont.lfPitchAndFamily and FIXED_PITCH)=FIXED_PITCH);
end;
Так вот, этот флаг установлен не у всех моноширинных шрифтов. Я и привел пример.
← →
Johnmen © (2006-06-12 00:02) [6]Не знаю что и как ты проверял, но код 100% рабочий.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.015 c