[ sojic @ 09.09.2003. 17:50 ] @
Pisao sam jednom, ali je nešto sjebano, nema posta.

Kao prvo, skoro uvek radim CLX aplikacije, radi moguќnosti da rade i na Windowsu i na Linuxu (praktično još nisam testirao).

Kao tastere koristim BitBtn, radi Glyph-a.

CLX komponente (tastere, panele....) imaju property Bitmap.

Glyphove vadim na taj način što uzmem neke bezvezne šortkate, smenim ikonu (satvim neku sa shell32.dll), print screen i u Photoshopu snimim kao .gif, .jpg, .bmp, .png...... nije bitno.

Ako u aplikaciji imam 50 tastera, i na svakog stavim Bitmap i Glyph (da pretpostavimo to je oko 1K), aplikacija ќe biti veќa za 50K.

Ima li neko pametnije rešenje? Da slike stavim u neki fajl, i njih da postavnjam kao Glyphove i Bitmape, normalno sa jednoj komandi, da ne mora za svakog tastera da pišem nešto u stilu:

procedure TMainForm.onActivate.......

Taster1.Glyph.LoadFromFile('./images/slika1.gif');
Taster2.Glyph.LoadFromFile('./images/slika2.gif');
Taster3.Glyph.LoadFromFile('./images/slika3.gif');
Taster4.Glyph.LoadFromFile('./images/slika4.gif');

Hvala unapred.
[ morlic @ 10.09.2003. 08:38 ] @
Postoji varijanta da resurse stavis u dll pa da ih onda grupno odatle ucitavas ( ali to je opet ucitavanje ). Nisam siguran kao to funkcionise sa CLX-om. Mozes da napravis neke pomocne funkcije koju pozivas jednom prilikom kreiranja forme:


procedure LoadPictures( Form : TForm );
begin
... ides kroz komponente na prosledjenoj formi, rekurzivno (u dubinu) i
za svaku komponentu ucitavas sliku iz samog exe-a (resource) ili dll-a
na osnovu naziva komponete i putanje u odnosu na formu:

Neki button moze imati putanju konkretnu putanju:

"Form1.Button3"

po tome mozes nazvati resource i tako prilikom ucitavanja imas finu automatiku.
end;

Nadam se da sam ovo dobro opisao. Sa ovakvim sistemom nemas mnogo posla osim onog koji bi u svakom slucaju morao da radis ( da svakom dugmencetu stavljas sliku u design time-u) Ako treba jos detalja javi pa da vidimo, ako nadjem vremena mozda razradim celu stvar.
[ sojic @ 10.09.2003. 17:58 ] @
Danke bite!

A kako se kreira resource file, i kako bi se ucitavala slikica? Ne znam tacno kako da iskoristim .LoadFromResourceID. Radio sam sa LoadFromFile, ali sa LoadFromResourceID nisam.

U svakom slucaju hvala.
[ Bokkie @ 17.09.2003. 17:49 ] @
Mozda bi najbolje bi bilo da izvedes svoju TMyBitBtn klasu iz TBitBtn - u tom slucaju bi mogao da napravis svoj ModalResult, svoj Kind i naravno svoje slicice.

Evo primera kako da ucitas bitmapu iz EXE ili DLL resursa:

Code:

Procedure UcitajBitmapu (Button : TBitBtn; ImeResursa : String; DLL : String = '');
var ResInstanca : THandle;
Begin
 ResInstanca = 0; // inicijalizacija
 If DLL = '' Then // ako zelis da ucitava iz aplikacije, izostavi DLL parametar
  ResInstanca := Application.Handle
 Else 
  ResInstanca := LoadLibrary(DLL); // ako DLL parametar postoji, onda ucitaj DLL
 If ResInstanca<>0 Then Begin
  Button.Glyph.LoadFromResourceName(ResInstanca, ImeResursa); // ovde se ucitava bitmapa
  If DLL='' Then FreeLibrary(ResInstanca) // Ako DLL parametar postoji, oslobodi DLL iz memorije
 End;
End;


Funkciju pozivas sa:

UcitajBitmapu (BitBtn1, 'Ime_Resursa', 'Resursi.dll') - ako ucitavas iz DLL-a
UcitajBitmapu (BitBtn1, 'Ime_Resursa') - ako ucitavas resurs iz EXE fajla

nadam se da sam pomogao
[ sojic @ 18.09.2003. 01:07 ] @
I ja se nadam da si pomogao. Sad ne mogu da isprobam kod, ali kao ideja je od pomoci.

Hvala
[ morlic @ 18.09.2003. 17:57 ] @
Nadjoh jedan stari clanak, ali mozda pomogne. Zakacen je uz poruku