Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-01-2010
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Wink ShellExecute y PChar "Truncador"

Hola, intento ejecutar una determinada aplicación (entiendase Excel, acrobat reader, word, ...) y que abra un determinado documento asociado a esa aplicación (entiendase Excel, acrobat reader, word, ...) .

Con la siguiente función 'BuscaEjecutable' obtengo el archivo ejecutable asociado al fichero con su ruta completa.
P.e. si Fichero es la cadena 'nomarchivo.doc' me devuelve el valor: 'C:\Archivos de programa\Microsoft Office\Office\WINDWORD.EXE'

Código Delphi [-]
function TFDocAsoLuminaria.BuscaEjecutable(Fichero:string):String;
var
    Ejecutable:Pchar;
 begin
    GetMem(Ejecutable,200);
    FindExecutable(Pchar(Fichero),nil,Ejecutable);
    Result:=String(Ejecutable);
    FreeMem(Ejecutable,200);
end;

Se supone pues que teniendo el archivo que quiero abrir (en este caso de ejemplo de tipo doc asociado a word de office 'nomarchivo.doc') y por otro lado tengo la ruta completa de donde se encuentra el ejecutable que hace posible la visualización del Fichero 'C:\Archivos de programa\Microsoft Office\Office\WINDWORD.EXE', con la siguiente instrucción me abre el word con el documento

Código Delphi [-]
      PathExe := BuscaEjecutable(DMGIS.ADOQ_DocLuminariaRuta.value);   // Traure el ejecutable associat al'extensió del fitxer
      ShellExecute(0, 'open', PChar(PathExe), PChar(fichero_w), nil, SW_SHOW);    // Ejecutar el exe associat amb el fitxer per obrir-lo

Pero.......
Problema: Si en lugar de llamarse el fichero 'nomarchivo.doc', se llama 'nom archivo.doc' (es decir tiene espacios en blanco), me corta el nombre (y solo me pasa con los que tienen extensión doc. Con las demás naturalezas de fichero funciona aunque tenga estos espacios en blanco en su nombre.) y me lo deja como nom.doc y claro no se abre pq no lo encuentra.


Pregunta: ¿Alguien sabe como puedo pasar ese parametro que debe ser de tipo pointer, a partir de una cadena String sin que se me trunque de ese modo?

Gracias, gracias
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.

Última edición por Cabanyaler fecha: 13-01-2010 a las 18:19:38.
Responder Con Cita
  #2  
Antiguo 13-01-2010
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
reemplaza nom archivo.doc por "nom archivo.doc", es muy sencillo
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 13-01-2010
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Cita:
Empezado por droguerman Ver Mensaje
reemplaza nom archivo.doc por "nom archivo.doc", es muy sencillo
Comorrrr???
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #4  
Antiguo 13-01-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Creo que quiere decir que pruebes a pasar el nombre del fichero incluyendo dobles comillas:

Código Delphi [-]
 
// Algo así
ShellExecute(0, 'open', PChar(PathExe), PChar('"' + fichero_w + '"'), nil, SW_SHOW);
// O mejos esta
ShellExecute(0, 'open', PChar(PathExe), PChar(QuotedStr(fichero_w)), nil, SW_SHOW);
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 13-01-2010
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Creo que quiere decir que pruebes a pasar el nombre del fichero incluyendo dobles comillas:

Código Delphi [-]
 
// Algo así
ShellExecute(0, 'open', PChar(PathExe), PChar('"' + fichero_w + '"'), nil, SW_SHOW);
// O mejos esta
ShellExecute(0, 'open', PChar(PathExe), PChar(QuotedStr(fichero_w)), nil, SW_SHOW);
Dudo que funcione con quotedStr, hay que usar comillas dobles
__________________
self.free;
Responder Con Cita
  #6  
Antiguo 14-01-2010
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Talking

Código Delphi [-]
ShellExecute(0, 'open', PChar(PathExe), PChar('"' + fichero_w + '"'), nil, SW_SHOW);



Correcto.
Gracias, muchas gracias.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #7  
Antiguo 14-01-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por droguerman Ver Mensaje
Dudo que funcione con quotedStr, hay que usar comillas dobles
Cierto,... despiste mío
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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
"OBJECT OR CLASS TYPE REQUIRED" en "APPLICATION EXENAME" Xavierator Varios 3 27-10-2008 09:09:50
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
¿cuál es mejor: "close" o "application.terminate"? unreal4u Varios 5 05-03-2007 11:01:19
ShellExecute y "c:\WINDOWS\system32\telephon.cpl" Durbed API de Windows 7 20-12-2005 21:33:04


La franja horaria es GMT +2. Ahora son las 00:06:25.


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