Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Borland6 ukljucivanje direktorijuma sa bitmapama u .exe

[es] :: C/C++ programiranje :: Borland6 ukljucivanje direktorijuma sa bitmapama u .exe

[ Pregleda: 2566 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

tokajac

Član broj: 93240
Poruke: 123
89.216.111.*



+5 Profil

icon Borland6 ukljucivanje direktorijuma sa bitmapama u .exe28.04.2008. u 14:01 - pre 163 meseci
Radim u Borland6 C++.

Pravim exe koji moze da se pokrene na racunarima koji nemaju instalirano Borland6 radno okruzenje.
(decheckiranje Project->Options->Packages: Build with runtime packages i Project->Options->Linker: Use dynamic RTL)

Nakon pokretanja ovog exe-a kada se poziva ucitavanje .bmp-a javlja se greska:

Code:

 [red]Cannot open file images//slika.bmp[/red] 


Ovaj .bmp se ucitava na BitButton
Code:

      BitBtn15->Glyph->LoadFromFile("images//slika.bmp");



Da li .bmp ove iz drugog foldera treba negde eksplicitno ukljuciti u projekat?

Imam dva foldera koji mi sadrze bmp-ove. Radi se o folderima:
images
imgForms


Pozdrav!
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4889
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+633 Profil

icon Re: Borland6 ukljucivanje direktorijuma sa bitmapama u .exe28.04.2008. u 14:05 - pre 163 meseci
Citat:

BitBtn15->Glyph->LoadFromFile("images//slika.bmp");

Pogresio si u kosim crtama, treba:
Code:

BitBtn15->Glyph->LoadFromFile("images\\slika.bmp");

... ali ni to nije dovoljno dobro.

U Windows okruzenju potrudi se da uvek putanja bude *cela*, jer se default folder lako promeni, recimo upotreba TOpenFolder-a i sl, porementi default folder i taj images folder vise ti nece biti ispod roota programa.

Recimo, to se resava tako sto dinamicki napravis putanju:
Code:

#include <SysUtils.Hpp>
// ...
BitBtn15->Glyph->LoadFromFile(ExtractFilePath( ParamStr(0) ) + "images\\slika.bmp");

ili:
Code:

#include <SysUtils.Hpp>
// ...
BitBtn15->Glyph->LoadFromFile(ExtractFilePath( Application->ExeName ) + "images\\slika.bmp");


 
Odgovor na temu

tokajac

Član broj: 93240
Poruke: 123
89.216.111.*



+5 Profil

icon Re: Borland6 ukljucivanje direktorijuma sa bitmapama u .exe28.04.2008. u 15:33 - pre 163 meseci

Da li je i kako moguce na neki nacin 'upakovati' dva foldera sa slikama u .exe?
Pretpostavljam da bi onda trebala neka druga naredba za ucitavanje .bmp-a na dugme?


Pozdrav!
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4889
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+633 Profil

icon Re: Borland6 ukljucivanje direktorijuma sa bitmapama u .exe28.04.2008. u 16:27 - pre 163 meseci
Slike koje ti trebaju za aplikaciju mozes da upakujes u resursi fajl (*.RC) pri cemu taj resursni fajl moze da bude:

1. linkovan uz EXE
2. nezavisan DLL (koga ces pozivati iz EXE-a)

Kako se prave DLL-ovi sa slikama kao resursima
http://www.elitesecurity.org/t246979-0#1484917

Kako se pristupa slikama kao resursima, koji su u DLL-ovima
http://www.elitesecurity.org/t213525-0#1277339

Ako hoces bez DLL-ova, sve je isto (jos i lakse).
Samo napravi taj resursni fajl po propisu, dodaj ga u projekat i to je to. Slikama se pristupa isto, recimo: LoadFromResourceID(), pri cemu nema LoadLibrary().

Probaj sam, pa ako zaglavis javi se.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4889
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+633 Profil

icon Re: Borland6 ukljucivanje direktorijuma sa bitmapama u .exe28.04.2008. u 16:42 - pre 163 meseci
Evo ti i kratak primer (Attachment)

--- Unit1.cpp ---
Code:

// ...
#include "slike.rh"
// ...
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    pBitmap = new Graphics::TBitmap;
    pBitmap->LoadFromResourceID( (int)HInstance, IDB_MYBITMAP );
    Image1->Picture->Assign( pBitmap );
    delete pBitmap;
}

--- Unt1.h ---
Code:

// ...
private:    // User declarations
        Graphics::TBitmap *pBitmap;
// ...


--- slike.RC ---
Code:

#include "slike.rh"
IDB_MYBITMAP BITMAP "slika.bmp"


--- slike.RH ---
Code:

#ifndef slikeRH
#define slikeRH

#define IDB_MYBITMAP 10000

#endif


--- FOLDER ---
Code:

slika.bmp


Dodati u projekat slike.RC !!!
Prikačeni fajlovi
 
Odgovor na temu

tokajac

Član broj: 93240
Poruke: 123
89.216.111.*



+5 Profil

icon Re: Borland6 ukljucivanje direktorijuma sa bitmapama u .exe30.04.2008. u 14:25 - pre 162 meseci
Podeseno i radi: thx a lot X Files!


Primetio sam sledece stvari:

1.) Ne ucitavaju se sve bitmape kako treba: ukoliko ih u Photoshopu snimim kao 32 bitne javlja se error.
Dakle, treba ih sacuvati kao 24 bitne.

2.) #define u slike.h treba da je u int opsegu (ne preko 32767 -kol'ko je vec maxint). Koristio sam brojeve: 1000,2000,3000...

3.) Sve moje bitmape su u posebna 2 foldera. U slike.rc sam naveo
Code:

    BELI BITMAP "images//beli.bmp"
    

Kol'ko sam skontao sve jedno je na koju stranu cu okrenuti slash-ove (// \\)?


4.) Na pocetku sam napravio unit tipa .rc. Uneo sve ukupno 5 linija koda i krenuo da kompajliram. Javila se greska:
Declaration terminated incorrectly u .rc fajlu.
Nisam nista menjao, nego sam Build All-ovao sve i sve OK. Jer moze da se kompajlira resursni unit zasebno?


Ako bih koristio DLL, da li je dovoljno samo kopirati nesto.DLL u folder projekta u koji hocu da ga ukljucim, pa onda
Code:

HINSTANCE MyDllLib = LoadLibrary( "nesto.dll" );

?

Nemam iskustva sa ukljucivanjem resursa pa me interesuju side-effectsi...


Pozdrav!
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: Borland6 ukljucivanje direktorijuma sa bitmapama u .exe30.04.2008. u 15:21 - pre 162 meseci
Code:
srand((unsigned)time(NULL));
KarteDll = LoadLibrary( "cards.dll" );
pBitmap->LoadFromResourceID( int( KarteDll ),  rand()%52 + 1);
.
.
FreeLibrary(KarteDll);


Ovo ti je primjer kako iz dll-a učitati resurs (sliku). Znači, u ovom slučaju treba ti handle na dll i ID slike.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4889
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+633 Profil

icon Re: Borland6 ukljucivanje direktorijuma sa bitmapama u .exe30.04.2008. u 19:09 - pre 162 meseci
Citat:

4.) Na pocetku sam napravio unit tipa .rc. Uneo sve ukupno 5 linija koda i krenuo da kompajliram. Javila se greska:
Declaration terminated incorrectly u .rc fajlu.

Sigurno si napravio neku trvivijalnu gresku. Pogledaj detaljnije...

Citat:

Ako bih koristio DLL, da li je dovoljno samo kopirati nesto.DLL u folder projekta u koji hocu da ga ukljucim, pa onda

Da, dovoljno je da bude u folderu izvrsnog fajla.

Citat:

Nemam iskustva sa ukljucivanjem resursa pa me interesuju side-effectsi...

Nema sporednih efekata. Mnogi programi resurse drze u DLL-ovima.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Borland6 ukljucivanje direktorijuma sa bitmapama u .exe

[ Pregleda: 2566 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.