Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-08-2013
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
Ejecutar un fichero en msdos y ver en un progress el tiempo de ejecucion

Hola amigos:
Estoy haciendo una aplicacion como una especie de saco que grava casi todo lo que necesito de electrónica generalmente son Datasheet que son PDF, la mayoría, y algunos ficheros de otro tipo, el final es todo metido a una base de sqlite3, todo funciona bien, los guardo en un campo blob.

Los tengo organizados y todo funciona bien , los saco o cosulto cuando quiero y todo organizado por categoría, Ahora bien:
A la hora de hacer busquedas se me ocurrio antes de entrar los pdf a la base de datos sqlite, los convierto a texto, y guardo el texto en un campo entonces las busquedas se hacen en sqlite rapido y puedes hacer una busqueda de todos los miles de pdf dentro de cada documento, algo que en windows no se puede hacer rapido , buscar dentro de pdf.

Pero el problema lo tengo en la forma que hago es en un programa sugerido por ustedes en otro hilo esta linea de comandos msdos:

pdftotext -raw biblia delphi.pdf prueba.txt

con eso optengo un texto con lo que necesito y luego lo guardo a la base de datos, tienen alguna idea de como puedo hacer eso y saber con un progress un aproximado del tiempo para que el usuario no tenga que esperar sin ver nada en ese indexado previo a guardar el archivo pdf???

gracias juank
Responder Con Cita
  #2  
Antiguo 29-08-2013
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Macho, me está costando mucho leerte. Yo de ti revisaría las comas y, posiblemente, las tildes. A ver si mañana por la mañana, después de dormir, me entero de algo.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 30-08-2013
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
cierto

Tienes razon, siempre escribo apurado y trato de explicar tanto que me pierdo en explicaciones, es simple:

Una idea para ejecutar un TProgress ejecutando un programa en msdos, en este caso es el PDFtoText.exe, o sea ejecutar algo en dos y que el usuario no se me duerma esperando que vea al menos un aproximado de que tiempo le falta.

Gracias Juank
Responder Con Cita
  #4  
Antiguo 30-08-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola juank1971.

No conozco ni he usado el PDFtoText, pero fijate si te sirve de este modo (o al menos te da alguna idea para continuar) :
Código Delphi [-]
...
uses ShellApi;

var
  ProcHandle : THandle = 0;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := False;
end;

procedure TForm1.ExecWithProgressBar(const AppName, Params: string);
var
  ExecInfo: TShellExecuteInfo;
begin
  ZeroMemory(@ExecInfo, SizeOf(ExecInfo));
  with ExecInfo do
  begin
    cbSize       := SizeOf(ExecInfo);
    fMask        := SEE_MASK_NOCLOSEPROCESS;
    Wnd          := ProcHandle;
    lpVerb       := 'open';
    lpFile       := PChar(AppName);
    lpParameters := PChar(Params);
    nShow        := SW_HIDE;
  end;
  if not ShellExecuteEx(@ExecInfo) then
    MessageBox(Handle,PChar(SysErrorMessage(GetLastError)),'',MB_ICONERROR+MB_OK)
  else
  begin
    ProcHandle := ExecInfo.hProcess;
    Timer1.Enabled := True;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  ExitCode: DWORD;
begin
  ProgressBar1.StepIt;
  if GetExitCodeProcess(ProcHandle, ExitCode) then
  begin
    if not (ExitCode = STILL_ACTIVE) then
    begin
      CloseHandle(ProcHandle);
      ProcHandle := 0;
    end
    else
      MessageBox(Handle,PChar(SysErrorMessage(GetLastError)),'',MB_ICONERROR+MB_OK);
    Timer1.Enabled := False;
   end;
end;
...


Ejemplo de llamada (imprimir un documento .pdf con PDFCreator):
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  ExecWithProgressBar('C:\Program Files\PDFCreator\PDFCreator.exe',
    '/NoStart/PFC:\Users\xxxx\Documents\Un_Documento.pdf');

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 30-08-2013 a las 22:09:29. Razón: aclaración
Responder Con Cita
  #5  
Antiguo 31-08-2013
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
ok gracias amigo pero desde que se ejecuta el timer la primera vez ya el
ExitCode es igual al STILL_ACTIVE y me salta para el else y me muestra un mensaje de todo correcto.
estoy mirando a ver porque me da eso.
Código Delphi [-]
procedure TForm1.Timer1Timer(Sender: TObject); 
var   ExitCode: DWORD; 
begin  
  ProgressBar1.StepIt;   
  if GetExitCodeProcess(ProcHandle, ExitCode) then   
  begin
    if not (ExitCode = STILL_ACTIVE) then     
    begin       
      CloseHandle(ProcHandle);       
      ProcHandle := 0;     
    end     
    else       
      MessageBox(Handle,PChar(SysErrorMessage(GetLastError)),'',MB_ICONERROR+MB_OK);  //salta para esta linea desde la primea vez, 
                                                 // y elfichero que estoy ejecutando en msdos es bastante largo se demora ejecutando     
  Timer1.Enabled := False;    
  end; 
end;

Última edición por Casimiro Notevi fecha: 31-08-2013 a las 17:08:14.
Responder Con Cita
  #6  
Antiguo 31-08-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola

Proba de este modo:
Código Delphi [-]
procedure TForm1.Timer1Timer(Sender: TObject);
var
  ExitCode: DWORD;
begin
  ProgressBar1.StepIt;
  if GetExitCodeProcess(ProcHandle, ExitCode) then
  begin
    if not (ExitCode = STILL_ACTIVE) then
    begin
      CloseHandle(ProcHandle);
      ProcHandle     := 0;
    end;
    Timer1.Enabled := False;
   end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 31-08-2013
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
ok gracias
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 al crear DSN en tiempo de ejecución, pero sólo al ejecutar, no desde Delphi aquiestamos Conexión con bases de datos 1 08-07-2013 10:20:12
Ejecutar lineas de codigo solo en tiempo de ejecucion Cecil Varios 10 22-02-2008 02:22:25
Ejecutar Sonido en Tiempo de Ejecución subzero Varios 4 19-02-2008 23:51:05
Ejecutar automaticamente scripts en tiempo de ejecucion meosre MySQL 1 30-09-2005 06:42:25
ejecutar en msdos Rafa Varios 1 14-11-2003 18:01:00


La franja horaria es GMT +2. Ahora son las 08:35: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