Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.24;
Скачать: CL | DM;

Вниз

Ресурс в .exe   Найти похожие ветки 

 
OlegL ©   (2003-11-12 10:45) [0]

Может кто-то знает и подкинет идею как впихать фаил с любым расширением в экзэшник, что-бы потом его можно было вытаскивать и записать на диск. Примерно как ресурсные фаилы (bitmap, cursor, icon и всё такое).


 
Севостьянов Игорь   (2003-11-12 10:58) [1]

Все очень просто - запихивание нестандартных ресурсов (любые файлы) - происходит следующим образом - вот пример:
Создаем для удобства отд. папку с ресурсами (файлами) например нам надо хранить там звуки и картинки - назовем ее Resources
Создаем в ней 2 файла:

GenRes.bat
----
BRCC32.EXE ImgsSnds.rc -fo"ImgsSnds.res"
----

и

ImgsSnds.rc
----
SND_N_COW SNDDATA "NCow.mp3"
SND_C_COW SNDDATA "CCow.mp3"
IMG_N_COW IMGDATA "NCow.jpg"
IMG_C_COW IMGDATA "CCow.jpg"

----

После запуска батника получаем ImgsSnds.res файл
Теперь как нам их подключить в программу и достать в процессе работы:

-----

unit Main;

interface

uses
SysUtils, Classes, Forms, Controls, StdCtrls, ExtCtrls,
Jpeg, MMSystem;

type
TfrmMain = class(TForm)
pnlForm: TPanel;
lblTitle: TLabel;
lblNormal: TLabel;
lblCrazy: TLabel;
btnClose: TButton;
pnlLeftImage: TPanel;
pnlRightImage: TPanel;
imgNormal: TImage;
imgCrazy: TImage;
procedure imgNormalDblClick(Sender: TObject);
procedure imgCrazyDblClick(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
frmMain: TfrmMain;

implementation

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

function GetImageFromResource(Instance: Cardinal; ResourceName, ResourceType: string): TJPEGImage;
var
Stream: TResourceStream;
begin
Stream := TResourceStream.Create(Instance, ResourceName, PAnsiChar(ResourceType));
Result := TJPEGImage.Create;
try
Result.LoadFromStream(Stream);
finally
Stream.Free;
end;
end;

procedure PlaySoundFromResource(Instance: Cardinal; ResourceName, ResourceType: string);
var
Stream: TResourceStream;
begin
Stream := TResourceStream.Create(Instance, ResourceName, PAnsiChar(ResourceType));
try
PlaySound(Stream.Memory, 0, SND_MEMORY or SND_ASYNC);
finally
Stream.Free;
end;
end;

procedure TfrmMain.imgNormalDblClick(Sender: TObject);
begin
PlaySoundFromResource(HInstance, "SND_N_COW", "SNDDATA");
end;

procedure TfrmMain.imgCrazyDblClick(Sender: TObject);
begin
PlaySoundFromResource(HInstance, "SND_C_COW", "SNDDATA");
end;

procedure TfrmMain.btnCloseClick(Sender: TObject);
begin
Close;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
var
Graphic: TJPEGImage;
begin
try
Graphic := GetImageFromResource(HInstance, "IMG_N_COW", "IMGDATA"); imgNormal.Picture.Graphic := Graphic;
Graphic := GetImageFromResource(HInstance, "IMG_C_COW", "IMGDATA"); imgCrazy.Picture.Graphic := Graphic;
finally
if Assigned(Graphic) then FreeAndNil(Graphic);
end;
end;

end.

-----


 
AbrosimovA   (2003-11-12 11:06) [2]

Или с помощью Restorator"а.


 
OlegL ©   (2003-11-12 11:09) [3]

Звуки и картинки я знаю включить. Мне нужен другой, например dbf-фаил.


 
AbrosimovA   (2003-11-12 11:26) [4]

В рестораторе в файле *.res создаёшь итем RCData, затем простым drag-n-drop переносишь туда свой dbf-файл.


 
OlegL ©   (2003-11-12 11:30) [5]

Спасибо, но где его взять этого ресторатора.


 
KSergey ©   (2003-11-12 11:47) [6]

[3] OlegL © (12.11.03 11:09)
Звуки и картинки я знаю включить. Мне нужен другой, например dbf-фаил.


Да хоть что!
Вообще говоря, вот эти названия (SNDDATA, IMGDATA) - это все выдумки того, кто что-то в ресурсы запихивает.
Т.е. можетет смело пихать в ресурс любой файл по приведенной выше методики. Название тип выдумайте сами какое в голову взбредет ;)
Синтаксис rc-файла от этого не меняется ;)


 
OlegL ©   (2003-11-12 11:49) [7]

2 Севостьянов Игорь
Может можно как-то это
SND_N_COW SNDDATA "NCow.mp3"

поменять так чтобы в место SND_*, SNDDATA и *.mp3 написать другое(что-то вроде "битдата").


 
AbrosimovA   (2003-11-12 11:57) [8]


> OlegL © (12.11.03 11:30) [5]
> Спасибо, но где его взять этого ресторатора.


Ищешь в инете, к примеру, Restorator 2.52.
Я думаю эта программка когда-нибудь тебе пригодится.


 
OlegL ©   (2003-11-12 12:15) [9]

Спасибо всем.
вот что у меня в бат файле:
BRCC32.EXE export.rc -fo"export.res"
и вот что у меня в rc файле:
export DATA "export.dbf"
а вот что у меня в програме:

var
res_str : TResourceStream;
file_str : TFileStream;
....
res_str := TResourceStream.Create(HInstance, "export", "DATA");
file_str := TFileStream.Create(path, fmCreate);
file_str.CopyFrom(res_str, res_str.Size);
....

:-)))) и работает :-))))


 
Anatoly Podgoretsky ©   (2003-11-12 12:36) [10]

Все это лишнее, достаточно создать .rc и подключить к проекту, никаких BRCC32 и рестораторов не требуется.



Страницы: 1 вся ветка

Текущий архив: 2003.11.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
1-78953
Вованчик
2003-11-12 07:56
2003.11.24
TreeView


1-79049
Татьяна
2003-11-13 14:38
2003.11.24
Найти компоненту


3-78796
Flash
2003-11-05 09:56
2003.11.24
lookup-поле + Grid


3-78760
Ne0z
2003-11-03 00:24
2003.11.24
Как проиграть MIDI из БД


1-78993
UDS
2003-11-13 20:04
2003.11.24
Взаимосвязь между двумя формами (процедуры)