Ресурсы в Lazarus

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ресурсы в Lazarus

Сообщение sn-102 » 24.08.2016 12:05:38

Уважаемые знатоки, начал осваивать Lazarus (ОС Windows, раньше работал с Delphi) и упёрся в очень трудную для моего понимания проблему. Возможно решение очень простое, но не могу его никак понять. Прочитал кучу всего, но нигде упоминаний данной проблемы не нашел.
Задача: добавить в проект файл ресурсов с 4 bmp файлами и затем использовать эти изображения в режиме RunTime.
Проблема: при попытке загрузки ресурса в TBitmap ошибка типа "ресурс ХХХ не найден".
Подключал файл ресурсов в формате RES, собранный через brcc32.exe и подключал ресурсы непосредственно через RC файл - при распаковке EXE через 7-zip все картинки нормально работали (то есть в EXE файле присутствовали). При добавлении к распакованным изображениям расширения (*.bmp) они нормально открывались. Изображения сохранены как 24 разрядные BMP файлы.

Код весьма примитивен (тестовая программа):

program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, Unit1;
{ you can add units after this }
{$R *.res}
begin
RequireDerivedFormResource:=True;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
CanvasBttn, Windows;
type
{ TForm1 }
TForm1 = class(TForm)
CanvasBttn1: TCanvasBttn;
Image1: TImage;
Image2: TImage;
procedure CanvasBttn1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
uses comobj;
{$R *.lfm} {$R lib\MsgIcons.rc}
procedure TForm1.CanvasBttn1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile('123.bmp');
Image2.Picture.Bitmap.LoadFromResourceName(hInstance, 'INFOPICT');
showmessage('!');
end;
end.

На форме кнопка и 2 Image. Загрузка из файла работает, а из ресурса нет.
sn-102
новенький
 
Сообщения: 16
Зарегистрирован: 24.08.2016 11:02:13

Re: Ресурсы в Lazarus

Сообщение ssadragon » 24.08.2016 13:36:41

Вбив в Гугле "ресурсы lazarus" сразу первая ссылка http://wiki.freepascal.org/Lazarus_Resources/ru
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: Ресурсы в Lazarus

Сообщение sn-102 » 24.08.2016 13:50:42

Я эту статью несколько раз перечитал. Я же написал, что ресурсы упаковываются, но не распаковываются. И через стримы пробовал, и как в примере выше - ничего не выходит. Ещё вариант ошибки, который он выдавал - это формат bmp не правильный (если запаковывал файл ресурсов через brcc32, а тип выбирал RCDATA).
sn-102
новенький
 
Сообщения: 16
Зарегистрирован: 24.08.2016 11:02:13

Re: Ресурсы в Lazarus

Сообщение pupsik » 24.08.2016 14:02:51

Я эту статью несколько раз перечитал.
плохо читали однако: LResources где???
К тому же используйте стандартный создатель ресурсов (из tools вроде как).
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Ресурсы в Lazarus

Сообщение sn-102 » 24.08.2016 14:11:20

pupsik писал(а):плохо читали однако: LResources где???
К тому же используйте стандартный создатель ресурсов (из tools вроде как)

Хорошо: LResources нужен, как я понял, только при подключении "старого" типа файла ресурсов LRS (я и его подключать пробовал - компилил так - "...toolslazres.exe MsgIcons.lrs InfoPict.bmp WarningPict.bmp ErrorPict.bmp QuestionPict.bmp", но мне было интересно подключить RES файл либо RC). Ещё раз повторюсь - изображения в EXE присутствуют, проверено через 7-zip.

Добавлено спустя 15 минут 43 секунды:
Файл ресурсов LRS работает нормально. Ресурсы упаковываются и распаковываются.
Вопрос актуален для файлов RES и RC (как в примере).
sn-102
новенький
 
Сообщения: 16
Зарегистрирован: 24.08.2016 11:02:13

Re: Ресурсы в Lazarus

Сообщение ssadragon » 24.08.2016 14:28:26

sn-102 писал(а):я и его подключать пробовал - компилил так - "...toolslazres.exe MsgIcons.lrs InfoPict.bmp WarningPict.bmp ErrorPict.bmp QuestionPict.bmp"

Ну создали вы MsgIcons.lrs.
Теперь подключайте в секции initialization и используйте (маленько поменял ваш код)
Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
CanvasBttn, Windows;
type
{ TForm1 }
TForm1 = class(TForm)
CanvasBttn1: TCanvasBttn;
Image1: TImage;
Image2: TImage;
procedure CanvasBttn1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
uses comobj;
{$R *.lfm} {$R libMsgIcons.rc}
procedure TForm1.CanvasBttn1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile('123.bmp');
Image2.Picture.Bitmap.LoadFromLazarusResource('INFOPICT');                                //ПОМЕНЯЛ ТУТ
showmessage('!');
end;
initialization
{$I MsgIcons.lrs}                                                                 // И ТУТ
end.



sn-102 писал(а):но мне было интересно подключить RES файл либо RC

Может какие-то условия не выполнены. По ссылке которую я давал, этих условий много
Например:
FPC запускает внешний компилятор (windres или GoRC). Поэтому, компилятор ресурсов должен быть установлен и в переменной окружения PATH, должен быть прописан путь к нему.


Добавлено спустя 1 минуту 32 секунды:
sn-102 писал(а):Файл ресурсов LRS работает нормально. Ресурсы упаковываются и распаковываются.
Вопрос актуален для файлов RES и RC (как в примере).

Блин пока писал. Тут уже новая инфа появилась.
Кстати я тоже как-то бился с этими ресурсами и плюнул, остановился на LRS файлах
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: Ресурсы в Lazarus

Сообщение sn-102 » 24.08.2016 14:45:02

Так в том и прикол, что RES запаковывается, а RC файл тоже компилится и запаковывается - 7-zip распаковывает все изображения из EXE как часы. Причём, когда я делаю ошибки в подключенном RC файле - компилятор ругается на него и говорит, что исправить. Из этого я делаю логичный вывод, что компилятор RC работает как надо и все пути прописаны нормально. Хотелось бы разобраться в тонкостях подключения этих файлов, а то уже привык к RES, да и заявлено, что они работают. RC файлы, откровенно говоря, меня мало заботят, т.к. с готовыми пакетами удобнее работать.
sn-102
новенький
 
Сообщения: 16
Зарегистрирован: 24.08.2016 11:02:13

Re: Ресурсы в Lazarus

Сообщение v-t-l » 24.08.2016 19:05:13

RES - это же не наш метод!
RES - токмо для винды, LRS - кроссплатформенно.
v-t-l
энтузиаст
 
Сообщения: 727
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Ресурсы в Lazarus

Сообщение sn-102 » 24.08.2016 22:45:56

v-t-l писал(а):RES - это же не наш метод!
RES - токмо для винды, LRS - кроссплатформенно.

Мне для винды и надо. Я, конечно, не против LRS файлов, но сам факт. Если заявлено, должно работать! :)
Я несколько дней честно пытался понять как RES файл присовокупить, прочитал всё что нашел в гугле на эту тему, но только на грабли наступал. То ему формат не нравится, то вообще не находит ресурс. Жаль потраченного времени. Да и другим, осваивающим Лазаря, полагаю, будет это полезно, может не будут тратить время впустую, а получат грамотный совет от опытного пользователя.
Интересно найдётся тут тот у кого RES файлы нормально работают? Может дело в версии винды или её обновления...
sn-102
новенький
 
Сообщения: 16
Зарегистрирован: 24.08.2016 11:02:13

Re: Ресурсы в Lazarus

Сообщение pupsik » 25.08.2016 11:26:54

Интересно найдётся тут тот у кого RES файлы нормально работают?
а хто его знает :)
И чем вам дефолт лазаря не угодил???
У вас нет необходимых прав для просмотра вложений в этом сообщении.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Ресурсы в Lazarus

Сообщение sn-102 » 25.08.2016 14:17:30

Большое спасибо за пример. Как оказалось, дело в моём файле ресурсов.
Скажите, в каком формате были сохранены у вас файлы изображений, чем упаковывали ресурсы и с какими параметрами?
sn-102
новенький
 
Сообщения: 16
Зарегистрирован: 24.08.2016 11:02:13

Re: Ресурсы в Lazarus

Сообщение pupsik » 25.08.2016 16:00:50

sn-102 не поверите... Стандартным редактором из 7-го дельфина.
Формат фоток... А вы их не узнали :))))) Эт дефолтовские дельфиновские фотки. Они, кажись, во всех версия дельфина есть.
Параметры... Учитывая что это не консоль.... "подогнал" размер и флаг поменял.

Да забудьте вы этот res. Используйте дефолт лазаря.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Ресурсы в Lazarus

Сообщение sn-102 » 25.08.2016 16:17:02

pupsik писал(а):Формат фоток... А вы их не узнали )))) Эт дефолтовские дельфиновские фотки. Они, кажись, во всех версия дельфина есть.

Не узнал, потому что никогда ими не пользовался и не натыкался на них даже.
pupsik писал(а):Да забудьте вы этот res. Используйте дефолт лазаря.

Это конечно наверно правильно, но, тем не менее, интересно разобраться. Я паковал ресурс brcc32.exe оттуда же, в файле RC формат указал RCDATA. Подгружаю свой файл - не работает, ваш работает нормально. Просто волшебство, да и только.
sn-102
новенький
 
Сообщения: 16
Зарегистрирован: 24.08.2016 11:02:13

Re: Ресурсы в Lazarus

Сообщение pupsik » 25.08.2016 16:28:11

Не в том волшебство.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Ресурсы в Lazarus

Сообщение sn-102 » 25.08.2016 16:56:46

pupsik писал(а):Не в том волшебство.

Ну так приоткройте завесу тайны.
sn-102
новенький
 
Сообщения: 16
Зарегистрирован: 24.08.2016 11:02:13

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 28

Рейтинг@Mail.ru