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
  #21  
Antiguo 23-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 [-]
ShellExecute(Handle, 'Open', 'Photoshop', pchar('"' + ListBox1.Items[ListBox1.ItemIndex] + '"'), nil, SW_SHOW);
esta linea no te funciona...prueba abrir photoshop desde consola con algun parametro, a ver que ocurre.
Responder Con Cita
  #22  
Antiguo 23-09-2008
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
Yo pediría primero esto:

Código Delphi [-]
var
  S: String;

...

S := '"' + ListBox1.Items[ListBox1.ItemIndex] + '"';
ShowMessage(S);
ShellExecute(Handle, 'Open', 'Photoshop', pchar(S), nil, SW_SHOW);

y que nos diga exactamente que dice el ShowMessage.

// Saludos
Responder Con Cita
  #23  
Antiguo 23-09-2008
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
¡Hola!

Cita:
Empezado por Delphius Ver Mensaje
...es posible que se deba a que la propiedad Items es de tipo TStrings y la función PChar() no interpreta apropiadamente este tipo...
Si Items es un derivado de TStrings, entonces la expresión ListBox1.Items[ListBox1.ItemIndex] es de tipo String, y por tanto no presenta problemas para convertirse a PChar.

Cuando pasa algo como esto, lo primero que solemos hacer es verificar cuál es el valor que está arrojando la expresión sospechosa. Una instrucción como
Código Delphi [-]
ShowMessage ('[' + ListBox1.Items[ListBox1.ItemIndex] + ']');
(o usar el depurador) bastaría para empezar a indagar dónde está el problema.

Saludos.

Al.
Responder Con Cita
  #24  
Antiguo 23-09-2008
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 esos corchetes?

// Saludos
Responder Con Cita
  #25  
Antiguo 23-09-2008
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Curioso, pero acabo de realizar la siguiente prueba y funciona correctamente.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
s:String;
begin
s:= ListBox1.Items[ListBox1.ItemIndex];
ShellExecute(Handle, 'Open', 'Photoshop',PChar(s) , nil, SW_SHOW);
end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #26  
Antiguo 23-09-2008
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
Marcos, en tu prueba, ¿qué contiene ListBox1.Items[ListBox1.ItemIndex]? Hay algún espacio?

// Saludos
Responder Con Cita
  #27  
Antiguo 23-09-2008
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Exactamente:

C:\Fotos\ClubDelphi\jachguate.jpg


Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #28  
Antiguo 23-09-2008
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
Cita:
Empezado por roman Ver Mensaje
¿Y esos corchetes?

// Saludos
Ah, los corchetes.

Son, si no me equivoco, para lo mismo que tú has empleado las comillas dobles a los extremos de la concatenación (ahora he visto que ambos planteamos al mismo tiempo la sugerencia del ShowMessage ). Vaya, que lo importante es usar algún par de caracteres visibles a los extremos para ver si de casualidad la cadena en cuestión lleva algún carácter invisible al comienzo o al final que sea la causa de la anomalía presentada.

Saludos.

Al.

P.D. En mi caso el uso de corchetes es una antigua y arraigada costumbre.
Responder Con Cita
  #29  
Antiguo 23-09-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
ListBox1.Items.Strings[ListBox1.ItemIndex] viene a ser lo mismo que ListBox1.Items[ListBox1.ItemIndex].

Yo opino como coso, la última línea que pone es la misma que al principio, o sea ...

// Saludos
Me consta de que es lo mismo... no más lo decía para probar, y sacar dudas... me resulta tan extraño que no funcione con leer desde Items... que me dije ¡entonces probemos con otra cosa!

Para mi que hay algun dedito de por medio O la última... en una de esas PhotoShop espera otros parámetros antes y/o después ¡Ya no se que podría decir! Se me acaban las ideas. No tengo Photoshop.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #30  
Antiguo 24-09-2008
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 Al González Ver Mensaje
Son, si no me equivoco, para lo mismo que tú has empleado las comillas dobles a los extremos de la concatenación
Pues no Al, las comillas dobles no están para ver si algo se nos escapa. Son imperativas. Vamos a ver un ejemplo más detallado (con Gimp, pues no tengo Photoshop).

Este fragmento fallará:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Exe: String;
  Params: String;

begin
  Exe := 'C:\Archivos de programa\GIMP-2.0\bin\gimp-2.2.exe';
  Params := 'C:\Documents and Settings\roman\Mis documentos\bookmark.png';
  ShellExecute(Handle, 'open', PChar(Exe), PChar(Params), nil, SW_SHOW);
end;

El error que manda Gimp es éste:




y eso que, al parecer, intenta varias cosas. Pero lo que se observa aquí es que los espacios en la ruta del archivo de la imagen, confunden al ejecutable pues es como si se mandaran varios parámetros.

De hecho, si se manda ese mismo Params a una aplicación Delphi, ParamCount muestra que hay cuatro parámetros:
  • C:\Documents
  • and
  • Settings\roman\Mis
  • documentos\bookmark.png

Por eso son necesarias las comillas dobles. Si el fragmento anterior las incluye:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Exe: String;
  Params: String;

begin
  Exe := 'C:\Archivos de programa\GIMP-2.0\bin\gimp-2.2.exe';
  Params := '"C:\Documents and Settings\roman\Mis documentos\bookmark.png"';
  ShellExecute(Handle, 'open', PChar(Exe), PChar(Params), nil, SW_SHOW);
end;

Gimp abre el archivo sin problemas.

Todo radica en un ejecutable y los parámetros que se mandan. Si un parámetro contiene espacios entonces debe encerrarse entre comillas dobles. Esto es independiente de si es Photoshop, Gimp o cualquier otro programa, de dibujo o de lo que sea.

// Saludos
Responder Con Cita
  #31  
Antiguo 24-09-2008
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Anoche no seguí porque ya era algo tarde, pero confirmo lo que dice Román, estuve haciendo pruebas y en cuanto la ruta contiene espacios en blanco no funciona, por lo tanto es imperativo el uso de las comillas dobles.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #32  
Antiguo 24-09-2008
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
Hola,
Sólo apostillar que la respuesta que te han dado los compañeros es correcta.

He hecho pruebas con este código y funciona perfectamente:

Código:
procedure TForm1.Button1Click(Sender: TObject);
var
  Exe: String;
  Params: String;
begin
  if ListBox1.ItemIndex<0 then ListBox1.ItemIndex:=0;
  Exe := 'C:\Archivos de programa\Adobe\Photoshop CS\PhotoShop.EXE';
  Params := QuotedStr('"'+ListBox1.Items[ListBox1.ItemIndex]+'"');
  ShellExecute(Handle, 'open', PChar(Exe), PChar(Params), nil, SW_SHOW);
end;
Observa la función QuotedStr, añade unas comillas simples al resultado de unir unas ComillasDobles + NombreFichero + ComillasDobles.

Si mi fichero es
C:\Documents and Setting\Rafita\Imagenes retocadas\Foto14.psd,
el parámetro que le pasas a ShellExecute es
'"C:\Documents and Setting\Rafita\Imagenes retocadas\Foto14.psd"'

Creo que el amigo HemSoft se había enterado con el post de Roman, pero por si acaso, añado esto.
Un saludo,
__________________
Rafita.
Responder Con Cita
  #33  
Antiguo 24-09-2008
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
yo tampoco aporto nada, tan solo la confirmación de que a mi me funciona perfectamente.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
s:String;
begin
s:= '"'+ ListBox1.Items[ListBox1.ItemIndex]+ '"';
ShellExecute(Handle, 'Open', 'Photoshop',PChar(s) , nil, SW_SHOW);
end;

y te dejo lo mismo pero con winexec por si las moscas....

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
s2:String;
begin
s2:= '"C:\Archivos de programa\Adobe\Photoshop 7.0\photoshop.exe" "'+ ListBox1.Items[ListBox1.ItemIndex]+ '"';
WinExec(PChar(s2),SW_SHOWNORMAL);
end;

que por cierto también me funciona.... aqui hay algo que no nos estas contando
Responder Con Cita
  #34  
Antiguo 24-09-2008
Avatar de HenSoft
HenSoft HenSoft is offline
Miembro
 
Registrado: ago 2008
Posts: 21
Poder: 0
HenSoft Va por buen camino
Problema resuelto

Gracias a todos por ayudarme. La idea de mostrar un mensaje o almacenarlo en una variable me demostró que tenía un \ de mas en otra parte del código y de ahí el error de photoshop.

Creo que ya podría cambiar el títuo del hilo de:

Misterio en Photoshop

a

Torpeza en Henry

Saludos y gracias a todos, son gente muy capaces

Henry
__________________
Todo es veneno y nada es veneno la diferencia está en la dosis
Responder Con Cita
  #35  
Antiguo 24-09-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por HenSoft Ver Mensaje
Gracias a todos por ayudarme. La idea de mostrar un mensaje o almacenarlo en una variable me demostró que tenía un \ de mas en otra parte del código y de ahí el error de photoshop.

Creo que ya podría cambiar el títuo del hilo de:

Misterio en Photoshop

a

Torpeza en Henry

Saludos y gracias a todos, son gente muy capaces

Henry
Ya lo decía yo...

Cita:
Empezado por Yo Ver Mensaje
Para mi que hay algun dedito de por medio
No hay problema... a todos nos suele pasar. Si me pagaran por cada despistada yo sería rico.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #36  
Antiguo 24-09-2008
Avatar de HenSoft
HenSoft HenSoft is offline
Miembro
 
Registrado: ago 2008
Posts: 21
Poder: 0
HenSoft Va por buen camino
Delphius muchas gracias, tenías razón con lo del dedito.


__________________
Todo es veneno y nada es veneno la diferencia está en la dosis
Responder Con Cita
  #37  
Antiguo 24-09-2008
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
Cita:
Empezado por roman Ver Mensaje
Pues no Al, las comillas dobles no están para ver si algo se nos escapa. Son imperativas. Vamos a ver un ejemplo más detallado...los espacios en la ruta del archivo de la imagen, confunden al ejecutable pues es como si se mandaran varios parámetros...Si un parámetro contiene espacios entonces debe encerrarse entre comillas dobles...
Claro, Román. Esto de las comillas dobles lo conocía desde hace tiempo, al fijarme cómo Windows definía las propiedades de algunos accesos directos (cuando recién se permitió el uso de espacios en las rutas de archivo), pero no me detuve a observar que no sólo mostrabas la cadena con ShowMessage, sino que además hacías la llamada a ShellExecute.

Mi sugerencia era solamente observar el valor de la cadena, para, primero que otra cosa, verificar visualmente si se trataba de un dato váldo. Mi sospecha era que hubiese algún espacio en blanco en alguno de los extremos o algún otro carácter con mayor posibilidad de conflicto (como al parecer fue el caso con la diagonal demás encontrada).

Saludos.

Al González.
Responder Con Cita
  #38  
Antiguo 25-09-2008
noeljr noeljr is offline
Registrado
 
Registrado: may 2006
Posts: 4
Poder: 0
noeljr Va por buen camino
hola:

yo he hecho pruebas y me funciona perfectamente aunque es con el Paint Shop Pro, pero creo que es igual.

lo que me gustaría saber es si en las líneas del listbox aparece toda la dirección del fichero, por ejemplo:

c:\temporal\imagen1.jpg

o si sólo aparece imagen1.jpg

si sólo aparece el nombre del fichero no se podrá abrir pero si pones en cada línea del listbox la ruta completa creo que no tendrás problema.

miguel núñez
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
Misterio. marcoszorrilla La Taberna 0 07-07-2008 20:24:53
Photoshop Online y gratuito jhonny Noticias 4 07-03-2007 22:55:06
Microsoft Acrylic - ¿Alternativa a PhotoShop? dec Noticias 2 08-09-2005 17:03:14
Utilizar archivos de photoshop (PSD) JoseQ Gráficos 6 27-09-2004 10:56:34
El Misterio de las ADO yusnerqui Varios 7 13-03-2004 17:25:15


La franja horaria es GMT +2. Ahora son las 19:46:43.


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