2017-05-09 15 views
5

デルファイでモノスペースフォントを検出するにはどうすればよいですか?Delphiでモノスペースフォントを検出するにはどうすればよいですか?

TFont.Pitchは私が考えるfpFixedする必要がありますが、それは、Delphi 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; 
関連する問題