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 01-09-2008
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: nov 2007
Posts: 60
Poder: 17
Garry Va por buen camino
Exclamation TJpegImage.LoadFromFile repite parte de mi ruta!!

¡Hola, muchachos!

Gracias por la atención. He estado buscando por la red y el foro y no encuentro a nadie con un problema similar, pero seguro que lo hay

Uso Delphi 7.0 y quiero cargar imágenes a partir de una ruta base que extraigo desde un archivo a una variable global (G_Img_Logos_URL), que luego concateno al nombre seleccionado con un TOpenPictureDialog (mi instancia se llama M_VOP_Logo). Mi TImage se llama: M_Img_Logo.

Este es el código para seleccionar la imagen al pulsar sobre su espacio del formulario:
Código Delphi [-]
procedure TF_Empresa.M_Img_LogoClick(Sender: TObject); //buscamos foto y cargamos
var
  Jpeg:TJpegImage;
  Corriente:TMemoryStream;
begin
  M_VOP_Logo.InitialDir := G_Img_Logos_URL;
  if M_VOP_Logo.Execute then
    begin   // hacer todo lo que sea
    Jpeg:=nil;
    Corriente:=nil;
    FileLogo:=ExtractFileName(M_VOP_Logo.Filename);
   // URLLogos:=  URLLogos+FileLogo;
    //mostramos la foto para su comprobacion
    try
      Jpeg:=TJpegImage.Create;
     Jpeg.LoadFromFile(M_VOP_Logo.FileName);
     //Jpeg.LoadFromFile(URLLogos);
      Corriente:=TMemoryStream.Create;
      Jpeg.SaveToStream(Corriente);
      Corriente.Seek(0,soFromBeginning);
      Jpeg.LoadFromStream(Corriente);
      M_Img_Logo.Picture.Assign(Jpeg);
    Finally
     // Corriente.Clear;
     // Jpeg.CleanupInstance;
      Corriente.Free;
      Jpeg.Free;
      M_VOP_Logo.InitialDir:='';
    end;
    end
  else // el usuario le ha dado al boton cancelar o ha cerrado la ventana con la X
  begin
  // FileLogo:='';
   M_VOP_Logo.filename := EmptyStr;
  end;
end;

Y este el de mostrarla de nuevo al navegar por la base de datos:
Código Delphi [-]
procedure TF_Empresa.M_CargarLogo (sFoto: String);
var
  Jpeg: TJpegImage;
  Corriente: TMemoryStream;
begin
  if sFoto = '' then begin
    M_Img_Logo.Repaint;
    M_Img_Logo.Picture := nil;
  end else try
    Jpeg:=nil;
    Corriente:=nil;
    Jpeg      := TJpegImage.Create;   //nil;
    Corriente := TMemoryStream.Create;//nil;  
    //Jpeg.LoadFromFile ('\\GARRY\CGeSt\Datos\Logos\'+sFoto);
    Jpeg.LoadFromFile (G_Img_Logos_URL+sFoto);
    Jpeg.SaveToStream (Corriente);
    Corriente.Seek (0, soFromBeginning);
    Jpeg.LoadFromStream (Corriente);
    M_Img_Logo.Picture.Assign (Jpeg);
  finally
    M_Img_Logo.Repaint;
    M_Img_Logo.Picture := nil;
    Corriente.Free;
    Jpeg.Free;
  end;
end;

Mi ruta de la aplicación es "C:\COGS\CGeSt\". Primero selecciono una imagen y me la muestra pero buscarla una segunda vez (el segundo trozo de código), casca. Al depurar la ejecución veo que la variable es correcta y vale "Loly\Datos\Logos\", pero me devuelve el error porque toma una ruta incorrecta (me duplica esta que acabo de ecribir):
Cita:
---------------------------
Debugger Exception Notification
---------------------------
Project CGeSt.exe raised exception class EFOpenError with message 'Cannot open file "C:\COGS\CGeSt\Loly\Datos\Logos\Loly\Datos\Logos\alfa.jpg". El sistema no puede encontrar la ruta especificada'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Van varios días de pruebas y no entiendo ni jota, ¿podría ayudarme alguien, por favor? Si falta aclarar algo, no duden en preguntar. Gracias de antemano
Responder Con Cita
  #2  
Antiguo 01-09-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, Jpeg.LoadFromFile (G_Img_Logos_URL+sFoto);
sera eso no? hazte un showmessage antes de cada llamada a loadfromfile de lo que le pasas, creo que simplemente estas sumando un directorio con un nombre de fichero con path
Responder Con Cita
  #3  
Antiguo 01-09-2008
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: nov 2007
Posts: 60
Poder: 17
Garry Va por buen camino
Talking Me temo que no es eso

Hola, coso, gracias por la asistencia.

Como decía, en la depuración se observa que el valor de las variables es correcto:
G_Img_Logos_URL = 'Loly\Datos\Logos\'
sFoto = 'alfa.jpg'

Y un ShowMessage me lo confirma. Si lo hago literalmente también me rula.

El problema debe estar en que guarda en algún sitio la anterior ruta durante el primer procedimiento (el de asignación). Además, al navegar por la base de datos con valores ya guardados sólo se ejecuta el segundo procedimiento. En este caso, ¡todo marcha perfectamente!

¿Puede ser debido a una mala utilización del ExtractFileName?
__________________
Mi última duda en el foro: TJpegImage.LoadFromFile repite parte de mi ruta!!

Última edición por Garry fecha: 01-09-2008 a las 10:21:10. Razón: Añadir negrita...
Responder Con Cita
  #4  
Antiguo 01-09-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Código Delphi [-]
  Jpeg:=nil;
    Corriente:=nil;
    FileLogo:=ExtractFileName(M_VOP_Logo.Filename);
   // URLLogos:=  URLLogos+FileLogo;
    //mostramos la foto para su comprobacion
    try
      Jpeg:=TJpegImage.Create;
     Jpeg.LoadFromFile(M_VOP_Logo.FileName);

bueno, aqui jpeg.loadfromfile se tendria que llamar con el path incluido, no haria falta extraer tansolo el filename.

PD : edito, nada, no le veo error
Responder Con Cita
  #5  
Antiguo 01-09-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
ni idea, tampoco lo entiendo... quiza tendrias que poner mas codigo e indicar donde te salta exactamente
Responder Con Cita
  #6  
Antiguo 01-09-2008
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: nov 2007
Posts: 60
Poder: 17
Garry Va por buen camino
Sí, perdona. En la siguiente línea del 2º procedimiento:
Código Delphi [-]
Jpeg.LoadFromFile (G_Img_Logos_URL+sFoto);
__________________
Mi última duda en el foro: TJpegImage.LoadFromFile repite parte de mi ruta!!
Responder Con Cita
  #7  
Antiguo 01-09-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Creo que ya se

Código Delphi [-]
G_Img_Logos_URL = 'Loly\Datos\Logos\'
sFoto = 'alfa.jpg'

Al no indicar ni la unidad ni el directorio raiz de Loly\datos\...te inicia en el directorio de la aplicacion. Prueba de poner G_Img_Logos_Url := 'c:\etc...';
Responder Con Cita
  #8  
Antiguo 01-09-2008
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: nov 2007
Posts: 60
Poder: 17
Garry Va por buen camino
Me toca aclarar las rutas porque no parece que sea lo que comentas, ya que lo que se repite está fuera de la ruta base de la aplicación:
- Ruta de la aplicación: 'C:\COGS\CGeSt'
- Ruta de imágenes a cargar: 'C:\COGS\CGeSt\Loly\Datos\Logos\'
- Fichero de prueba: 'alfa.jpg'
__________________
Mi última duda en el foro: TJpegImage.LoadFromFile repite parte de mi ruta!!
Responder Con Cita
  #9  
Antiguo 01-09-2008
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: nov 2007
Posts: 60
Poder: 17
Garry Va por buen camino
Thumbs up ¡Eureka!

¡¡¡Biennnn!!! Ya lo tengo: el OpenFileDialog tiene una opción clave que yo desconocía porque me estoy inciando con este componente: ofNoChangeDir, que por defecto está a False, pero debe estar a True.

Esta opción permite desctivar que mi ruta de ejecución cambie cuando se navega con el componente por los directorios, con lo que, al pretender usar una ruta relativa posteriormente, ésta se ve afectada y toma la ruta anteriormente cambiada.

Oye, coso, muchas gracias por tus intentos. Saludiños
__________________
Mi última duda en el foro: TJpegImage.LoadFromFile repite parte de mi ruta!!
Responder Con Cita
  #10  
Antiguo 01-09-2008
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: nov 2007
Posts: 60
Poder: 17
Garry Va por buen camino
Por cierto, si añado la ruta absoluta funciona, claro, pero no me interesa porque quiero que los datos "cuelguen" del mismo directorio que la aplicación
__________________
Mi última duda en el foro: TJpegImage.LoadFromFile repite parte de mi ruta!!
Responder Con Cita
  #11  
Antiguo 01-09-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Cita:
Me toca aclarar las rutas porque no parece que sea lo que comentas, ya que lo que se repite está fuera de la ruta base de la aplicación:
- Ruta de la aplicación: 'C:\COGS\CGeSt'
- Ruta de imágenes a cargar: 'C:\COGS\CGeSt\Loly\Datos\Logos\'
- Fichero de prueba: 'alfa.jpg'
bueno, lo que me referia es que si asignas este valor a G_Img_Logos_URL
Código:
G_Img_Logos_URL = 'Loly\Datos\Logos\'
sFoto = 'alfa.jpg'
al estar mal hecha la ruta G_Img_Logos_URL, pues le falta directorio raiz y unidad, te debe tomar el 'Current dir' como raiz, sumandole lo de 'loly\datos\logos\', y el current dir en ese momento seguramente era el mismo 'c:\COGS\CGEST\loly\datos\logos\' probablemente, si no la ruta de la aplicación. G_Img_Logos_URL deberia ser 'c:\...etc...\loly\datos\logos'. Si lo que quisieras es que te colgara desde la aplicacion, entonces :
Código Delphi [-]
G_Img_Logos_URL := ExtractFilePath(Application.Exename) + '\loly\datos\logos';
saludos

pd :
Cita:
el OpenFileDialog tiene una opción clave que yo desconocía porque me estoy inciando con este componente: ofNoChangeDir
casi seguro q es eso, pues con esta opcion no se cambia el 'Current Dir' al navegar con el opendialog. Ahora bien, si tienes alguna ventana del explorador abierta mientras ejecutas tu aplicación, te cambiaria tambien el directorio actual, por lo que te recomiendo que coloques correctamente G_Img_Logos_URL := ExtractFilePath(Application.Exename) + 'loly\datos\logos';

Última edición por coso fecha: 01-09-2008 a las 12:00:18.
Responder Con Cita
  #12  
Antiguo 01-09-2008
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: nov 2007
Posts: 60
Poder: 17
Garry Va por buen camino
Cita:
Empezado por coso Ver Mensaje
bueno, lo que me referia es que si asignas este valor a G_Img_Logos_URL [...] si no la ruta de la aplicación. G_Img_Logos_URL deberia ser 'c:\...etc...\loly\datos\logos'. Si lo que quisieras es que te colgara desde la aplicacion, entonces :
Código Delphi [-]G_Img_Logos_URL := ExtractFilePath(Application.Exename) + '\loly\datos\logos';

saludos
¡Ah, vale! Exactamente era como dices, no te había entendido, pero supongo que me sirvió como orientación, gracias.

De todas formas, como soy un fanático de la optimización (lo que puse al principio debía su desorden al desconcierto de las pruebas, jeje ).
Cita:
Empezado por coso Ver Mensaje
pd :
casi seguro q es eso, pues con esta opcion no se cambia el 'Current Dir' al navegar con el opendialog.
No, sin el "casi": es exactamente por eso, ya está verificado
Cita:
Empezado por coso Ver Mensaje
Ahora bien, si tienes alguna ventana del explorador abierta mientras ejecutas tu aplicación, te cambiaria tambien el directorio actual, por lo que te recomiendo que coloques correctamente G_Img_Logos_URL := ExtractFilePath(Application.Exename) + 'loly\datos\logos';
Córcholis, ¿seguro? Yo pensaba que cada aplicación tiene su propio directorio. Mañana lo compruebo...
__________________
Mi última duda en el foro: TJpegImage.LoadFromFile repite parte de mi ruta!!
Responder Con Cita
  #13  
Antiguo 01-09-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
yo lo haria por si acaso
Responder Con Cita
  #14  
Antiguo 01-09-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
http://msdn.microsoft.com/en-us/libr...06(VS.85).aspx

si por a o por b se te cambia el directorio activo, ya no te funcionaria
Responder Con Cita
  #15  
Antiguo 02-09-2008
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: nov 2007
Posts: 60
Poder: 17
Garry Va por buen camino
He consultado el enlace que mandas, pero no me ilustra sobre si el CurrentDirectory es un dato para cada aplicación o algo más global, del sistema operativo.

Yo creo recordar que, en mis tiempos de facultad (Windows 3, ¡qué tiempos aquellos! ), nos habían enseñado que era un "parámetro local", pero no lo tengo claro hasta que vuelva a tener la aplicación estable para probarlo, que, como dices, creo que es recomendable.
__________________
Mi última duda en el foro: TJpegImage.LoadFromFile repite parte de mi ruta!!
Responder Con Cita
  #16  
Antiguo 02-09-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
si, yo tambien hablaba pensando en windows 98 etc... pero ya te digo q lo haria asi, escribiendo la ruta absoluta mediante el extractfilepath, por si acaso. saludos.
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
como mostrar una pagina(html) parte por parte? gabrielflowers PHP 10 02-04-2008 00:37:21
problemas con el LoadFromFile sac OOP 14 19-07-2007 16:55:34
LoadFromFile con una progressbar Jesús Pena Varios 5 18-04-2007 20:19:24
TJpegImage en BDS 2006 johurgi Gráficos 11 27-10-2006 12:23:57
TJpegImage u otro daly Gráficos 2 16-11-2003 21:20:16


La franja horaria es GMT +2. Ahora son las 02:59:57.


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