Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-07-2007
nogoncar nogoncar is offline
Registrado
 
Registrado: jul 2007
Posts: 2
Poder: 0
nogoncar Va por buen camino
problema con el ShellExecute

Hola,

necesito que alguien me heche una mano con un problemilla que tengo.

Hice una aplicación y tengo creado un boton de ayuda. Lo que quiero es que al pulsar en él pueda visualizar un pdf de ayuda (un manual).

Este es el código que tengo escrito, pero al pulsar en el icono de ayuda simplemente no hace nada, ni da ningún tipo de error....

void __fastcall TForm1::IconoAyudaClick(TObject *Sender)
{
ShellExecute(GetActiveWindow(), "open", "E:\proxecto\ULTIMO\ayuda\ayuda.pdf" , NULL, NULL, SW_SHOWNORMAL);
}

¿alguien tiene idea de porque, o sabe alguna otra manera que pueda funcionar?

gracias
Responder Con Cita
  #2  
Antiguo 09-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Primero que nada (aunque parezca simple) comprueba que existe el archivo en cuestión. Por otro lado comprueba el resultado de la función "ShellExecute", y llegado el caso comprueba también el último error con la función "GetLastError()".

Código Delphi [-]

if ShellExecute({parámetros}) <= 32 then
begin
  ShowMessage( SysErrorMessage( GetLastError() ) );
end;

Edito: Tal vez me pasé de listo. Mirando la ayuda no veo referencia a que pueda usarse "GetLastError()"... y sí a que la función puede retornar un entero menor o igual que 32 en caso de éxito, o uno de los siguientes enteros/constantes en caso de error:

Código:
0 The operating system is out of memory or resources. 
ERROR_FILE_NOT_FOUND The specified file was not found. 
ERROR_PATH_NOT_FOUND The specified path was not found. 
ERROR_BAD_FORMAT The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image). 
SE_ERR_ACCESSDENIED The operating system denied access to the specified file. 
SE_ERR_ASSOCINCOMPLETE The file name association is incomplete or invalid. 
SE_ERR_DDEBUSY The Dynamic Data Exchange (DDE) transaction could not be completed because other DDE transactions were being processed. 
SE_ERR_DDEFAIL The DDE transaction failed. 
SE_ERR_DDETIMEOUT The DDE transaction could not be completed because the request timed out. 
SE_ERR_DLLNOTFOUND The specified DLL was not found. 
SE_ERR_FNF The specified file was not found. 
SE_ERR_NOASSOC There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable. 
SE_ERR_OOM There was not enough memory to complete the operation. 
SE_ERR_PNF The specified path was not found. 
SE_ERR_SHARE A sharing violation occurred.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 09-07-2007 a las 22:40:18.
Responder Con Cita
  #3  
Antiguo 09-07-2007
nogoncar nogoncar is offline
Registrado
 
Registrado: jul 2007
Posts: 2
Poder: 0
nogoncar Va por buen camino
Gracias por la ayuda, ya he solucionado el problema gracias a la función que me pasaste para ver el último error.

No encontraba el archivo especificado!

Lo raro es que era porque ponía una barra para los directorios en vez de 2, así funciona:

"E:\\proxecto\\ULTIMO\\ayuda\\ayuda.pdf"

no tenía ni idea de que tenía que indicar así los subdirectorios!!!

Gracias de nuevo
Responder Con Cita
  #4  
Antiguo 09-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pues es verdad... yo no había caído tampoco.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 10-07-2007
cocomo cocomo is offline
Registrado
 
Registrado: ago 2006
Posts: 4
Poder: 0
cocomo Va por buen camino
Buenas, la verdad es que yo utilizo el siguiente procedimiento:

Código Delphi [-]
procedure ImprimirDoc(NombreDoc : string);
begin
  if ShellExecute(0, 'print', PChar(NombreDoc), nil, nil, SW_HIDE) <= 32 then
  begin
    ShowMessage('Fallo Acrobat');
  end;
end;

y la cadena que le paso como argumento no tiene porque llevar doble contrabarra, es decir yo llamo al procedimiento tal que asi:

Código Delphi [-]
ImprimirDoc('C:\CERTIFICADOS\AM_11-135.pdf');

En mi caso le digo que lo imprima directamente sin mostrarlo por pantalla, pero vamos pienso yo que será lo mismo print que open.
De todas formas yo uso windows 2000 server y delphi 6 por si puede influir en algo.
Responder Con Cita
  #6  
Antiguo 10-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Cita:
Empezado por cocomo
y la cadena que le paso como argumento no tiene porque llevar doble contrabarra (...)
Se trata de C++. En este lenguaje (como en C y algún otro derivado) es precisa la "contrabarra", puesto que esta es un caracter de escape, de modo que hay que indicar expresamente (con una doble barra) que lo que se quiere realmente es una barra... no sé si me explico.
__________________
David Esperalta
www.decsoftutils.com
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
Problema con shellexecute ebeltete API de Windows 4 21-10-2006 01:23:12
Problema con ShellExecute Walterdf Varios 9 18-11-2005 21:44:19
shellexecute. REHome API de Windows 2 26-09-2005 12:23:25
Problema con ShellExecute hector_etv Varios 1 07-08-2005 05:11:47
ShellExecute arantzal Varios 0 04-05-2005 12:31:03


La franja horaria es GMT +2. Ahora son las 01:38:35.


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