TYRANNYSOFT
Суббота, 2024-12-21, 6:56 PM



Приветствую Вас Гость | RSS
[ Главная страница ] [ Каталог статей ] [ Регистрация ] [ Вход ]
Меню сайта

Категории каталога
Delphi [11]

Наш опрос
Что бы вы хотели видеть на сайте?

Результаты · Архив опросов

Всего ответов: 160

Начало » Статьи » Программирование » Delphi

Работа с ресурсами в Delphi
Windows поддерживает такие виды ресурсов:

RT_ACCELERATOR Accelerator table
RT_ANICURSOR Animated cursor
RT_ANIICON Animated icon
RT_BITMAP Bitmap resource
RT_CURSOR Hardware-dependent cursor resource
RT_DIALOG Dialog box
RT_FONT Font resource
RT_FONTDIR Font directory resource
RT_GROUP_CURSOR Hardware-independent cursor resource
RT_GROUP_ICON Hardware-independent icon resource
RT_ICON Hardware-dependent icon resource
RT_MENU Menu resource
RT_MESSAGETABLE Message-table entry
RT_RCDATA Application-defined resource (raw data)
RT_STRING String-table entry
RT_VERSION Version resource

Самый простой из них это RT_STRING - то есть строковый. Для работы с ним предусмотрено специальное зарезервированное слово - resourcestring.

Пример использования строковых ресурсов смотрите ниже.

==================================================
unit StrConst;

interface

resourcestring

SCreateError = 'Cannot create file';
SOpenError = 'Cannot open file';
SLineTooLong = 'Line too long';

implementation

end.
==================================================
Объявленные строковые ресурсы можно использовать как стандартные константы.

Например:

==================================================
unit Main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses StrConst;
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
S: array [0..255] of Char;
begin
LoadString(HInstance, SLineTooLong, S, SizeOf(S));
ShowMessage(S);
end;
==================================================
Второй способ сделать то же самое немного сложнее, но он показывает принцип работы с ресурсами вообще.

Для этого нам нужно создать включаемый файл myres.inc и в теле прописать константы, по которым мы будем обращаться к строковым ресурсам.

==================================================
const
SCreateError = 1;
SOpenError = 2;
SLineTooLong = 3;
==================================================

Еще нам нужно создать ресурсный текстовый файл myres.rc.

==================================================
#include "myres.inc";

STRINGTABLE
{
SCreateError, "Cannot create file"
SOpenError, "Cannot open file"
SLineTooLong, "Line too long"
}
==================================================

Обратите внимание, что теперь текст нужно брать в двойные кавычки.

Теперь нам необходимо откомпилировать наш файл ресурсов. Создаем для удобства простой пакетный файл myres.bat, в который записываем такую строку

==================================================

brcc32.exe myres.rc

==================================================

Запускаем его на выполнение. Он должен создать скомпилированный файл ресурса myres.res.
Если этого не произошло, то вам необходимо указать полный путь к файлу brcc32.exe. Это, как правило, C:\Program Files\Borland\DelphiX\Bin\brcc32.exe, где вместо X - номер вашей версии Delphi.

Теперь подключаем myres.inc и myres.res в наш Main.pas.

==================================================
unit Main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
{$R MYRES.RES}
{$I MYRES.INC}

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(SLineTooLong);
end;

end.

Теперь попробуем подключить к приложению свой курсор.

Для этого необходимо:

1. Сначала в Image Editor'е или другом редакторе ресурсов создать свой курсор. Сохранить его под именем, например, Cursor.cur

2. Создаем файл MyCursor.rc, в теле которого записываем строку

MyCursor CURSOR "cursor.cur"

3. Компилируем наш файл ресурса, набрав в командной строке

brcc32 MyCursor.rc

и получаем на выходе скомпилированный файл ресурса MyCursor.res.

4. В *.pas-файле добавляем ссылку на наш файл ресурса.

{$R MyCursor.res}

5. Объявляем константу, по которой будем обращаться к нашему курсору.

const
crMyCursor = 1;

Замечание. Для своих курсоров можно использовать только положительные значения.

6. Добавляем в список курсоров новый...

Screen.Cursors[crMyCursor] := LoadCursor(HInstance, 'MyCursor');

7. Подключаем, вместо курсора по умолчанию, свой курсор.

Cursor := crMyCursor;

8. Запускаем приложение.

//============================================
unit Main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
const
crMyCursor = 1;

implementation

{$R MyCursor.res}
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Screen.Cursors[crMyCursor] := LoadCursor(HInstance, 'MyCursor');
Cursor := crMyCursor;
end;

end.
//============================================

Подключение иконок и bitmap-ресурсов аналогично подключению курсоров. Мы попробуем подключить стандартные иконки и bitmap'ы.

Это делается так.

Image1.Picture.Icon.Handle := LoadIcon(0, PChar(IDI_APPLICATION));
Image2.Picture.Bitmap.Handle := LoadBitmap(0, PChar(OBM_ZOOM));

Для более подробной информации смотрите соответствующие функции WinApi.

Теперь мы перешли к работе с определенными пользователем ресурсами.

Мы попробуем подключить текстовый и *.avi-файл.

1. Берем из примеров Delphi файл cool.avi, который находится в каталоге
C:\Program Files\Borland\DelphiX\Demos\Coolstuf\

2. Создаем любой текстовый файл с именем app.txt и помещаем эти файлы к каталог нашего проекта.

3. Создаем текстовый файл ресурса MyRes.rc с телом

MyText Text APP.TXT
CoolAvi AVI cool.avi

4. Компилируем его...

brcc32 myres.rc

5. Делаем изменения в *.pas-файле.

6. Запускаем.

{*******************************************************}
unit Main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
Animate1: TAnimate;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure TextResource;
procedure AVIResource;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
{$R MyRes.res}

procedure TForm1.AVIResource;
begin
Animate1.ResName := 'CoolAvi';
Animate1.Active := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
TextResource;
AVIResource;
end;

procedure TForm1.TextResource;
var
Resource: THandle;
begin
Resource := LoadResource(hInstance,
FindResource(hInstance, 'MyText', 'TEXT'));
Memo1.Lines.Text := PChar(LockResource(Resource));
UnLockResource(Resource);
FreeResource(Resource);
end;

end.

Источник: http://blackman.wp-club.net

Категория: Delphi | Добавил: Max (2007-01-05)
Просмотров: 4389 | Рейтинг: 0.0

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Поиск по каталогу

Друзья сайта

Статистика
Rambler's Top100
Сейчас на сайте:
Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright © 2004-2007 TYRANNYSOFT.