// Der Code liest den Schriftnamen aus einem FontFile.


// Getestet mit D2010 unter Win7

type 
  TGetFontResourceInfoW = function(Name: PWideChar; var BufSize: Cardinal; 
    Buffer: Pointer; InfoType: Cardinal): LongBool; stdcall; 
 
function FontNameFromFile(FontDatei: WideString): string; 
var 
  RIW: TGetFontResourceInfoW; 
  AFR, I: Integer; 
  LF: array of TLogFontW; 
  SZ: Cardinal; 
  HF: HFONT; 
begin 
  RIW := GetProcAddress(GetModuleHandle('gdi32.dll'), 'GetFontResourceInfoW'); 
  if @RIW = nil then 
    raise Exception.Create('GetFontResourceInfoW in GDI32.dll nicht gefunden.'); 
  AFR := AddFontResourceW(PWideChar(FontDatei)); 
  try 
    if AFR > 0 then 
    begin 
      SetLength(LF, AFR); 
      SZ := AFR * SizeOf(TLogFontW); 
      if not RIW(PWideChar(FontDatei), SZ, @LF[0], 2) then 
        raise Exception.Create('Fehler bei GetFontResourceInfoW aufgetreten.'); 
      AFR := SZ div SizeOf(TLogFont); 
      for I := 0 to pred(AFR) do 
      begin 
        HF := CreateFontIndirectW(LF[I]); 
        try 
          Result := LF[I].lfFaceName; 
        finally 
          DeleteObject(HF); 
        end; 
      end; 
    end; 
  finally 
    RemoveFontResourceW(PWideChar(FontDatei)); 
  end; 
  if Result = '' then 
    raise Exception.Create('Nichts gefunden.'); 
end; 
 
 
// Beispielaufruf 
 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  showmessage(FontNameFromFile 
      ('I:\offc\Office\FILES\WINDOWS\FONTS\IMPRISHA.TTF')); 
end;
 



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke