Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-05-2014
tonisib tonisib is offline
Registrado
NULL
 
Registrado: may 2014
Posts: 1
Poder: 0
tonisib Va por buen camino
Abrir contenido de un LongBlob con aplicacion predeterminada

Buenos dias!
Ando unos días dandole vueltas e indagando por el foro y he visto ideas pero no exactamente lo que busco.
Tengo un LongBlob en MySQL que en principio me almacena diferentes tipus de ficheros (principalment jpg y pdf), muestro un texto asociado al fichero en un grid y al clicar sobre el me gustaria que abriera el archivo con el programa predeterminado de Windows.

he probado a assignar el longBlob a un TMemoryStream ... pero luego no se como abrirlo con la aplicacion predeterminada de Windows. Si es un jpg pues si lo puedo cargar en un TImage y mas o menos me puedo defender, però si es un PDF me gustaria poder abrirlo con el visor que tenga Windows por defecto y ya de paso pues el jpg o cualquier otro formato tambien.
Igual lo que pido es una locura y habria que tratar el problema de otra manera y yo estoy obscecado en esto

¿Alguna idea?
Muchisimas gracias!
Responder Con Cita
  #2  
Antiguo 27-05-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Lo lógico es que primero lo grabes en un archivo temporal con la extensión correcta (según el tipo de fichero) y luego lo habr´ñas con un ShellExecute o WinExec (con ambas "saltará" el programa que tengas definido en Windows por defecto para abrirlo).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 29-05-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Yo hago lo que comenta Neftalí.
Si quiero ejecutarlo sin más utilizo:
Código Delphi [-]
ShellExecute(FMMain.Handle, nil, PChar(Fichero), nil, nil, SW_SHOW)
Ten en cuenta que el primer parámetro debe ser de un formulario. Yo utilizo el principal de la aplicación.

En otro momento quiero ejecutarlo y ver si el usuario ha cambiado algo (modificó el .DOC o .XLS por ejemplo)
En este caso obtengo un HASH del archivo (MD5) ejecuto mediante un procedimiento RunAndWait y luego obtengo el HASH nuevamente. Si son iguales es que no se ha modificado.
La función CalcHash es de Seoane.
Código Delphi [-]
         MD5 := CalcHash(Fichero, haMD5);
         RunAndWait(FMMain.Handle, Fichero, '');

         if (MD5 <> CalcHash(Fichero, haMD5)) then
         begin
            if (MessageDlg('El documento ha cambiado. ¿Quiere reemplazar el archivo en la base de datos?', mtConfirmation,
              [mbYes, mbNo], 0, mbYes) = mrYes) then
            begin
[...]

Te dejo el código que utilizo. No recuerdo de dónde lo saqué:

Código Delphi [-]
function TDMMain.RunAndWait(Handle: THandle; Ejecutable, Argumentos: string; const RunDirectory: PChar = nil;
  const Visibilidad: integer = sw_shownormal): DWORD;
var
   Info: TShellExecuteInfo;
   pInfo: PShellExecuteInfo;
   ExitCode: WORD;
begin
   { Puntero a Info }
   { Pointer to Info }
   pInfo := @Info;
   { Rellenamos Info }
   { Fill info }
   with Info do
   begin
      cbSize := SizeOf(Info);
      fMask := SEE_MASK_NOCLOSEPROCESS;
      wnd := Handle;
      lpVerb := nil;
      lpFile := PChar(Ejecutable);
      { Parametros al ejecutable }
      { Executable parameters }
      lpParameters := PChar(Argumentos + #0);
      if RunDirectory = '' then
         lpDirectory := nil
      else
         lpDirectory := PChar(RunDirectory + #0);
      nShow := Visibilidad;
      hInstApp := 0;
   end;
   { Ejecutamos }
   { Execute }
   if not ShellExecuteEx(pInfo) then
      Result := GetLastError
   else
      Result := Info.hInstApp;

   { Esperamos que termine }
   { Wait to finish }
   repeat
      ExitCode := WaitForSingleObject(Info.hProcess, 500);
      Application.ProcessMessages;
   until (ExitCode <> WAIT_TIMEOUT);
end;

Última edición por duilioisola fecha: 29-05-2014 a las 12:51:25. Razón: Agrego link a Web de autor
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
Abrir una aplicación Windows tbolzan API de Windows 2 12-12-2012 16:05:28
jpg longblob y report builder vroa74 Impresión 4 29-11-2011 19:49:58
Abrir aplicacion 1 vez kdemia Varios 21 27-05-2011 18:40:33
Opendialog abrir aplicacion!!! liz_hilton OOP 2 10-05-2005 17:41:32
Problema: Un tipo LONGBLOB me regresa sólo 32,769 bytes molarte MySQL 4 08-02-2005 19:19:59


La franja horaria es GMT +2. Ahora son las 14:22:38.


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