Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


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, в теле которого записываем строку

3. MyCursor CURSOR «cursor.cur»

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

5. 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.


Поделиться:

Дата добавления: 2015-09-15; просмотров: 109; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты