Ver Mensaje Individual
  #1  
Antiguo 13-01-2010
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Reputación: 24
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