С Новым годом! Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 51

Как загрузить картинку из файла ресурсов

06.03.2025, 07:34. Показов 2586. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Недавно стала знакомиться с ресурсами в Lazarus.
Проблема такая: не могу загрузить картинку из файла ресурсов.
Через командную строку был создан файл ресурсов в виде:
Windows Batch file
1
lazres myres.lrs C:\pp\4.jpg C:\pp\3.jpg C:pp\2.jpg C:\pp\1.jpg
В результате получили:
Code
1
2
3
4
C:\4.jpg ResourceName='4' Type='JPG'
C:\3.jpg ResourceName='3' Type='JPG'
C:\2.jpg ResourceName='2' Type='JPG'
C:\1.jpg ResourceName='1' Type='JPG'
Теперь в программе
добавлен ресурсы в uses
Pascal
1
2
3
4
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, lResources;  
// и в раздел implementation
 {$I myres.lrs}
В обработчике событий при нажатии на кнопку есть обращение
Pascal
1
2
3
4
image1.Picture.LoadFromLazarusResource('1');
   image2.Picture.LoadFromLazarusResource('2');
    image3.Picture.LoadFromLazarusResource('3');
     image4.Picture.LoadFromLazarusResource('4');
При этом выходит синтаксическая ошибка

Подскажите, пожалуйста, что неверно делаю?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.03.2025, 07:34
Ответы с готовыми решениями:

Как загрузить картинку из файла в созданный в коде TImage?
unit Umain; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, ...

Как загрузить текстовый файл Unicode в Delphi?
Помогите пожалуйста! Мне нужно загружать текстовые файлы в Delphi. Проблема в том, что файлы идут в кодировке Unicode. В кодировке ANSI...

Как загрузить на форму файл формата .3ds (Delphi)?
Как загрузить на форму файл формата .3ds (Delphi)?

14
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,358
Записей в блоге: 3
06.03.2025, 09:04
Цитата Сообщение от lebtan Посмотреть сообщение
и в раздел implementation
{$I myres.lrs}
Наверное, Вы невнимательно прочитали инструкцию: подключение своего файла ресурсов надо прописывать не в разделе implementation, а в разделе initialization.
По умолчанию, такого раздела в автоматически созданном модуле нет. Просто прописываете его руками - и всего делов.



Ну, и, вдобавок, данный метод работы с ресурсами - он, как бы устарел, что также написано в инструкции.
1
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 51
06.03.2025, 10:45  [ТС]
Спасибо за ответ!
Но выдается ошибка, что файл с ресурсами не найден.
Прикладываю свой файл
Вложения
Тип файла: rar PP.rar (4.99 Мб, 4 просмотров)
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,358
Записей в блоге: 3
06.03.2025, 10:54
lebtan, и что не так? Распаковал папку с Вашим проектом (кстати, никогда не упаковывайте ехе-файл туда!!!), открыл проект в Лазарусе, запустил...



ЧЯДН?

Вот 2-й и 3-й ресурсы для чистоты эксперимента
Миниатюры
Как загрузить картинку из файла ресурсов   Как загрузить картинку из файла ресурсов  
1
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 51
06.03.2025, 11:09  [ТС]
Да, спасибо!
Скорее всего, использование нескольких методов создания файла ресурса привело к тому, что произошла перезапись его файла. Все получилось.
Еще раз спасибо.

Вопрос: можно ли было использовать Инспектор проекта? Как тогда можно было бы обращаться к файлам? Данный вопрос возник потому, что не хочется таскать за собой папку с файлами-картинками. Поэтому подумала, что можно работать с ресурсами
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,358
Записей в блоге: 3
06.03.2025, 11:15
Цитата Сообщение от lebtan Посмотреть сообщение
не хочется таскать за собой папку с файлами-картинками.
Вам и не надо ее таскать: Ваши картинки загружаются в один ресурсный файл, который при компиляции "встраивается внутрь" полученного ехе-файла. И теперь для загрузки картинки в компонент Image используется на файл на диске, а последовательность байт в памяти.
0
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 51
06.03.2025, 11:22  [ТС]
Да, это желание было изначально. В связи с этим, стала делать файл ресурсов.
Хотелось бы получить ответ, связанный с Инспектором проектов.
0
 Аватар для DoNVen
14 / 12 / 2
Регистрация: 30.10.2024
Сообщений: 68
06.03.2025, 11:22
Цитата Сообщение от lebtan Посмотреть сообщение
не хочется таскать за собой папку с файлами-картинками
Я для хранения фоток часто использую TImageList. В него загружаю изображения и затем использую в программе. Папки с файлами таскать с собой так же не надо.
https://wiki.lazarus.freepascal.org/TImageList
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
06.03.2025, 12:29
Цитата Сообщение от lebtan Посмотреть сообщение
можно ли было использовать Инспектор проекта?
Не Инспектор, а Параметры проекта. Там есть вкладка "Ресурсы", куда можно подгрузить нужные файлы. Обращаться к ним потом - через LoadFromResourceName. Скажем, картинку подгрузить можно так:
Pascal
1
2
3
4
procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Picture.LoadFromResourceName(HINSTANCE, 'BOX_IN');
end;
4
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 51
06.03.2025, 19:24  [ТС]
Добрый вечер,
можете ли подсказать, почему при запуске программы выходит ошибка?
Все файлы помещены в ресурсы, используя Параметры проекта.
Вложения
Тип файла: 7z Игра2.7z (10.88 Мб, 8 просмотров)
0
 Аватар для DoNVen
14 / 12 / 2
Регистрация: 30.10.2024
Сообщений: 68
06.03.2025, 19:34
Цитата Сообщение от lebtan Посмотреть сообщение
Добрый вечер,
можете ли подсказать, почему при запуске программы выходит ошибка?
Все файлы помещены в ресурсы, используя Параметры проекта.
Ругается на строке 90
Pascal
1
image7.Picture.LoadFromResourceName(HINSTANCE, 'Начать');
Предположу, что кирилицу не понимает.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
06.03.2025, 19:42
lebtan, я бы переписал OnCreate формы вот так:

Pascal
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
procedure TForm1.FormCreate(Sender: TObject);
 
  procedure LoadPng(im : TImage; const res : string);
  var png : TPortableNetworkGraphic;
  begin
    png := TPortableNetworkGraphic.Create;
    try
      png.LoadFromResourceName(HINSTANCE, Res);
      Im.Canvas.Draw(0, 0, png);
    finally
      png.Free;
    end;
  end;
 
begin
    // загрузить из ресурса фон
  LoadPng(Image6, 'PRINZ');
  // image6.Picture.LoadFromResourceName(HINSTANCE, 'Prinz');
 
  //кнопка
  image7.BringToFront;
  image7.Visible:=true;
  image7.Stretch:=true;
  LoadPng(Image7, 'START');
  // image7.Picture.LoadFromResourceName(HINSTANCE, 'Начать');
end;
, и поменял бы имя ресурса, которое у тебя на кириллице, на латиницу (ну вот обязательно что-нибудь с кириллицей вылезет не то, а латиница будет работать). В итоге - приложение запускается.

Добавлено через 32 секунды
Цитата Сообщение от DoNVen Посмотреть сообщение
Ругается на строке 90
Оно там еще раньше ругается... Вероятно - опять разные WidgetSet-ы ведут себя по разному.
1
 Аватар для DoNVen
14 / 12 / 2
Регистрация: 30.10.2024
Сообщений: 68
06.03.2025, 19:52
Цитата Сообщение от volvo Посмотреть сообщение
Вероятно - опять разные WidgetSet-ы ведут себя по разному.
Не В этот раз у меня GTK2
Но ведет себя по разному это факт.

Это предоставленный в теме код. Только подправил на
Pascal
1
image7.Picture.LoadFromResourceName(HINSTANCE, 'START');
Кликните здесь для просмотра всего текста


Это с вашим кодом

Кликните здесь для просмотра всего текста
1
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 51
06.03.2025, 20:06  [ТС]
Спасибо!
Подправила код в соответствии с первыми рекомендациями, однако почему-то картинка START оторажается белым, хотя там типа овальной кнопки. Как быть?
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
06.03.2025, 20:10
Чудеса. У меня только что при
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.FormCreate(Sender: TObject);
begin
    // загрузить из ресурса фон
  image6.Picture.LoadFromResourceName(HINSTANCE, 'Prinz');
 
  //кнопка
  image7.Visible:=true;
  image7.BringToFront;
  image7.Picture.LoadFromResourceName(HINSTANCE, 'START');
  image7.Proportional:=true;
  image7.StretchInEnabled:=true;
  image7.StretchOutEnabled:=true;
end;
Загрузило правильную картинку:
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.03.2025, 20:10
Помогаю со студенческими работами здесь

Как загрузить текстовый файл Unicode в Delphi?
Помогите пожалуйста! Мне нужно загружать текстовые файлы в Delphi. Проблема в том, что файлы идут в кодировке Unicode. В кодировке ANSI...

Как заменить файлы (картинки) в архиве?
как заменить файлы (картинки) в zip архиве? Нужно просто заменить картинки на другие и под тем же именем.

Как в поток загрузить картинку из Интернета?
Как в поток (TStream) загрузить картинку из Интернета?

Как загрузить картинку в формате png?
Как загрузить картинку в формате png?И как зделать гиперссылкой?

Как загрузить картинку наImage через код
Пишу Image1.Picture := 'c:\main.bmp' но String с TPicture не дружит. Как можно другим способом загрузить картинку на Image, не...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru