// Hiermit kann man TFont in einen Stream schreiben, bzw. daraus lesen:


// Getestet mit D4 unter XP

procedure FontToStream(F: TFont; S: TStream); 
var 
  b: byte; 
  i: integer; 
  n: string; 
  function FontStyleToByte(fs: TFontStyles): byte; 
  begin 
    move(fs, result, 1); 
  end; 
begin 
  with F do begin 
    b := Charset; 
    S.writebuffer(b, 1); 
    i := color; 
    S.writebuffer(i, 4); 
    i := height; 
    S.writebuffer(i, 4); 
    b := FontStyleToByte(style); 
    S.writebuffer(b, 1); 
    n := Name; 
    i := length(n); 
    S.writebuffer(i, 4); 
    S.writebuffer(n[1], i); 
  end; 
end; 
 
procedure StreamToFont(S: TStream; F: TFont); 
var 
  b: byte; 
  i: integer; 
  n: string; 
  function ByteToFontStyle(bt: byte): TFontStyles; 
  begin 
    move(bt, result, 1); 
  end; 
begin 
  with F do begin 
    S.readbuffer(b, 1); 
    Charset := b; 
    S.readbuffer(i, 4); 
    color := i; 
    S.readbuffer(i, 4); 
    height := i; 
    S.readbuffer(b, 1); 
    style := ByteToFontStyle(b); 
    S.readbuffer(i, 4); 
    setlength(n, i); 
    S.readbuffer(n[1], i); 
    Name := n; 
  end; 
end; 
 
 
// Beispielaufruf 
 
// schreiben und ändern 
 
procedure TForm1.Button8Click(Sender: TObject); 
var 
  Str: TFileStream; 
begin 
  Str := TFileStream.create('Font.Str', fmCreate); 
  FontToStream(Font, Str); 
  Str.free; 
 
  Font.Style := [fsitalic]; 
  Font.Size := 16; 
  Font.Name := 'Courier New'; 
end; 
 
 
// lesen und zurücksetzen 
 
procedure TForm1.Button3Click(Sender: TObject); 
var 
  Str: TFilestream; 
begin 
  if FileExists('Font.Str') then begin 
    Str := TFileStream.create('Font.Str', fmOpenRead); 
    StreamToFont(Str, Font); 
    Str.free; 
  end else showmessage('"Font.Str" nicht gefunden.'); 
end;



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke