Delphi - No carga imagenes

 
Vista:

No carga imagenes

Publicado por Cristián (115 intervenciones) el 11/05/2003 18:33:30
Hola! yo de nuevo.... antes me ayudaron con lo de las imagenes... pero no cargan :'( Este es mi codigo:

Procedure TForm2.FormShow(Sender: TObject);
var
i,j:integer;
a,b:string;
begin
j:=-1;
b:='D:\Inda Software\Tarot\Imagenes\';
for i:=0 to Form2.ControlCount-1 do
if form2.Controls[i] is Timage then
begin
j:=j+1;
if j<10 then
begin
a:='0'+inttostr(j);
Timage(Form2.Controls[i]).Picture.Loadfromfile(b+'imagen'+a+'.jpg');
end;
Timage(Form2.Controls[i]).Picture.Loadfromfile(b+'imagen'+inttostr(j)+'.jpg');
end;
end;
end.

Las imagenes estan con estos nombres: imagen00, imagen01..imagen77.jpg

Pero al momento de ejecutarlo no carga las imagenes. Espero me yuden. Gracias

HA!! por cierto..... con que funcion determino el path de mi ejecutable?:)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:No carga imagenes

Publicado por Ernesto De Spirito (706 intervenciones) el 12/05/2003 09:49:16
El path de tu ejecutable lo determinas con la siguiente expresión:

ExtractFilePath(Application.ExeName)

Respecto de tu pregunta, por empezar yo te sugeriría lo siguiente:

1) Usar el evento OnCreate en vez del evento OnShow, pues OnShow se puede ejecutar muchas veces, y tú sólo necesitas cargar las imágnes la primera vez.

2) Usar la función Format en vez de IntToStr pues se adapta a lo que necesitas.

3) Crear un arreglo con las imágenes para acceso rápido a un componente determinado por su número. Presiento que lo necesitarás.

4) También podría llegar a serte útil asignar la propiedad Tag con el número que le corresponde a un componente en el arreglo.

En definitiva, te quedaría así:

var
Imagenes: array[0..77] of TImage;

procedure TForm2.FormCreate(Sender: TObject);
var
i, j: integer;
b: string;
Control: TControl;
begin
j := 0;
b := 'D:\Inda Software\Tarot\Imagenes\';
for i := 0 to ControlCount-1 do begin
Control := Controls[i];
if Control is TImage then begin
Control.Tag := j;
TImage(Control).Picture.LoadFromFile(b +
'imagen' + Format('%.2d', [j]) + '.jpg');
Inc(j);
end;
end;
end;

Ah, si al pretender cargar una imagen JPG te da un error de extensión de archivo de imagen desconocida, o algo así, es porque te has olvidado de incluir la unidad JPEG en la cláusula Uses. Esa unidad viene con Delphi, pero no recuerdo si se incluía en alguno de los directorios del Library Path o si estaba entre los Extras y había que añadir ese directorio al Library Path (o copiar la unidad a uno de los directorios del LibraryPath). Cualquier cosa búscala que en algún lado está. Yo la tengo instalada y la rutina de arriba me funciona a la perfección.

Ernesto De Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias.. Otra duda :)

Publicado por Cristián (115 intervenciones) el 12/05/2003 18:25:25
Hola!! muchas gracias por ayudarme, implementare ese codigo, me ahorrara mucho espacio. Pero.... jeje!! diras que me estas haciendo mi sistema... jaja!! pero tengo otra dudita. Mira.... tengo una forma con 77 Image. Mi codigo es el siguiente:

procedure TForm3.Image1Click(Sender: TObject);
begin
Image1.Visible:=false;
a:=arreglo[c];
if a<10 then //se toma la carta para la cruz
begin
b:='0'+inttostr(a);
arreglo2[c]:=D+'imagen'+b+'.jpg'
end
else
begin
arreglo2[c]:=D+'imagen'+inttostr(a)+'.jpg';
end;
label4.caption:=''; label4.caption:=label4.Caption+arreglo2[c]; c:=c+1; //contador de 10
if c=11 then
begin
form3.Close;
form4.show;
end;
end;

El codigo si es como quiero y si funciona, pero ese no es el caso... este codigo es para el evento de un Image, y quiero que sea para los 77 image. Ya te imaginaras que como no se hacer otra cosa, tube que duplicar este codigo 77 veces para cada Image, lo que cambia solamente es el

Image1.visible:=false;

ya que tendria que ser del Image1 al Image77

Hay alguna forma de hacer que en cualquier imagen que le de click haga lo del codigo que puse? O ... como le hago para que sea como una funcion? o que puedo hacer? Espero me ayudes. Gracias :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gracias.. Otra duda :)

Publicado por Ernesto De Spirito (706 intervenciones) el 12/05/2003 20:36:26
Justamente para eso está el parámetro Sender, que apunta al objeto que generó el evento. De esa manera todos los componentes pueden compartir el mismo procedimiento en OnClick.

En el código de tu procedimiento, para que sea genérico, en vez de

Image1.Visible := False;

tienes que hacer:

TImage(Sender).Visible := False;

Y si a cada imagen le correspondiera un índice en un arreglo y necesitaras conocer el valor de ese índice para realizar algún procesamiento, una solución es que pongas ese número en la propiedad Tag del componente (puede ser en tiempo de diseño), valor que dentro del procedimiento puedes obtener así:

c := TImage(Sender).Tag;

Y vuelvo a recordarte que puedes simplificar tu código usando Format en vez de IntToStr, o sea que en vez de todo esto:

if a<10 then //se toma la carta para la cruz
begin
b:='0'+inttostr(a);
arreglo2[c]:=D+'imagen'+b+'.jpg'
end
else
begin
arreglo2[c]:=D+'imagen'+inttostr(a)+'.jpg';
end;

puedes simplemente escribir una sola línea:

arreglo2[c] := D + Format('imagen%.2d.jpg', [a]);

Espero que te sirva.

Ernesto De Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No carga imagenes

Publicado por MArcelo Ziem (14 intervenciones) el 12/05/2003 18:48:05
para saber el path de tu ejecutable debes declarar una variable cualquiera por ejemplo "sPath" y escrives lo Siguiente:

sPath:=ExtractFilePath(Application.Exename);

Ésta funcion guarda en la variable sPath el path de tu aplicacion....chao espero que te sirva.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No carga imagenes

Publicado por Marcelo Ziem (14 intervenciones) el 14/05/2003 00:02:22
se me olvido que esa variable sPath debe ser de tipo string ya que la funcion devuelbe un string.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar