Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Abrir cualquier documento (https://www.clubdelphi.com/foros/showthread.php?t=26742)

Ivan_25 02-11-2005 10:21:38

Abrir cualquier documento
 
Hola a tod@s!. Tengo unas fichas de personas, y lo que quiero saber es como hacer para que al hacer click en un boton se me abra el documento que tiene asociado una persona, ya sea word, excel, html, pdf o lo que sea. El nombre del documento sera codigo.doc, o codigo.html, etc, y codigo es el codigo de la persona que esta guardado en un campo de una tabla en una bd access, y que muestro en un DBEdit (conexion ADO). ¿Se puede hacer que me salga una vista previa de este documento como hace windows?. Gracias a tod@s.

Neftali [Germán.Estévez] 02-11-2005 12:19:19

Busca ayuda sobre ShellExecute.

Código Delphi [-]
 ShellExecute(Self.Handle, 'open', PChar('codigo.doc'), nil, nil, 0);
 ShellExecute(Self.Handle, 'open', PChar('codigo.html'), nil, nil, 0);
 ...
 ShellExecute(Self.Handle, 'open', PChar(DBEdit1.Text), nil, nil, 0);

Ivan_25 02-11-2005 12:29:40

He encontrado esto
 
Hola Neftali. He encontrado el siguiente trozo de codigo:

ShellExecute(NULL, "open", DBECodigo->Text.c_str(), NULL, NULL, SW_SHOWNORMAL)

El problema que tengo es que en DBECodigo tengo el codigo de la persona que es el nombre del archivo, pero me falta la extension y la ruta hasta éste. He probado haciendo:

ShellExecute(NULL, "open", "expedientes/"+DBECodigo->Text.c_str()+".pdf", NULL, NULL, SW_SHOWNORMAL)

pero me da fallo. ¿Sabes cual es el problema?. Gracias por contestar tan rapido. ;)

Casimiro Notevi 02-11-2005 12:46:25

Código:

  "expedientes/"+DBECodigo->Text.c_str()+".pdf"
¿y eso devuelve una ruta y nombre correctas?, en principio, si es windows, la barra debe ir del revés '\'...

Ivan_25 02-11-2005 12:58:01

Me da fallo
 
Si utilizo

ShellExecute(NULL, "open", "expedientes/"+DBECodigo->Text.c_str()+".pdf",NULL, NULL, SW_SHOWNORMAL);

me da fallo de puntero no valido en el '+'.

Si utilizo

ShellExecute(NULL, "open", "expedientes\"+DBECodigo->Text.c_str()+".pdf",NULL, NULL, SW_SHOWNORMAL);

con la barra al reves me da varios fallos como cadena no terminada, o que me falta ->, etc..

Casimiro Notevi 02-11-2005 13:15:42

¿y has probado a crear la cadena antes y luego pasarla al shellexecute?
Código:

cVariable = "expedientes/" + DBECodigo->Text.c_str() + ".pdf";
  ShellExecute(NULL, "open",cVariable,NULL, NULL, SW_SHOWNORMAL);

de paso puedes ver qué hay realmente en cVariable.

Ivan_25 02-11-2005 13:21:33

Sigue igual
 
Sigue dando los mismos fallos que si le pongo toda la cadena en el shellexecute al hacerlo como has dicho.

Casimiro Notevi 02-11-2005 13:35:07

perdona, pero ¿esa cadena es "correcta"?, o sea, te sale algo así como: "\expedientes\pepito.pdf" ¿es válida?

Ivan_25 02-11-2005 16:24:41

No es correcta
 
No entiendo muy bien tu pregunta, pero es que me da fallo al compilar la aplicacion, asi que tampoco puedo ver el valor de cVariable.

Neftali [Germán.Estévez] 02-11-2005 17:15:10

Cita:

Empezado por Ivan_25
...pero es que me da fallo al compilar la aplicacion, asi que tampoco puedo ver el valor de cVariable.

¿Qué fallo de compilación? ¿Parámetros incorrectos?

Ivan_25 02-11-2005 20:04:07

El error
 
El error que me da es "Invalid pointer addition"

"expedientes/" + DBECodigo->Text.c_str() + ".pdf"

es decir, falla en el signo '+'

Ivan_25 03-11-2005 10:46:52

Ya esta solucionado
 
Es un poco chapucero, pero funcionar, funciona:

String ruta = "expedientes/";
String nombre;
String rutanombre1;
String rutanombre2;
String rutanombre3;
String rutanombre4;
String rutanombre5;
String extension1;
String extension2;
String extension3;
String extension4;
String extension5;
if(DBECodigo->Text=="")
{
ShowMessage("No hay asignado ningún curriculum");
}
else
{
nombre = DBECodigo->Text.Trim();
extension1 = ".pdf";
extension2 = ".htm";
extension3 = ".jpg";
extension4 = ".doc";
extension5 = ".xls";
rutanombre1 = ruta + nombre + extension1;
rutanombre2 = ruta + nombre + extension2;
rutanombre3 = ruta + nombre + extension3;
rutanombre4 = ruta + nombre + extension4;
rutanombre5 = ruta + nombre + extension5;
ShellExecute(NULL, "open", rutanombre1.c_str() ,NULL, NULL, SW_SHOWNORMAL);
ShellExecute(NULL, "open", rutanombre2.c_str() ,NULL, NULL, SW_SHOWNORMAL);
ShellExecute(NULL, "open", rutanombre3.c_str() ,NULL, NULL, SW_SHOWNORMAL);
ShellExecute(NULL, "open", rutanombre4.c_str() ,NULL, NULL, SW_SHOWNORMAL);
ShellExecute(NULL, "open", rutanombre5.c_str() ,NULL, NULL, SW_SHOWNORMAL);


La franja horaria es GMT +2. Ahora son las 02:14:40.

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