Персональная страница Антона Драчёва

Утилита для загрузки и выгрузки шрифтов в ОС Windows

Скачать (вместе с исходниками) [27KB, zip]

ХЗ что тут писать. Из исходника и так всё понятно.

program fontload;

uses
  SysUtils, Windows;

const
  WM_FONTCHANGE = $001D;

var
  doSomething: function(fn: string):integer;
  dir: string = 'C:\windows\fonts\';
  pattern: string = '*.pfm';

function GetFileExt(S: String): String;
var
  i, Pos: Integer;
begin
  pos:=1;
  for i := Length(S) downto 1 do
    begin
      if S[i - 1] = '.' then
        begin
        Pos := i;
        break;
        end;
    end;
  Result := Copy(S,Pos,Length(S));
end;


procedure LoadAll(dir: string);
var
  DirInfo: TSearchRec;
begin
  FindFirst(dir, faAnyFile, DirInfo);
  repeat
    if DirInfo.Name <> '' then
      doSomething(DirInfo.Name);
  until FindNext(DirInfo) <> 0;
  SysUtils.FindClose(DirInfo);
end;

function normalizefontname(s:string):string;
var ext: string;
begin
  ext:=Uppercase(GetFileExt(s));
  if {(ext = 'PFB') or }(ext = 'PFM') then begin
      ext:=Copy(s, 1, length(s) - 4);
      Result:=dir + ext + '.pfm|' + dir + ext + '.pfb';
  end
  else if (ext = 'OTF') or (ext = 'TTF') or (ext = 'FON') then
      Result:=dir + s
  else
      Result:='';
end;

function load(fn: string): Integer;
var x: String;
begin
  Result:=0;
  x:=normalizefontname(fn);
  if (x = '') then
    Exit;
  AddFontResource(PChar(x));
end;

function unload(fn: string): Integer;
var x: String;
begin
  Result:=0;
  x:=normalizefontname(fn);
  if (x = '') then
    Exit;
  RemoveFontResource(PChar(x));
end;

begin
  doSomething:=load;
  if (paramcount = 1) then begin
    pattern:='*';
    dir:=ParamStr(1);
  end else if (paramcount = 2) then begin
    if (ParamStr(1) = 'unload') then begin
      doSomething:=unload;
      pattern:='*';
      dir:=ParamStr(2);
    end else begin
      pattern:=ParamStr(2);
      dir:=ParamStr(1);
    end;
  end else if (ParamCount = 3) then begin
    if (ParamStr(1) = 'unload') then begin
      doSomething:=unload;
      pattern:=ParamStr(3);
      dir:=ParamStr(2);
    end else
      MessageBox(0, 'error', 'error', 0);
  end;

  if (dir[Length(dir)] <> '\') then
    dir:=dir + '\';

  LoadAll(dir + pattern);
  SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
end.