Заблокирован
RAD XE3+

Имя шрифта, подгруженного из ресурса

15.05.2020, 03:45. Показов 4663. Ответов 22

Студворк — интернет-сервис помощи студентам
Возможно ли узнать имя шрифта, подгруженного из ресурса (приватно). Функции для работы с перечислимыми шрифтами в этом случае не работают, хотя сами шрифты прекрасно отображаются.

Название: 001189.png
Просмотров: 286

Размер: 11.0 Кб

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const
  UF_RESOURCE_TYPENAME = 'RT_FONT'; // тип ресурса шрифтов (из RC-файла)
 
// загрузка приватного шрифта из ресурса. Прекрасно работает!
function LoadResourceFont(const ResourceName: string): HFont;
var
  FontsCount : integer;
begin
   var stream:= TResourceStream.Create(hInstance, ResourceName, UF_RESOURCE_TYPENAME);
   try
     result:= AddFontMemResourceEx(stream.Memory, stream.Size, nil, @FontsCount);
   finally
     stream.Free();
   end;
end;
Кто шарит?

модуль:
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
unit uFonts;
 
{$R fonts\fonts.res}
 
interface
 
{$REGION 'Info'}
(* Модуль работы со шрифтами.
   Инфа взята отсюда:
     https://delphisources.ru/forum/showthread.php?t=25264
     https://********************/showthread.php?t=180046
     http://users.atw.hu/delphicikk/listaz.php?id=2128&oldal=38
     http://www.undocprint.org/winspool/getfontresourceinfo
     https://forum.lazarus.freepascal.org/index.php?topic=39124.0 *)
{$ENDREGION}
 
{$REGION 'uses'}
uses
  //============================== Модули проекта ==============================
  //==================== Модули проекта с формами и фреймами ===================
  //=============================== Левые модули ===============================
  //=================== Системные модули, добавленные вручную ==================
  Windows, Messages, Classes, SysUtils, Graphics;
{$ENDREGION}
 
// установка всех шрифтов из секции ресурсов FONT
function InitUserFontResources(const SkipInstalled: Boolean = false): int32;
function GetUserFontData(const hf: HFONT; stream: TCustomMemoryStream): boolean;
 
// глобальные переменные
var
  UserFontNames: TStringList;
 
implementation
 
const
  UF_RESOURCE_TYPENAME = 'RT_FONT'; // тип ресурса шрифтов (из RC-файла)
 
// загрузка приватного шрифта из ресурса. Прекрасно работает!
function LoadResourceFont(const ResourceName: string): HFont;
var
  FontsCount : integer;
begin
   var stream:= TResourceStream.Create(hInstance, ResourceName, UF_RESOURCE_TYPENAME);
   try
     result:= AddFontMemResourceEx(stream.Memory, stream.Size, nil, @FontsCount);
   finally
     stream.Free();
   end;
end;
 
// коллбэк для перечисления EnumResourceNames()
function EnumResNameCallback(hModule: NativeUInt; lpszType: LPCTSTR; lpszName: LPTSTR; lParam: LONG_PTR): boolean; stdcall;
var
  list: TStringList absolute lParam;
begin
  var res_name:= string(lpszName);
  assert(res_name <> '');
 
  var hf:= LoadResourceFont(res_name);
  list.AddObject(Format('%s [0x%.8X]', [res_name, hf]), pointer(hf));
  result:= true;
end;
 
// установка всех шрифтов из секции ресурсов FONT
function InitUserFontResources(const SkipInstalled: Boolean): int32;
begin
  // чтение имён ресурсов-шрифтов
  if not EnumResourceNames(0, UF_RESOURCE_TYPENAME, @EnumResNameCallback, LONG_PTR(UserFontNames))
    then exit(-1);
 
  result:= UserFontNames.Count; // возвращает кол-во добавленных шрифтов
  SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
end;
 
// образ файла шрифта по HFont (не работает со шрифтами, установленными из памяти)
function GetUserFontData(const hf: HFONT; stream: TCustomMemoryStream): boolean;
begin
  var dc:= CreateCompatibleDC(0);
 
  if dc = 0
    then exit(false);
 
  try
    SelectObject(dc, hf);
    var size: int32:= GetFontData(dc, 0, 0, nil, 0); // размер данных
    if size <= 0
      then exit(false);
 
    stream.Size:= size;
    result:= GetFontData(dc, 0, 0, stream.Memory, size) = size;
  finally
    DeleteDC(dc);
  end;
end;
 
initialization
  UserFontNames:= TStringList.Create();
 
finalization
  FreeAndNil(UserFontNames);
 
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.05.2020, 03:45
Ответы с готовыми решениями:

Артефакты прозрачности при отображении TBitmap(подгруженного из png-ресурса) в строчках TPopupMenu.
Всем привет.:) Не очень получается использовать png для изображений в пунктах всплывающего меню. На некоторых появляются артефакты в...

Использование шрифта из ресурса
Можно ли добавить шрифт в ресурс, а после использовать его? Что бы вместо public static Font text_data = new...

Имя ресурса с именем из цикла
Доброго времени суток. Сразу к сути - в ресурсы проекта загружены изображения (pic_0, pic_1, pic_2 ... pic_100). Имеется форма с...

22
0 / 0 / 0
Регистрация: 03.11.2025
Сообщений: 3
07.11.2025, 14:34
Студворк — интернет-сервис помощи студентам
Понятно. Ну может кому то пригодится. Насчет x64, у меня Win10 x64 работает нормально, компилятор D7,
на паскале с памятью работать не очень удобно на ассемблере проще, и работает быстрее.
0
21 / 17 / 2
Регистрация: 08.06.2012
Сообщений: 124
08.11.2025, 19:20
Цитата Сообщение от Oleg777333 Посмотреть сообщение
Насчет x64
он не про разрядность винды, а программы
0
Заблокирован
08.11.2025, 19:51  [ТС]
Цитата Сообщение от robt Посмотреть сообщение
он не про разрядность винды, а программы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.11.2025, 19:51
Помогаю со студенческими работами здесь

Как вытащить сетевое имя ресурса?
Здравствуйте! Если кто знает, скажите, п-та, как узнать, является какой-либо ресурс моего компьютера (папака, файл и т.п.) общим и,...

Изменить имя ресурса во время выполнения программы
Доброго времени суток. допустим есть вот такая вещь : rsc = R.drawable.name1; Bitmap bMap=...

Ошибка. Имя ресурса не может использоваться несколько раз
при компиляции программы в VS на языке vb.net в процессе сборки появляется ошибка: Имя ресурса (НАЗВАНИЕ РЕСУРСА) не может использоваться...

Получить имя ресурса на котором был произведен клик
Допустим есть картинка с названием 1.jpg. Я кbдаю ее в drawable и получается ее адрес R.drawable.1 Как сделать, когда я размещу ее на...

Узнать имя шрифта
Вечер добрый, помогите решить задачу. Есть папка с неустановленными шрифтами, как узнать имя шрифта(не название файла)?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Опции темы

Новые блоги и статьи
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru