PDA

Ver la Versión Completa : como asignar en runtime un bitmap


alquimista
13-03-2010, 01:40:58
Estoy usando un componente jedI PARA USAR UN INTERRUPTOR

JvSwitch

Tiene 2 propiedades JvSwitch.GlyphOn y JvSwitch.GlyphOn que permiten cargar un Bitmap (TBitmap) .

Tengo una Imagen (Timage) previamente metida en el form

He intentado asignar esa imagen a las propiedades GlyphOn del JvSwitch y no se como hacerlo ya que me genera una excepcion.

JVswitch.GlyphOn:=ImageMia.Picture.Bitmap;

He probado tambien JVSwitch.GlyphOn.Assign(ImageMia.Picture.Bitmap);

No tengo mucha idea del manejo de imagenes.

Alguien puede aclararme que hago mal y como solucionarlo?

gracias

BrunoBsso
13-03-2010, 12:17:40
Nunca usé ese componente, pero fijate si la propiedad GlyphOn no es de tipo Picture en vez de Bitmap.
Tal vez esa propiedad no es un bitmap y no te permite asignarla así.
Si es un TPicture, deberías poner JVSwitch.GlyphOn.Bitmap.Assign(ImageMia.Picuter.Bitmap);
Sino, otra solución podría ser guardarla temporalmente en el disco, cargalar en GlyphOn y después borrarla.

ImageMia.Picture.Bitmap.SaveToFile('ImgTmp.bmp');
JVSwitch.GlyphOn.LoadFormFile('ImgTmp.bmp');
DeleteFile('ImgTmp.bmp');

Así, la imagen se carga desde el disco, y al momento de borrarse del disco no se borra del GlyphOn porque está cargada en memoria.
Fijate si alguna de las 2 te sirve (obviamente mejor la primera) y nos contás.
Saludos!

BrunoBsso
13-03-2010, 12:22:15
Acabo de mirar a un código a ver cómo es el JvSwitch.
Según entiendo, para asignarle una imagen tenés que usar el método SetSwitchGlyph del JvSwitch.
Es bastante simple, mirá:

//GlyphOn tiene predefinido el índice 1 y GlyphOff tiene predefinido el índice 0, en la clase JVSwitch
JVSwitch.SetSwitchGlyph(1,ImageMia.Picture.Bitmap);

Solamente eso.
Fijate que debe andar.
Saludos!

alquimista
13-03-2010, 12:31:30
La primera no funciona
Glyphon no tiene la clase Bitmap.Assign
En las propiedades al cargar en modo diseño pone TBitmap pero no picture.

Si que he visto que tiene loadfromfile pero no puedo probarlo ahora.

Gracias por la respuesta, pero todavia no entiendo porque no funciona...

Saludos

BrunoBsso
13-03-2010, 12:37:08
Es como te indiqué en el segundo mensaje.
Está sacado directamente del código fuente de la clase JvSwitch.
Hacelo como dice ahí y no vas a tener ningún problema.

procedure PonerImagenGlyphOn(Img:TBitmap);
begin
//GlyphOn tiene predefinido el índice 1 y GlyphOff tiene predefinido el índice 0, en la clase JVSwitch
JVSwitch.SetSwitchGlyph(1,Img);
//JvSwitch.SetSwitchGlyph recibe como primer parámetro el índice (0=GlyphOff; 1=GlyphOn) y como segundo parámetro la imagen
end;


procedure TForm1.Button1Click(Sender:TObject);
begin
PonerImagenGlyphOn(ImageMia.Picture.Bitmap);
end;

Probalo (es un vago ejemplo) que te va a funcionar de 10!
Saludos!

alquimista
13-03-2010, 12:42:03
No me funciona me dice que es un metodo privado


with FindComponent('ComboBox' + IntToStr(i)) as TComboBox,
FindComponent('JvSIA' + IntToStr(i)) as TJVSwitch do
begin
if (itemindex=0) then
begin
SetSwitchGlyph(1,ImageBumpon.Picture.Bitmap);
// GlyphOn.Assign(ImageBumpOn.Picture.BItmap);
SetSwitchGlyph(0,ImageBumpoff.Picture.Bitmap);
// GlyphOff:=(ImageBumpOff.Picture.Bitmap);
end

BrunoBsso
13-03-2010, 12:53:27
Tenés razón. No me fijé el ámbito del método! Estuve mal ahí, me disculpo.
Al ser TBitmap (incorporado en Delphi, no es de la clase JvSwitch) tiene que permitirte usar Assign. Me parece raro.
Pero igual, si estás en apuros, usá el método de almacenar en disco y después borrar.
Ahora compilo esa clase a ver si te ayudo un poco más.
Nos vemos en un rato :)

BrunoBsso
13-03-2010, 13:15:52
Siento no poder ayudarte más de lo que hice hasta ahora.
Traté de instalar 3 veces la JVCL y la JCL pero siempre me dice que no tengo ningún IDE de Delphi instalado :(
No sé si estaré haciendo mal. Tal vez va en una carpeta específica y no lo hice.
De todos modos, sigo firme con que tiene que permitirte usar el método Assign de la clase TBitmap.
Saludos.

alquimista
13-03-2010, 13:26:50
deja usarlo pero me sale una excepcion.
Gracias

BrunoBsso
13-03-2010, 13:44:12
deja usarlo pero me sale una excepcion.
Gracias
Pero decí cuál es la excepción a ver si te podemos ayudar. Danos datos y podemos formular una respuesta.

alquimista
14-03-2010, 18:49:13
He estado fuera 1 dia..

La excepción es

Project programa.exe raised exception class EAccessViolation with message Access Violation ......


la idea es cambiar la imagen del interruptor en on y off del JVswitch por varias que tengo previamente almacenadas en un TImage dependiendo del valor de un Combobox

alquimista
14-03-2010, 19:22:53
he probado la 2ª opcion y me pasa lo mismo al grabar el bitmap a disco.
A ver si es un problema del bitmap?
BMP en 24 bits grabado con potoshop en delphi 2007

No se?????????????? cambiare el jvswitch por timages 5 x2 timages

Esta claro que algo esta mal (es lo unico que tengo claro), jejejej:confused::confused: