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);
ifnot 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);
beginif FontDialog1.Execute then
SaveFontToRegistry(FontDialog1.Font, 'Delphi Kingdom\Fonts');
end;
procedure TForm1.Button2Click(Sender: TObject);
var
NFont : TFont;
begin
NFont:=TFont.Create;
if ReadFontFromRegistry(NFont,'Delphi Kingdom\Fonts') thenbegin//здесь добавить проверку - существует ли шрифт
Label1.Font.Assign(NFont);
NFont.Free;
end;
end;
Программный код, предназначенный для сохранения и загрузки настроек шрифта из реестра Windows с помощью Delphi.
SaveFontToRegistry
Процедура сохраняет информацию о шрифте в реестре под указанной подпапкой.
1. Создает объект TRegistry, используемый для взаимодействия с реестром.
2. Извлекает стиль (жирный, курсив и т.д.) из предоставленного шрифта и конвертирует его в байтовое значение с помощью функции Move.
3. Открывает указанную подпапку в реестре, если она не существует, а затем записывает следующие свойства шрифта:
* Имя шрифта
* Цвет
* Кодировка
* Размер
* Стиль (конвертированный байтовое значение)
4. Наконец, освобождает объект реестра.
ReadFontFromRegistry
Функция читает информацию о шрифте из реестра под указанной подпапкой и присваивает ее предоставленному шрифту.
1. Создает объект TRegistry и открывает указанную подпапку, если она существует.
2. Если подпапка не существует, функция выходит из себя.
3. Читает следующие свойства шрифта из реестра:
* Имя шрифта
* Цвет
* Кодировка
* Размер
* Стиль (конвертирует байтовое значение обратно в TFontStyles с помощью функции Move)
4. Наконец, присваивает эти значения предоставленному шрифту и освобождает объект реестра.
Button1Click
Процедура вызывается при клике кнопки Button1. Она запускает диалог FontDialog, позволяя пользователю выбрать шрифт. Если пользователь выбирает шрифт, она сохраняет настроенные параметры шрифта в реестре под указанной подпапкой с помощью SaveFontToRegistry.
Button2Click
Процедура вызывается при клике кнопки Button2. Она читает настройки шрифта из реестра под указанной подпапкой с помощью ReadFontFromRegistry. Если настройки шрифта найдены и успешно прочитаны, она присваивает эти настройки новому шрифту (NFont) и затем присваивает этот шрифт свойству Font у Label1.
Возможные улучшения
1. Обработка ошибок: код не обрабатывает потенциальные ошибки, которые могут возникнуть при взаимодействии с реестром или загрузке/сохранении шрифтов.
2. Валидация: рекомендуется валидировать ввод пользователя, например, проверять, был ли успешно выбран шрифт в Button1Click.
3. Организация кода: процедуры можно организовать в отдельных модулях или единицах для улучшения поддержки и повторного использования кода.
Альтернативное решение
Вместо использования реестра вы можете рассмотреть хранение настроек шрифта в конфигурационном файле (например, INI или XML) для более высокой гибкости и удобства обслуживания.
В статье описана процедура сохранения и чтения объекта TFont в реестре Windows, а также пример использования этих процедур в приложении на языке Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.