2017-05-09 20 views
5

어떻게하면 델파이에서 모노 스페이스 글꼴을 감지 할 수 있습니까?어떻게 델파이에서 모노 스페이스 글꼴을 감지 할 수 있습니까?

TFont.Pitch 내가 생각 fpFixed해야하지만, 델파이 XE4와 나를 위해 작동하지 않습니다

var 
    Font: TFont; 
begin 
    Font := TFont.Create; 
    Font.Name := 'Courier New'; 
    if Font.Pitch = fpFixed then 
    ShowMessage('Monospace Font!'); 
    ... 

Font.Pitch WinAPI를의 GetObject에 따라. lfPitchAndFamilyFIXED_PITCH으로 돌아 가야하지만 모든 글꼴 (Arial)에 대해서도 항상 DEFAULT_PITCH이됩니다.

답변

5

예, GetObject은 실제로 DEFAULT_PITCH을 반환합니다. 그러나 필요한 이름으로 글꼴 열거를 통해 진정한 가치를 얻을 수 있습니다.

function EnumFontsProc(var elf: TEnumLogFont; 
         var tm: TNewTextMetric; 
         FontType: Integer; 
         Data: LPARAM): Integer; stdcall; 
begin; 
    Result := Integer(FIXED_PITCH = (elf.elfLogFont.lfPitchAndFamily and FIXED_PITCH)); 
end; 

procedure TForm1.Button13Click(Sender: TObject); 
begin; 
    if EnumFontFamilies(Canvas.Handle, 
         PChar('Courier New'), 
         @EnumFontsProc,0) then 
    Caption := 'Fixed' 
    else 
    Caption := 'Variable'; 
end;