Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-02-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 20
Ohcan Va por buen camino
Question Problemas con Picture.LoadFromFile

Hola a todos

Estoy teniendo un problema....
Os pongo el código:
Código Delphi [-]
procedure TwPrincipal.ShellListViewClick(Sender: TObject);
var
Ruta:string;
Foto:TPicture;
begin
if ShellListView.SelectedFolder<>nil then
Ruta := ExtractFilePath(ShellListView.RootFolder.PathName) +
ShellListView.SelectedFolder.DisplayName
else Exit;
//ShowMessage(Ruta); //Para ver qué pasa
if (UpperCase(ExtractFileExt(Ruta))='.GIF') or
(UpperCase(ExtractFileExt(Ruta))='.BMP') or
(UpperCase(ExtractFileExt(Ruta))='.JPG')then
begin
Foto := TPicture.Create;
Foto.LoadFromFile(Ruta);//'D:\Cosas\101.gif' Si pongo la ruta así funciona
Imagen.Picture := Foto; //Imagen es un TImage
Foto.Free;
end;
end;

El problema está en Foto.LoadFromFile(Ruta);
He comprobado que la ruta "se llena" correctamente... de verdad ¡es correcta!
pero en esa línea me canta el error:
Cannot open file "Aquí pone la ruta". El sistema no puede hallar el archivo especificado.
¡Lo flipo!
Sin embargo, si pongo "a pelo" una ruta (Ej:'D:\Cosas\101.gif') funciona "ferpectamente".

¿Alguno podéis echarme una mano?

Se me olvidaba... uso Delphi7.

Muchas gracias y saludos...
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)

Última edición por Ohcan fecha: 03-02-2005 a las 19:59:51. Razón: Añadir
Responder Con Cita
  #2  
Antiguo 03-02-2005
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Hola ohcan!

He revisado tú código y encontré un problema.

Si utilizas la función ExtractFilePath() ésta te elimina de la ruta el último nivel del directorio, de tal forma que cuando concatenas con DisplayName la cadena queda incompleta.

Bueno mi sugerencia es la siguiente, sólo hice algunos cambios menores.

Código Delphi [-]
procedure TForm1.ShellListViewClick(Sender: TObject);
var
  Ruta:string;
  Foto:TPicture;
begin
   if ShellListView.SelectedFolder<>nil then
     Ruta := IncludeTrailingPathDelimiter(ShellListView.RootFolder.PathName) +
               ShellListView.SelectedFolder.DisplayName
   else
     Exit;
   if(UpperCase(ExtractFileExt(Ruta))='.GIF') or
    (UpperCase(ExtractFileExt(Ruta))='.BMP') or
    (UpperCase(ExtractFileExt(Ruta))='.JPG')then
    begin
       Foto := TPicture.Create;
       Foto.LoadFromFile(Ruta);
       Imagen.Picture := Foto;
       Foto.Free;
    end
   else
      Imagen.Picture:=nil; // Si el archivo no es algún formato conocido limpia la imagen
end;

Seguimos en contacto, un saludo.
Responder Con Cita
  #3  
Antiguo 04-02-2005
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile Dos sugerencias

¡Hola a todos!

Ohcan:

Espero que te haya funcionado la importante observación que hizo Hector.

Por otra parte, después de examinar el código fuente detecté dos bloques que pueden simplificarse:

En lugar de:
Código:
Foto := TPicture.Create;
Foto.LoadFromFile (Ruta);
Imagen.Picture := Foto;
Foto.Free;
creo que puedes poner simplemente:
Código:
Imagen.Picture.LoadFromFile (Ruta);
Y en lugar de:
Código:
if (UpperCase(ExtractFileExt(Ruta))='.GIF') or
(UpperCase(ExtractFileExt(Ruta))='.BMP') or
(UpperCase(ExtractFileExt(Ruta))='.JPG')then
podría sugerir el uso de la función ghEnCadenas (unidad IGHCadenas.pas de Interfaz GH 7) de la siguiente manera:
Código:
If ghEnCadenas (['.GIF', '.BMP', '.JPG'], ExtractFileExt (Ruta)) Then
La función ghEnCadenas devuelve True si la cadena indicada se encuentra dentro (en) del arreglo dado, con la ventaja de que la comparación es insensible al tamañao (no importa si la extensión del archivo está en mayúsculas o en minúsculas).

Espero esto sea de utilidad, seguimos en contacto.

Al González .

Última edición por Al González fecha: 23-04-2005 a las 02:54:43.
Responder Con Cita
  #4  
Antiguo 04-02-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Y qué tal así?

Código Delphi [-]
if Pos(ExtractFileExt(Ruta) + '?', '.GIF?.BMP?.JPG?') <> 0 then

// Saludos
Responder Con Cita
  #5  
Antiguo 04-02-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 20
Ohcan Va por buen camino
Thumbs up Gracias

¡Muchas gracias a todos!
Ahora funciona perfectamente... y ahora me estudiaré bien el porqué (no me gusta tropezar 2 veces en la misma piedra...).
Al, lo de la variable Foto era porque ayer (hoy funciona bien como tú dices) no me cogía los jpg si no lo hacía así (??).
Lo del ghEn no me funciona, pero investigaré un poco (aún no he podido)...
Y, gracias, Roman. Me ha parecido una solución muy elegante, pero he tendio que modificarla:
if (ExtractFileExt(Ruta)<>'') and //para que no tenga en cuenta las carpetas
(Pos(UpperCase(ExtractFileExt(Ruta)) + '?', '.GIF?.BMP?.JPG?')<>0) then


Saludos
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)

Última edición por Ohcan fecha: 04-02-2005 a las 10:17:46. Razón: Corregir y ampliar
Responder Con Cita
  #6  
Antiguo 04-02-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Ohcan
pero he tendio que modificarla:
if (ExtractFileExt(Ruta)<>'') and //para que no tenga en cuenta las carpetas
(Pos(UpperCase(ExtractFileExt(Ruta)) + '?', '.GIF?.BMP?.JPG?')<>0) then
Cierto, no cubría el caso de extensiones vacías, aunque creo que esto debe funcionar:

Código Delphi [-]
if Pos('*' + Uppercase(ExtractFileExt(Ruta)) + '?', '*.GIF?*.BMP?*.JPG?') <> 0 then

// Saludos
Responder Con Cita
  #7  
Antiguo 04-02-2005
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Hola de nuevo!

Cita:
Empezado por Ohcan
...Lo del ghEn no me funciona, pero investigaré un poco (aún no he podido)...
Pues estoy a tus órdenes, si te puedo ayudar en algo.

Saludos.

Al González .

Si el oído pensara, el corazón hablaría.
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


La franja horaria es GMT +2. Ahora son las 12:48:51.


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