Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-11-2006
federki federki is offline
Registrado
 
Registrado: nov 2006
Posts: 7
Poder: 0
federki Va por buen camino
Cargar imagen [Solucionado]

Hola a todos..
Perdonad mi ignorancia, porque debe ser muy fácil y no doy con ello.
Tengo un formulario con una TImage. Si voy a las propiedades de la Imagen tengo que pulsando en Picture puedo cargar la imagen que quiero usar y esa imagen se queda guardada y cuando ejecuto mi aplicación en cualquier ordenador, pues la imagen aparece.

Pues lo que quiero hacer es eso mediante código. ¿Como puedo cargar una imagen para que se quede en el programa?
Por ej. si utilizo:
Imagen.Bitmap.LoadFromFile('C:\img.bmp');
La imagen no se carga en otro ordenador porque la imagen img.bmp no existe.

Estoy seguro que esto es muy sencillo, por favor que alguien me eche una mano.
Gracias.

Última edición por federki fecha: 13-11-2006 a las 22:51:47.
Responder Con Cita
  #2  
Antiguo 13-11-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Tendrás que utilizar una ruta "relativa" a tu aplicación. De este modo, esté en el ordenador que esté, la imagen (si existe) se cargará. ¿Cómo usar una ruta relativa a tu aplicación? Bueno. Hay funciones que te echan una mano. Por ejemplo, supongamos que tienes una carpeta de nombre "img" en el directorio en que se encuentra el ejecutable de tu aplicación.

Si utilizas la función "ExtractFilePath" pasándole como parámetro tu ejecuable (Application.ExeName) podrías codificar algo como esto:

Código Delphi [-]
var
  rutaImagen: string;
begin
  rutaImagen := ExtractFilePath(Application.ExeName) +'img\'+ 'nombre-imagen.jpg';
  Image1.LoadFromFile(rutaImagen);
  {...}
end;

¿Coges la idea? Es muy sencillo. Se trata de partir de la ruta de tu ejecutable, es decir, del directorio en donde este se encuentre. A partir de ahí puedes utilizar los archivos y carpetas de dicho directorio de forma que no tengas que construir una ruta "absoluta" del tipo "C:\Archivos de programa\..." porque, evidentemente, estas rutas pueden ser válidas en tu ordenador, pero, no tienen por qué serlo en todos.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 13-11-2006
federki federki is offline
Registrado
 
Registrado: nov 2006
Posts: 7
Poder: 0
federki Va por buen camino
Gracias dec por tu pronta respuesta..
La verdad que me parece muy buena tu idea pero tengo un pequeño incoveniente, que el programa que estoy haciendo es un instalador, e imagínate lo horrible que es tener que instalar el programa y tener una carpeta con las imágenes que quiero mostrar aparte.

Si mi programa no fuera un instalador usaría tu forma, pero así no puedo hacerlo..
Muchas gracias.
Responder Con Cita
  #4  
Antiguo 13-11-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. No sé qué tipo de programa estás haciendo, quiero decir que no me queda claro qué quieres decir con que es un "instalador". Si estás utilizando InnoSetup, por poner un ejemplo, no hay ningún dilema en incluir las imágenes que estimes oportuno, en la carpeta que estimes oportuno: por ejemplo en un subdirectorio dentro de la carpeta en que se instale/copie tu ejecutable.

No sé. Si pudieras dar alguna información más... tal vez alguien pueda echarte una mano.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 13-11-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola federki
La verdad como no se, entonces lo haria a lo aprendiz.
Haria un form que tenga las imagenes que necesito dentro de este, como las guarda el sistema, ya las tengo.
Cuando necesite una foto determinada nada mas indico el nombre de la imagen y se lo paso a la otra vacia en otro form.
Es una opinion.
Saludos
Responder Con Cita
  #6  
Antiguo 13-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Le estoy dando vueltas a tu pregunta y no tengo muy claro lo que quieres. dec supone que tu tienes la imagen que quieres cargar dentro del directorio de tu aplicación o en un subdirectorio de la misma, y que tu duda es como poder encontrarla. Si es así la respuesta de dec es correctisima ... bueno quizá quitándole una pequeña errata
Código Delphi [-]
  Image1.Picture.LoadFromFile(rutaImagen);

Ahora bien, puede que tu estés preguntando por un método para incluir una imagen dentro de tu ejecutable por código. Eso ya es un poco mas complicado, partiendo de que un ejecutable no se puede modificar a si mismo y que la imagen se tendría que agregar como un recurso. Se podría hacer, pero no creo que valga la pena.

Por ultimo también se me ocurre que puedes estar preguntando como mostrar un cuadro de dialogo para seleccionar una imagen, y que en sucesivas ejecuciones ya siempre se utilice la misma ruta. Eso ya es mas sencillo, por ejemplo para obtener la ruta, y guardarla:

Código Delphi [-]
begin
  with TOpenDialog.Create(nil) do
  try
    if Execute then
    begin
      Image1.Picture.LoadFromFile(Filename);
      with TStringList.Create do
      try
        Values['Ruta']:= ExpandFileName(Filename);
        SaveToFile(ChangeFileExt(ParamStr(0),'.ini'));
      finally
        Free;
      end;
    end;
  finally
    Free;
  end;
end;

El código anterior puedes ponerlo por ejemplo dentro de un botón. Ahora ya tenemos la ruta de la imagen en nuestro archivo de inicio, ahora solo falta que cuando se inicie la aplicación comprobemos si hay alguna ruta guardada y carguemos la imagen. Por ejemplo en el evento OnCreate del formulario coloca esto:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  if FileExists(ChangeFileExt(ParamStr(0),'.ini')) then
  with TStringList.Create do
  try
    LoadFromFile(ChangeFileExt(ParamStr(0),'.ini'));
    if Values['Ruta']<>'' then
      Image1.Picture.LoadFromFile(Values['Ruta']);
  finally
    Free;
  end;
end;
Responder Con Cita
  #7  
Antiguo 13-11-2006
federki federki is offline
Registrado
 
Registrado: nov 2006
Posts: 7
Poder: 0
federki Va por buen camino
Primeramente MUCHAS A TODOS por vuestra impresionante ayuda..

Decir que dec ha acertado de lleno en lo que estoy haciendo.
Estoy haciendo un instalador con InnoSetup. Y el problema es ese que he creado un TBitmapImage.

dec:"no hay ningún dilema en incluir las imágenes que estimes oportuno, en la carpeta que estimes oportuno: por ejemplo en un subdirectorio dentro de la carpeta en que se instale/copie tu ejecutable."
Yo sé crear la carpeta, pero pienso que la imagen se cargará antes de que se cree la carpeta.
Si pudieras poner un simple ej. para orientarme te lo agradecería, porque has entendido lo que quiero hacer.

Sigo leyendo vuestras respuestas:
seoane dice: "Ahora bien, puede que tu estés preguntando por un método para incluir una imagen dentro de tu ejecutable por código. Eso ya es un poco mas complicado, partiendo de que un ejecutable no se puede modificar a si mismo y que la imagen se tendría que agregar como un recurso. Se podría hacer, pero no creo que valga la pena."
Esto es lo que quiero hacer seoane..

Última edición por federki fecha: 13-11-2006 a las 21:34:51.
Responder Con Cita
  #8  
Antiguo 13-11-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

En InnoSetup cuentas con un Script de ejemplo de nombre "CodeClasses.iss". En el mismo se utilizan, entre otras clases soportadas, el "TBitmapImage". Puede verse como se incluye (temporalmente) un determinado archivo de imagen, y cómo luego se crea una instancia de la clase mencionada y se carga (desde el directorio temporal correspondiente) la imagen susomentada. Echa un vistazo. Es interesante y creo que resuelve el problema.

Por cierto, la clase "TBitmapImage" se añadió a InnoSetup en la versión 4.1.2. Asegúrate de que utilizas esa versión o una superior.

Aquí un extracto del código fuente del Script de InnoSetup que he mencionado:

Código:
[ Files ]
Source: compiler:WizModernSmallImage.bmp; Flags: dontcopy

[ Code ]

{ TBitmapImage }

Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TBitmapImage');

BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp');
ExtractTemporaryFile(ExtractFileName(BitmapFileName));

BitmapImage := TBitmapImage.Create(Page);
BitmapImage.AutoSize := True;
BitmapImage.Bitmap.LoadFromFile(BitmapFileName);
BitmapImage.Parent := Page.Surface;
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 13-11-2006 a las 22:11:12.
Responder Con Cita
  #9  
Antiguo 13-11-2006
federki federki is offline
Registrado
 
Registrado: nov 2006
Posts: 7
Poder: 0
federki Va por buen camino
MUCHAS GRACIAS David
Tema solucionado..

Última edición por federki fecha: 13-11-2006 a las 22:53:39.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cargar Imagen johurgi Gráficos 4 14-08-2006 17:43:11
al cargar imagen kiringui Gráficos 2 12-06-2006 12:47:50
cargar imagen animada (gif) jorgito.crazy Gráficos 2 02-06-2006 16:09:27
cargar imagen majosf Conexión con bases de datos 3 21-09-2005 18:17:07
cargar imagen en access detybel Conexión con bases de datos 1 07-04-2005 09:37:35


La franja horaria es GMT +2. Ahora son las 12:14:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi