Форум программистов, компьютерный форум, киберфорум
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Нарушитель
10225 / 5655 / 1257
Регистрация: 12.03.2015
Сообщений: 26,181
RAD XE3+

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

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

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

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

Размер: 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
20 / 16 / 2
Регистрация: 08.06.2012
Сообщений: 121
08.11.2025, 19:20
Цитата Сообщение от Oleg777333 Посмотреть сообщение
Насчет x64
он не про разрядность винды, а программы
0
Нарушитель
10225 / 5655 / 1257
Регистрация: 12.03.2015
Сообщений: 26,181
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
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru