Нужно сохранять атрибуты шрифта (имя, размер и т.п.) а не сам обьект TFont. После считывания этой информации следует проверить существует ли такой шрифт, прежде чем его использовать. Чтобы не показаться голословным дополню ответ Borland'а своим примером сохранения/чтения шрифта в/из реестра
Code: |
uses...Registry;
procedure SaveFontToRegistry(Font: TFont; SubKey: string); var R: TRegistry; FontStyleInt: byte; FS: TFontStyles; begin R := TRegistry.Create; try FS := Font.Style; Move(FS, FontStyleInt, 1); R.OpenKey(SubKey, True); R.WriteString('Font Name', Font.Name); R.WriteInteger('Color', Font.Color); R.WriteInteger('CharSet', Font.Charset); R.WriteInteger('Size', Font.Size); R.WriteInteger('Style', FontStyleInt); finally R.Free; end; end;
function ReadFontFromRegistry(Font: TFont; SubKey: string): boolean; var R: TRegistry; FontStyleInt: byte; FS: TFontStyles; begin R := TRegistry.Create; try result := R.OpenKey(SubKey, false); if not result then exit; Font.Name := R.ReadString('Font Name'); Font.Color := R.ReadInteger('Color'); Font.Charset := R.ReadInteger('CharSet'); Font.Size := R.ReadInteger('Size'); FontStyleInt := R.ReadInteger('Style'); Move(FontStyleInt, FS, 1); Font.Style := FS; finally R.Free; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin if FontDialog1.Execute then begin SaveFontToRegistry(FontDialog1.Font, 'Delphi Kingdom\Fonts'); end; end;
procedure TForm1.Button2Click(Sender: TObject); var NFont: TFont; begin NFont := TFont.Create; if ReadFontFromRegistry(NFont, 'Delphi Kingdom\Fonts') then begin //здесь добавить проверку - существует ли шрифт Label1.Font.Assign(NFont); NFont.Free; end; end; |
- << Назад
- Вперёд
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!