PDA

Ver la Versión Completa : convertir un tbitmap a integer


sultan
26-10-2008, 16:34:30
hola a todos!
acabo de ingresar en el foro, y os pido ayuda en un problema que tengo.
estoy haciendo un juego en delphi , y la pregunta es la siguiente.
tengo un bitbuton en el cual le pongo 1 imagen.
lo que qiero hacer es que con un timer, a los 3 segundos me canvie a una segunda imagen, y que 2 o 3 segundos mas tarde el bitbuton se encoga hasta desaparecer, y con el un progres bar. digamos que seria como los juegos flash que te pone el "loading", pero con la diferencia que el mio en cuando se cargue toda la progresbar, empieze a encogerse toda la imagen, con el progres bar incluido.

esto se podria hacer??? seria posible hacerlo??? como lo tendria que hacer??
el tema del timer lo tengo solucionado, pero no consigo por codigo, decir que si la bitbuton.glyph= a una imagen, que se cambie a otra.
como lo hago?

gracias de antemano

os dejo un trozo de codigo por si os interesa

procedure TForm1.BitBtn4Click(Sender: TObject);
var x: integer;
var y: integer;
begin
if (bitbtn4.Glyph:=x) then;==>me dice que es incompatible el tbitmap con el integer
begin
timer2.enabled:=true;
bitbtn4.Glyph=y;
progressbar3.Position:=progressbar3.Position+1;

coso
26-10-2008, 19:01:18
Hola, lo que quieres es cambiar la propiedad anchura y altura (width y height) del dibujo, por lo que tendrias que asignar glyph.width, glyph.height. En el codigo que has puesto hay ademas bastantes fallos (se compara con :=, se asigna con =, se compara x antes de darle un valor) seria bueno que echaras algun vistazo a ejemplos. saludos.

sultan
26-10-2008, 20:15:47
creo que me he explicado mal:
tengo dos imagenes (1.jpg, y 2.jpg).
tengo un bitbuton al cual le asigno una imagen. (1.jpg)
luego tengo tambien un timer, que en el momento de ejecucion del programa, se pone en marcha.
cuando estoy en ejecucion, lo que yo quiero, es que en el bitbuton se cambie de 1.jpg a 2.jpg
El problema es que al hacer el "if" lo que hago es comparar la imagen del bitbuton con la que hay, y si no es la correcta pues que se cambie.
te pongo el ejemplo como lo quisiera hacer yo:

if (bitbtn4.glyph= '1.jpg') then
begin
bitbtn4.glyph='2.jpg'
end;

esto da error porque me dice que son incompatibles los tbitmaps con los integer, y con los string, i viceversa.
por eso quiero saber como hacer que los tbitmaps puedan ser compatibles con los strings o integers. si hay alguna funcion o algo parecido al "strtoint, inttostr" nose algo por el estilo.
espero que ahora quede mas claro.

dime algo si sabes como hacerlo, porfavor.

muchas gracias

enecumene
26-10-2008, 20:24:12
Hola, Intenta poner la Unidad JPEG en el Uses del form, ya que Glyph es un formato bitmap de dos tonos y estas tratando de comparar con archivos Jpeg, que talvez el problema anda por ahí ;)

Saludos.

EDITO: Los BitButtons tampoco soportan archivos Jpeg :D :D

coso
26-10-2008, 20:28:40
Bueno, esto es algo completamente diferente a lo anterior.
No puedes comparar un TBitmap y una string, pues la string que tu estas mostrando no es mas que el nombre del fichero, y no su mapa de bits. Lo mejor que puedes hacer es cargar antes los n TBitmaps en un array y irlos colocando/comparando segun necesidad.


var
b : array [0..n] of TBitmap;

...
procedure Inicio;
var
i : integer;
begin
for i := 0 to n - 1 do
begin
b[i] := TBitmap.Create;
b[i].LoadFromFile(inttostr(i+1)+'.jpg');
end;
end;

...

procedure OnTimer;
begin
if BitBtn.Glyph = b[0] // esto si lo podemos comparar, pues son dos
//punteros a TBitmap. Ahora bien, los glyph deberas haberlos asignado antes
//de la manera BitBtn.Glyph := b[n], pues si no tendrian direcciones diferentes
//aun verse el mismo mapa de bits
...
end;

...


despues de todo esto (y no porque no funcione), creo q lo mejor seria que guardases en una string global cual ha sido tu ultimo glyph guardado, y comparar esta string. Mas que nada para que no te confundas con el codigo. Saludos.

PD: deberas, si creas los TBitmaps asi, liberarlos tambien 'manualmente' antes de salir de la aplicación

sultan
26-10-2008, 20:41:56
muchas gracias gente, ahora me lo mirare haber si encuentro solucion.ya mañana si hay algo os comento el que.

gracias

adios