--- ---
Question
How can I save the font settings of a control to registry?

You can create a little component (that does not need not be installed on the palette) that allows you to stream a fonts properties to a stream. The stream contents could then be saved to a binary key in the registry.

    { ... }
    type
      TFontWrapper= class( TComponent )
    private
      FFont: TFont;
      Constructor Create( aOwner: TComponent ); override;
      Destructor Destroy; override;
      Procedure SetFont( value: TFont );
    published
      property Font: TFont read FFont write SetFont;
    end;

    { TFontWrapper }

    constructor TFontWrapper.Create(aOwner: TComponent);
    begin
      inherited;
      FFont :=TFont.Create;
    end;

    destructor TFontWrapper.Destroy;
    begin
      FFont.Free;
      inherited;
    end;

    procedure TFontWrapper.SetFont(value: TFont);
    begin
      FFont.Assign( value );
    end;

    { ms is a field of the form }
    procedure TForm1.Button1Click(Sender: TObject);
    var
      helper: TFontWrapper;
    begin
      if not Assigned(ms) then
        ms:= TMemoryStream.Create
      else
        ms.Clear;
      helper := TFontWrapper.Create( nil );
      try
        helper.font := label1.font;
        ms.WriteComponent( helper );
      finally
        helper.free;
      end;
      label1.font.size := label1.font.size + 2;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var
      helper: TFontWrapper;
    begin
      If not Assigned(ms) then Exit;
      ms.Position := 0;
      helper := TFontWrapper.Create( nil );
      try
        ms.ReadComponent( helper );
        label1.font := helper.font;
      finally
        helper.free;
      end;
    end;

If reg is a TRegistry instance with an already open key then:

    reg.WriteBinaryData( valuename, ms.Memory^, ms.Size );

would save the streamed data to the registry, and:

    ms.size := reg.GetDatasize( valuename );
    reg.ReadBinaryData( valuename, ms.Memory^, ms.Size );

would read it back. Mind the caret!