14 Ekim 2008 Salı

C++ Builder Dosya Gömme

Programlarımızda kullandığımız kaynakları ( harici dosyalar.. resim, müzik vs. ) programımızın içerisine veya beraberindeki dll dosyasına gömebiliriz.
C++ Builder ile çalışıyoruz.
Yeni bir proje başlatıp istediğimiz yere istediğimiz isim altında kaydedelim.
Programımızda kullanmak istediğimiz harici dosyaları da kolaylık açısından programımız ile aynı dizine kopyalıyoruz. Yine kolaylık açısından bu dosyaların isimlerinde varsa Türkçe karakter onları da uygun şekilde yeniden adlandırıyoruz.
örneğimizde bir video ( avi ), bir resim ( bitmap - bmp ), bir müzik ( wav ) dosyasını exe mize gömeceğiz.
form üzerine bir image, bir Animate, dört buton koyalım.
Tercih ettiğimiz text editörü ile herhangi bir isim.rc adında dosya oluşturalım. Örneğimizde ben ses.rc yaptım.



VIDEO AVI "VIDEO.AVI"
MUZIK WAVE "LOGOFF.WAV"
RESIM BITMAP "winnt.bmp"

yukarıdaki kodda ses.rc dosyasının içeriği görülüyor. Buna göre video dosyamız video.avi ( ama küçük boyutlu ), ses dosyamız sistemde bulunan logoff wav ve resim dosyamızda yine sistemden winnt.bmp.
ama bunları veya kendi istediğinizi program dizinine kopyalamayı unutmayın. ses.rc de aynı klasörde olacak.
Sonra BCB de Project-Add to Project... menüsünden
yukarda olusturup kaydettigimiz ses.rc dosyasini projemize ekliyoruz.
#include
şeklinde başlık dosyamızı da ekliyoruz.
Kullanıma ilişkin kod aşağıda ve gayet açık.


#include
#pragma hdrstop

#include "Unit1.h"
#include
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
/*
SND_FILENAME --> dosyadan
SND_RESOURCE --> resource den
SND_ALIAS_ID --> resource aliası

*/
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String adres = ExtractFilePath(Application->ExeName) + "LOGOFF.WAV";
PlaySound(adres.c_str(), NULL, SND_FILENAME | SND_ASYNC);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Animate1->Active = false;
Animate1->ResName = "VIDEO";
Animate1->Active = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Image1->Picture->Bitmap->LoadFromResourceName((int)HInstance, "RESIM");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
PlaySound("MUZIK", NULL, SND_RESOURCE);
}
//---------------------------------------------------------------------------


Projemizi derliyoruz.
Tüm fonksiyonları deniyoruz ve çalıştığını görüyoruz.
Button1 ile dosyadan çaldırmayı da görüyoruz.
Artık bmp, avi ve wav dosyalarını proje klasörümüzden silsek bile exe dosyasına gömüldüğü için farketmeyecektir. tabii button1 deki kullanımı silmemiz gerekiyor. Çünkü orada direk dosya kullanılıyor.
exe miz ile her yere bu dosyalarda taşınacak ve kullanılacak ama kendilerinin bulunmasına gerek olmayacaktır.

Saygılarımla

0 Yorum: