PDA

Ver la Versión Completa : Abrir cualquier documento


Ivan_25
02-11-2005, 10:21:38
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.


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
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
"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
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?

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 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 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
...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 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
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);