Ver Mensaje Individual
  #4  
Antiguo 16-08-2006
marioestevez marioestevez is offline
Registrado
 
Registrado: jul 2006
Posts: 9
Reputación: 0
marioestevez Va por buen camino
No me cabe dudas que usando ActiveX es esa una buena solución, pero existe una vieja solución que he tomado naturalmente de otros que resuelve muchas veces este problema aunque tal vez es algo más larguita y es mediante el uso del API de Windows. Yo les voy a mostrar el código que mejor me trabaja y pueden probar:

Debe haber una función que localice si existe en la PC una aplicación que permita "abrir" el archivo de interés. Esta función localizará por la extensión del fichero y de existir seguirá adelante. De no existir manda mensaje de que no existe la aplicación necesaria en esa PC.

Debe aparecer en la cláusula USES "Registry" para que funcione.

A continuación la función:

function FindAppToOpenDoc(Extension:string):Boolean;
var
ss:string;
begin
Result:=FALSE;
with TRegistry.Create do
try
RootKey:=HKEY_CLASSES_ROOT;
If KeyExists(Extension) then
begin
OpenKeyReadOnly(Extension);
ss:=ReadString('');
CloseKey;
Result:=KeyExists(ss);
end;
finally
Free;
end;
end;

Colocamos luego un procedimiento que nos permitirá ejecutar las cosas. Se muestra a continuación:

procedure ShowFicheroApp(Ruta:PChar);
begin
If FindAppToOpenDoc('\.pdf) then
begin
ShellExecute(0,
'open',
Ruta,
nil,
nil,
SW_SHOWDEFAULT(;
end
else
begin
Application.MessageBox(
'No hay aplicación instalada para mostrar files.pdf'
+#13#10+
'Instale ADOBE desde ... sitio de la instalación',
'Error...', MB_ICONERROR+MB_OK);
end;
end;
// Debemos haber llenado el PVCHar Ruta habiendo declarado a Ruta como variable PChar y luego

var
Ruta:PChar;
{
En un determinado sitio antes de llamar ShowFicheroApp
llenar el valor de PChar con una string que contenga
el paso hasta el fichero en cuestión:
}
Ejemplo

Ruta:='C:\Tarea\HermosuraNatural.pdf';
ShowFicheroApp(Ruta);

Y ya... Esto se puede usar para cualquier tipo de aplicaciones que desees abrir...con los ajustes necesarios...

Gracias si sirvi'o...

Responder Con Cita