Как сохранить в делфи exe файл

Обновлено: 04.07.2024

Ресурс - это любой файл который может находится внутри исполняемого файла (.ехе), его можно извлекать в память программы и работать с ним, а можно и вовсе извлечь его на диск (например чтобы предотвратить их случайное удаление пользователем, либо, чтобы защитить их от изменений). Данная статья показывает как вшить любой файл как ресурс в EXE-шнике.

Далее рассмотрим, как создать файл ресурсов, содержащий копию какого-либо файла. После создания такого файла его можно легко прицепить к Вашему проекту директивой .

Файлом ресурсов будет вот эта картинка:

Итак для того чтобы создать ресурс нам нужен текстовый файл с указаниями для компилятора ресурсов. Создадим папку и положим туда картинку и там создадим текстовый файл вот с таким содержимым:

IMAGE BITMAP logo.bmp

Теперь поясним что эта запись значит:

Первое слово - имя ресурса, второе - тип ресурса, третье - путь к файлу. Т.е. синтаксис будет таким: [Имя] [Тип] [Путь].

После редактирования сохраним наш файл по названием Res.rc, далее положим в эту же папку сам компилятор ресурсор, он лежит в папке Delphi\bin\brcc32.exe, и просто перетаскиваем файл Res.rc на brcc32.exe. После это должен появится файл Res.RES, это и есть наш готовый ресурс, хранящий в себе картинку. Если этого не произошло то можно обойтись другим способом:

Создать ТХТ-файл, написать в него: brcc32.exe Res.rc, переименовать файл в 1.bat и запустить его, должно сработать.

Все ресурс создан, теперь его надо подключить в наш EXE-шник. Делается это так:

После ключевого слова implementation пишется строка это говорит компилятору Delphi о том что надо включить в ехе-файл наш ресурс, его необходимо положить вместе с файлом проекта. После компиляции он больше не нужен.

Далее выташим на форму компонент Image и кнопку, на ней обработчик события OnClick: Компилируем и вот:

Загруженная картинка

Все работает, но только для файлов .bmp, о том как работать с другими файлами в следуйшем уроке.


Так как с этого и следует начинать работу над новым проектом, то создай­те для него на диске отдельную папку. Затем нажмите кнопку 0* - аналог команды File > Save all (быстрые клавиши - Shift + Ctrl + S ) на стандарт­ной панели и в открывшемся диалоговом окне перейдите в эту папку.

Новую папку можно создать и непосредственно из диалогового ок­на, воспользовавшись услугами кнопки L

Вместо названия модуля по умолчанию Unitl выберите более подходящее, например MyUnit , и сохраните его на диске. Тут же проделайте эту опера­цию и файлом проекта (назовём его MyProject ).

Менеджер проекта также облегчает работу с файлами проекта. Например, после нажатия правой кнопки мыши на строчке Unitl . pas , на экране по­явится контекстное меню

Delphi XE

В нём вы можете сохранить файл модуля на диске (команды Save или Save As . ), переименовать его ( Rename ) и удалить из проекта ( Remove From Project ).

Имейте в виду, что Delphi не позволяет присваивать имя проекта файлу модуля, хотя они и имеют разные расширения.

Любой проект на Delphi включает в себя довольно много файлов. Чтобы они не перемешались с другими файлами, их нужно сохра­нять в отдельной папке, желательно в корневом каталоге диска и под «прозрачным» названием, иначе потом вам придётся долго ис­кать её среди прочих папок с ничего не значащими именами типа «абвгд» или «ёклмн». Можно предварить название папки симво­лом подчёркивания «_», тогда она будет находиться в начале спис­ка папок на диске.

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

Переключаться между окнами Редокторо кода и Конструктора формы удобно с помощью кнопки на Панели инструментов.

Выбрать любой модуль проекта для отображения в окне Редакто­ра кода можно из списка, который появляется после нажатия на кнопку Для перехода с одной страницы на другую в Редакторе кода достаточно щёлкнуть мышкой на табуляторе с названием мо­дуля.

После того как вы сохранили файлы проекта под другими именами, они будут обновлены и в заголовках Главного окна и окна Редактора кода. А заголовок формы отражает значение её свойства Caption, которое можно установить в Инспекторе объектов. Обычно это название программы и номер её версии. Само же название формы задаётся свойством Nameв том же Инспекторе объектов. Если значение свойства Caption не установлено, то именно название формы и появится в её заголовке.

После набора очередной порции кода, сохраняйте его текущее со­стояние в файле. Для этого нажмите кнопку У-, если вы хотите за­писать все открытые файлы проекта, или кнопку О, если измене­ния коснулись только отдельного модуля.

Никогда не набирайте текст программы подолгу, минут через 5-10 сохраняйте изменения на диске! Особенно важно сохранять ре­зультаты работы перед отладочным запуском программы из среды разработки. Программа вполне может зависнуть, и всё, что нажито непосильным трудом, придётся набирать ещё раз.

При большом риске зависания программы её лучше скомпилировать одной из команд меню Project m потом запустить из Проводника или файлового менеджера выпол¬няемый файл приложения.

Delphi XE

Как это ни удивительно, но вы можете уже сейчас запустить ваш проект.

Delphi XE

Если вас терзает любопытство, загляните в папку с проектом - в ней по­явился файл MyProject . exe (а именно в папке Win32 > Debug ), который обычно и называют программой. И пусть вы не написали до сих пор ни од­ной строчки кода, но уже получили самую настоящую программу с вы­бранным вами названием. Вы можете запустить её из Проводника Windows или файлового менеджера, дважды щёлкнув по названию (или значку) мышкой. Конечно, ничего нового она не сделает по сравнению с первым стартом, но её можно скопировать на диск и запустить на любом другом компьютере - она не требует для своей работы никаких других файлов. Это большое преимущество программ, написанных на Delphi , - они испол­няются без нудной установки на компьютер (впрочем, вы можете легко испортить людям жизнь, добавив к готовой программе инсталлятор со всякими вопросами, предупреждениями и просьбами).

При сохранении проекта Delphi создает несколько файлов. Некоторые из них содержат описание проекта в целом, некоторые — описания программ­ных модулей и форм. Если проект еще ни разу не был сохранен, то в ответ на команду сохранения проекта Save Project As (Сохранить проект как), которая находится в меню File (Файл), Delphi сначала запрашивает имя программного модуля (рис. 12), затем имя проекта (рис. 13), причем требует, чтобы эти имена были разными. Здесь следует обратить внимание на то, что вы­полняемому файлу Delphi присваивает имя проекта.


Рис. 12. Диалоговое окно сохранения модуля


Рис. 13. Диалоговое окно сохранения проекта

5. Запуск приложения

Запустить приложение можно, не завершая работу с Delphi, для этого надо выбрать команду Run (Выполнить) меню Run.

Если ошибок в программе нет, компилятор создает исполняемый файл программы, который позже можно будет запустить непосредственно изWindows. Имя исполняемого файла такое же, как и у файла проекта, расширение exe. Delphi помещает исполняемый файл в тот каталог, где находится файл проекта.

После ввода коэффициентов и нажатия кнопки Вычислить программа вычисляет значения корней уравнения (рис. 14).


Рис.14. Пример работы приложения "Решение квадратного уравнения"

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

6. Структура простой программы Delphi

Программа Delphi представляет собой набор программных единиц — модулей. Один из модулей, главный модуль, содержит инструкции, с которых начинается выполнение программы. Главный модуль приложения формируется средой Delphi.

Ниже приведен текст главного модуля программы решения квадратного уравнения.

Главный модуль хранится в файле с расширением dpr. Чтобы увидеть текст главного модуля приложения, надо в меню View (Вид) выбрать командуProject source (Исходный текст проекта).

Forms, Root_u in 'ROOT_U.PAS' ;

Начинается главный модуль словом PROGRAM, за которым следует имя программы, которое совпадает с именем проекта. Имя программы задается программистом в момент сохранения проекта, и оно определяет имя созда­ваемого компилятором исполняемого файла программы. Далее, за словом USES, следуют имена используемых модулей: библиотечного модуля Forms и модуля формы Root_u.

Директива указывает компилятору, что нужно использовать файл ресурсов, который содержит описания ресурсов приложения, например, пиктограммы. Звездочка показывает, что имя файла ресурсов такое же, как и у файла проекта, но с расширением res.

Файл ресурсов не является текстовым файлом, и просмотреть его с помощью ре­дактора текста нельзя. Для работы с файлами ресурсов используют специальные программы, например Resource Workshop. Можно использовать также входящую в состав Delphi утилиту ImageEditor, доступ к которой можно получить, выбрав команду Image Editor (Редактор образов) меню Tools (Сервис).

Исполняемая часть главного модуля находится между BEGIN и END. Инструкции выполняемой части обеспечивают инициализацию приложения и вывод на экран стартового окна. Помимо главного модуля каждая программа включает в себя как минимум один модуль формы, который содержит описание стартовой формы приложения и поддерживающих ее работу про­цедур. В Delphi каждой форме соответствует свой модуль.

Ниже приведен текст модуля формы для программы решения квадратного уравнения.

SysUtils, WinTypes, WinProcs, Messages, Classes, Controls, Forms, Dialogs, StdCtrls;

Procedure Button1Click(Sender: TObject);

+'Коэффициент при второй степени' +chr(13)+'неизвестного равен нулю'

labell.caption = 'Корни уравнения:' +chr(13)+'xl='+sl

Начинается модуль словом UNIT, за которым следует имя модуля. Именно это имя упоминается в списке используемых модулей в инструкции USESглавного модуля приложения.

Состоит модуль из трех частей: раздела интерфейса, раздела реализации и раздела инициализации.

- Раздел интерфейса (начинается словом INTERFACE) сообщает компилятору, какая часть модуля является доступной для других модулей программы. Здесь перечислены используемые модулем другие библиотечные модули, описание сформированного Delphi типа Tform1, описание доступных другим модулям переменных.

- Раздел реализации (начинается словом IMPLEMENTATION) содержит локальные объявления и реализацию процедур и функций, поддержи­вающих работу формы. Начинается раздел директивой , указывающей компилятору, что в раздел реализации надо вставить инструкции установки значений свойств формы, которые находятся в файле с расширением dfm, имя которого совпадает с именем модуля. Файл *.dfm на основе внешнего вида формы гене­рируется средой Delphi. Просмотреть файл DFM можно при помощи редактора текста. За директивой следует описание обработчиков событий формы. Сюда же программист может поместить описание своих процедур и функций, которые могут вызываться из обработчиков событий обычным образом.

- Раздел инициализации позволяет выполнить инициализацию перемен­ных модуля. Инструкции раздела инициализации располагаются после раздела реализации между BEGIN и END. Если раздел инициализации не содержит инструкций (как в приведенном примере), то слово BEGIN не указывается.

Следует отметить, что значительное количество инструкций в модуль записывает Delphi. Например, Delphi, анализируя действия программиста по созданию формы, формирует описание класса формы. В приведенном при­мере инструкции, набранные программистом, выделены серым фоном. Очевидно, что средой Delphi выполняется значительная часть работы по составлению текста программы.

Вы можете включить любой тип данных как RCDATA или пользовательских тип ресурса. Это очень просто. Данный совет покажет вам общую технику создания такого ресурса.

TStrItem = String [ 39 ];

TDataArray = Array [ 0 .. 7 , 0 .. 24 ] of TStrItem;

Данные размещаются в вашем сегменте данных и занимают в нем 8K. Если это слишком много для вашего приложения, поместите реальные данные в ресурс RCDATA. Следующие шаги демонстрируют данный подход. Создайте небольшую безоконную программку, объявляющую типизированную константу как показано выше, и запишите результат в файл на локальный диск:

TStrItem = string [ 39 ];

TDataArray = array [ 0 .. 7 , 0 .. 24 ] of TStrItem;

F: file of TDataArray;

Теперь подготовьте файл ресурса и назовите его DATA.RC. Он должен содержать только следующую строчку:

DATAARRAY RCDATA "data.dat"

Сохраните это, откройте сессию DOS, перейдите в каталог где вы сохранили data.rc (там же, где и data.dat!) и выполните следующую команду:

brcc data.rc (brcc32 для Delphi 2.0)

Теперь вы имеете файл data.res, который можете подключить к своему Delphi-проекту. Во время выполнения приложения вы можете генерировать указатель на данные этого ресурса и иметь к ним доступ, что и требовалось.

TStrItem = string [ 39 ];

TDataArray = array [ 0 .. 7 , 0 .. 24 ] of TStrItem;

pData: PDataArray = nil ;

dHandle := FindResource(hInstance, 'DATAARRAY' , RT_RCDATA);

if dHandle <> 0 then

dhandle := LoadResource(hInstance, dHandle);

if dHandle <> 0 then

if pData = nil then

WinProcs.MessageBox, без помощи VCL, поскольку здесь код

выполняется как часть инициализации программы и VCL

возможно еще не инициализирован! >

Теперь вы можете ссылаться на элементы массива с помощью синтаксиса pData^[i,j].

Автор: Peter Below

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

Читайте также: