Newsgroup: it.comp.lang.delphi
Titolo: [D7] Bottoni con immagini ...

Ciao a tutti,
volevo porvi una domanda:
è possibile inserire un'immagine contenuta in un componente "ImageList"
all'interno di un semplice bottone "Tbitbtn" ?
Sono riuscito ad associare un "ImageList" solo ai bottoni di una semplice
"ToolBar"! ma ai bottoni standard che offre D7 ... non ho trovato
alternative (attaulmente apro al volo un'immagine bmp e la inserisco .. ma
quando installo il programma .. devo inserire anche le immagini dei bottone
... mi sembra poco estetico !).
Grazie
Filippo
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ... mi sembra poco estetico !).
Perche' non carichi la bitmap a design-time nella proprieta' glyph?
Cosi' facendo la bitmap viene salvata nel dfm e non e' necessario
dare anche i file delle immagini assime all'eseguibile.
ciao
Giacomo


Mi ero dimenticato di dire ... che il bottone ha due stati (On/Off) per ogni
stato ho un'immagine da affiancare !
Ciao



A runtime usi la timagelist.getbipmap o geticon, ciao Giorgio 


Grazie per la dritta, ho fatto alcune prove ma sembra che il componente (o
io) non cambi l'immagine ...
mi spiego meglio: chiamando il componente con index = 0 funziona e mi si
cambia l'immagine, se nella stessa istanza di programma cambio a runtime e
scelgo l'indice 1 ... l'immagine non cambia. Se faccio l'inverso (chiamo
prima idx 1 e poi lo 0) ottengo lo stesso risultato.
Per cui.. o sbaglio io ... oppure il componente necessita di qualche altro
comando per rinfrescare al suo interno l'indice in quanto sembra che rimanga
settato sempre lo stesso indice.
Ciao



Non che sia convinto, ma dopo il cambiamento di index, prova a inserire una 
BitBtn1.Repaint, giorgio 


Cos'e' che non ti convince ?
Avevo gia' provato sia il metodo repaint sia refresh ... ma non funziona !
Lo stesso problema .. lo fa' anche con un contenitore TImage, ossia se
anzichč mandare l' immagine all Bitbtn .. la mando al Timage .. il prodotto
non cambia !!! :-(


 Filippo
Cancella la vecchia bitmap del bottone e riassegnala
qualcosa del tipo
Procedure SettaGlyph(oImage: TImageList;oBottone: TBitBtn; nIndex: Integer);
begin
   oBottone.Glyph := Nil;
   oImage.GetBitmap(nIndex, oBottone.Glyph);
end;
Goblin
-- 
Ibis et redibis non morieris in bello
http://goblinland.myminicity.com/


GRANDE GOBLIN !!!!
Funziona alla grande !
Grazie


 Filippo
Scusa Filippo, ma giusto per capire, ha funzionato quando hai aggiunto 
oBottone.Glyph:=Nil; ?
Giorgio 


Certo !
sei perplesso ?
In pratica l' intuizione che ha avuto Goblin era il mio sospetto .. ossia
che qualcosa non cambiava all'interno del componente (variando l'indice del
TimageList), inserendo in Bitbtn1.Glyph:=Nil; non fai altro che rimuovere
qualsiasi impostazione/immagine grafica precedentemente memorizzata.
Ciao



Credo sia normale essere perplesso. Scusa me per me e' l'ennesimo bug 
delphi: quando cambi l'indice apporti cmq una variazione
in quanto al glyph assegni una nuova bitmap. Ciao Giorgio 

 
Basta vedere il metodo getbitmap del componente Timagelist e capisci il 
perché assegnando a Nil la glyph il tutto funziona :)



Basta vedere il metodo getbitmap del componente Timagelist e capisci il
perché assegnando a Nil la glyph il tutto funziona :)
Goblin
Al contrario, leggendo il getbitmap del TImageList si evince che dovrebbe 
funzionare anche senza il Nil. Giorgio 

Giorgio Padoan ha scritto:

Mi sono espresso male e mi scuso... non fermati al getbitmap ma vai più 
a fondo nella VCL arrivi nella classe TBitmap il metodo FreeImage, qui 
nel caso di immagine già assegnata non riesce a liberare un handle 
(FDIBHandle  -> DIB handle corresponding to TDIBSection),
non sono stato a capire il perchè, ma ogni volta che voglio assegnarlo 
lo ripulisco.
Goblin