Как Delphi использует файлы ресурсов

От растровых изображений до значков, курсоров и таблиц строк, каждая программа Windows использует ресурсы. Ресурсы это те элементы программы, которые поддерживают программу, но не являются исполняемым кодом. В этой статье мы рассмотрим некоторые примеры использования растровых изображений, значков и курсоров из ресурсов.

Расположение ресурсов

Размещение ресурсов в файле .exe имеет два основных преимущества:

  • Доступ к ресурсам можно получить быстрее, поскольку для поиска ресурса в исполняемом файле требуется меньше времени, чем для его загрузки из файла на диске.
  • Программный файл и ресурсы могут содержаться в одном блоке (файл .exe) без необходимости большого количества вспомогательных файлов.

Редактор изображений

Прежде всего, нам нужно создать файл ресурсов. Расширение по умолчанию для файлов ресурсов.RES. Файлы ресурсов могут быть созданы с помощью редактора изображений Delphi.

Вы можете назвать файл ресурса как угодно, если он имеет расширение «.RES», а имя файла без расширения не совпадает с именем файла какого-либо модуля или проекта. Это важно, потому что по умолчанию каждый

instagram viewer
Проект Delphi который компилируется в приложение, имеет файл ресурсов с тем же именем, что и файл проекта, но с расширением «.RES». Лучше всего сохранить файл в том же каталоге, что и файл вашего проекта.

Включение ресурсов в приложения

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

{$ R * .DFM} 
{$ R DPABOUT.RES}

Не удаляйте случайно часть {$ R * .DFM}, так как это строка кода, которая указывает Delphi ссылаться в визуальной части формы. Когда вы выбираете растровые изображения для кнопок скорости, компонентов изображений или компонентов кнопок, Delphi включает выбранный вами файл растрового изображения как часть ресурса формы. Delphi изолирует элементы вашего пользовательского интерфейса в файле .DFM.

Чтобы реально использовать ресурс, нужно сделать несколько Windows API звонки. Растровые изображения, курсоры и значки, хранящиеся в файлах RES, можно получить с помощью функций API. LoadBitmap, LoadCursor, и LoadIcon соответственно.

Картинки в ресурсах

В первом примере показано, как загрузить растровое изображение, хранящееся в качестве ресурса, и отобразить его в виде TImage компонент.

процедура TfrMain.btnCanvasPic (Отправитель: TObject);
вар bBitmap: TBitmap;
начать
bBitmap: = TBitmap. Создайте;
пытаться
bBitmap. Дескриптор: = LoadBitmap (hInstance, 'ATHENA');
Image1.Width: = bBitmap. Ширина;
Image1.Height: = bBitmap. Высота;
Image1.Canvas. Draw (0,0, bBitmap);
наконец
bBitmap. Свободно;
конец;
конец;

Примечание. Если растровое изображение, которое должно быть загружено, отсутствует в файле ресурсов, программа все равно будет работать, просто не отобразит растровое изображение. Этой ситуации можно избежать, протестировав bBitmap. Ручка ноль после звонка LoadBitmap () и предпринимать соответствующие шаги. попробовать / наконец часть в предыдущем коде не решает эту проблему, это просто для того, чтобы убедиться, что bBitmap уничтожен, а связанная с ним память освобождена.

Другой способ, который мы можем использовать для отображения растрового изображения из ресурса:

процедура TfrMain.btnLoadPicClick (Отправитель: TObject);
начать
Image1.Picture. Битовая карта.
LoadFromResourceName (hInstance, 'EARTH');
конец;

Курсоры в ресурсах

Экран. Курсоры [] является массив курсоров, поставляемых Delphi. Используя файлы ресурсов, мы можем добавлять собственные курсоры в свойство Cursors. Если мы не хотим заменить какие-либо значения по умолчанию, лучшая стратегия состоит в том, чтобы использовать номера курсора, начиная с 1.

процедура TfrMain.btnUseCursorClick (Отправитель: TObject);
Const NewCursor = 1;
начать
Экран. Курсоры [NewCursor]: =
LoadCursor (hInstance, 'CURHAND');
Image1.Cursor: = NewCursor;
конец;

Иконки в ресурсах

Если мы посмотрим на Дельфи Проект-Options-приложения Настройки, мы можем обнаружить, что Delphi предоставляет значок по умолчанию для проекта. Этот значок представляет приложение в проводнике Windows и когда оно свернуто. Мы можем легко изменить это, нажав кнопку «Загрузить значок».

Если мы хотим, например, анимировать значок программы, когда программа свернута, то следующий код сделает эту работу.

Для анимации нам нужен TTimer компонент на форме. Код загружает две иконки из файла ресурсов в массив TIcon объекты; этот массив должен быть объявлен в публичной части главной формы. Нам также понадобится NrIcoэто целочисленный тип переменнаязаявлено в общественности часть. NrIco используется для отслеживания следующего значка для отображения.

общественности
nrIco: целое число;
MinIcon: массив [0..1] TIcon;
...
процедура TfrMain. FormCreate (Отправитель: TObject);
начать
Minicon [0]: = Ticon. Создайте;
Minicon [1]: = Ticon. Создайте;
MinIcon [0] .Handle: = LoadIcon (hInstance, 'ICOOK');
MinIcon [1] .Handle: = LoadIcon (hInstance, 'ICOFOLD');
NrIco: = 0;
Timer1.Interval: = 200;
конец;
...
процедура TfrMain. Timer1Timer (Отправитель: TObject);
beginif IsIconic (Приложение. Ручка) тогданачать
NrIco: = (NrIco + 1) модификация 2;
Заявка. Icon: = Minicon [NrIco];
конец;
конец;
...
процедура TfrMain. FormDestroy (Отправитель: TObject);
начать
Minicon [0] .Free;
Minicon [1] .Free;
конец;

в Timer1.OnTimer обработчик события, IsMinimized Функция используется, чтобы увидеть, нужно ли нам анимировать наш главный значок или нет. Лучшим способом сделать это было бы захватить кнопки максимизации / минимизации, а не действовать.

Заключительные слова

Мы можем поместить что угодно (ну, не все) в файлы ресурсов. В этой статье показано, как использовать ресурсы для использования / отображения растрового изображения, курсора или значка в приложении Delphi.

Примечание. Когда мы сохраняем проект Delphi на диск, Delphi автоматически создает один файл .RES с тем же именем, что и проект (если ничего больше, главный значок проекта находится внутри). Хотя мы можем изменить этот файл ресурсов, это не рекомендуется.

instagram story viewer