Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];

Вниз

Ресурс в .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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
1-78952
Alexus
2003-11-11 19:20
2003.11.24
Вызов функции ...


1-78878
_8989
2003-11-14 20:59
2003.11.24
Помогите зарегистрировать комбинацию клавишь или одну...


1-78975
Andy
2003-11-14 15:26
2003.11.24
в Edit1.text вводились только русские буквы


1-78886
Sewer
2003-11-13 11:49
2003.11.24
Запуск программы из другого приложения


3-78805
Peter
2003-11-05 10:32
2003.11.24
InterBase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский