Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Сохранить шрифт в реестр или в поток

Delphi , Графика и Игры , Шрифты

Сохранить шрифт в реестр или в поток

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

type
   FontRec = packed record
     Color: TColor;
     LogFont: TLogFont;
   end;

 // Save a font to the registry 
// Eine Schrift in die Registry speichern 
procedure SaveFontToReg(reg: TRegistry; const key, id: string; Font: TFont);
 var
   fRec: FontRec;
 begin
   if Windows.GetObject(Font.Handle, SizeOf(fRec.LogFont), @fRec.LogFont) > 0 then
   begin
     if reg.OpenKey(key, True) then
       try
         fRec.Color := Font.Color;
         reg.WriteBinaryData(id, fRec, SizeOf(fRec));
       finally
         reg.CloseKey;
       end;
   end;
 end;

 // Load a font from the registry 
// Eine Schrift von der Registry laden 
procedure LoadFont(reg: TRegistry; const key, id: string; Font: TFont);
 var
   fRec: FontRec;
 begin
   if reg.OpenKey(key, False) then
     try
       if reg.ReadBinaryData(id, frec, SizeOf(fRec)) = SizeOf(fRec) then
         Font.Handle := CreateFontIndirect(fRec.LogFont);
       Font.Color := fRec.Color;
     finally
       reg.CloseKey;
     end;
 end;

 // Save a font to a stream 
// Eine Schrift in einen Stream speichern 
procedure WriteFontToStream(s: TStream; Font: TFont);
 var
   fRec: FontRec;
   sz: integer;
 begin
   sz := SizeOf(fRec.LogFont);
   if Windows.GetObject(Font.Handle, sz, @fRec.LogFont) > 0 then
   begin
     s.Write(sz, SizeOf(Integer));
     fRec.Color := Font.Color;
     s.Write(fRec, SizeOf(fRec));
   end
   else
   begin
     sz := 0;
     s.Write(sz, SizeOf(Integer));
   end;
 end;

 // Read a font from a stream 
// Eine Schrift von einem Stream laden 
procedure ReadFont(s: TStream; Font: TFont);
 var
   fRec: FontRec;
   sz: integer;
 begin
   s.read(sz, SizeOf(Integer));
   if sz = SizeOf(fRec.LogFont) then
   begin
     s.read(fRec, SizeOf(fRec));
     Font.Handle := CreateFontIndirect(fRec.LogFont);
     Font.Color  := fRec.Color;
   end;
 end;

Программный код на Delphi, который обеспечивает методы для сохранения и загрузки шрифтов в реестре или потоке.

SaveFontToReg

Процедура SaveFontToReg сохраняет шрифт в реестре. Она принимает четыре параметра:

  • reg: экземпляр класса TRegistry, представляющий ключ реестра, где будет сохранен шрифт.
  • key: строка, которая указывает на ключ реестра, где будет сохранен шрифт (например, "Software\MyApp\Fonts").
  • id: строка, которая идентифицирует шрифт в реестре.
  • Font: экземпляр класса TFont, представляющий шрифт для сохранения.

Процедура сначала проверяет, можно ли получить handle шрифта с помощью Windows.GetObject. Если это успешно, она открывает указанный ключ реестра и записывает информацию о цвете и логическом формате шрифта в реестр с помощью reg.WriteBinaryData.

LoadFont

Процедура LoadFont загружает шрифт из реестра. Она принимает четыре параметра:

  • reg: экземпляр класса TRegistry, представляющий ключ реестра, где хранится шрифт.
  • key: строка, которая указывает на ключ реестра, где хранится шрифт (например, "Software\MyApp\Fonts").
  • id: строка, которая идентифицирует шрифт в реестре.
  • Font: экземпляр класса TFont, который будет получать информацию о загруженном шрифте.

Процедура сначала открывает указанный ключ реестра и читает информацию о цвете и логическом формате шрифта с помощью reg.ReadBinaryData. Если это успешно, она устанавливает handle шрифта в загруженный логический формат с помощью CreateFontIndirect и устанавливает цвет шрифта в загруженное значение.

WriteFontToStream

Процедура WriteFontToStream записывает шрифт в поток. Она принимает два параметра:

  • s: экземпляр класса TStream, представляющий выходной поток, где будет записан шрифт.
  • Font: экземпляр класса TFont, представляющий шрифт для записи.

Процедура сначала проверяет, можно ли получить handle шрифта с помощью Windows.GetObject. Если это успешно, она записывает информацию о цвете и логическом формате шрифта в поток с помощью s.Write.

ReadFont

Процедура ReadFont читает шрифт из потока. Она принимает два параметра:

  • s: экземпляр класса TStream, представляющий входной поток, где хранится шрифт.
  • Font: экземпляр класса TFont, который будет получать информацию о загруженном шрифте.

Процедура сначала читает размер логического формата из потока с помощью s.Read. Если это успешно, она читает логический формат и информацию о цвете из потока с помощью s.Read и устанавливает handle шрифта в загруженный логический формат с помощью CreateFontIndirect.

Замечания

  • Код использует компонент TRegistry для взаимодействия с реестром.
  • Код предполагает, что шрифт хранится в бинарном формате, который записывается и читается с помощью WriteBinaryData и ReadBinaryData.
  • Код не обрабатывает ошибки или исключения, поэтому рекомендуется добавить механизмы обработки ошибок при использовании этих процедур.

Данная статья описывает функции для сохранения и чтения шрифтов в реестре Windows или потоке, написанные на языке Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Шрифты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:16:45/0.0033779144287109/0