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 21-10-2008
richi richi is offline
Miembro
 
Registrado: jun 2006
Ubicación: Portosin - A Coruña
Posts: 51
Poder: 18
richi Va por buen camino
Llamar a otra aplicación y que la primera quede bloqueada

Hola a todos.
Lo de llamar a otra aplicación y que en la primera no se pueda realizar nada, ya lo hice el problema biene que en la primera al quedar bloqueada y al estar la otra encima al moverla la form se pone en blanco y no me permite ver los datos. El codigo es el siguiente.
Código Delphi [-]
function ejecutarPrograma(Programa, Parametros : String; Esperar : Boolean) : Boolean;
var
   StartInfo : TStartupInfo;
   ProcInfo : TProcessInformation;
   CreateOK : Boolean;
begin
  FillChar(StartInfo,SizeOf(TStartupInfo),#0);
  FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
  StartInfo.cb := SizeOf(TStartupInfo);

  CreateOK := CreateProcess(nil, PChar(Programa + Parametros), nil, nil, False,
                            CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS,
                            nil, nil, StartInfo, ProcInfo);

  // Comprobamos si se ha creado correctamente
  if (CreateOK) then begin
     // debemos esperar a que se finalize el proceso o NO
     if (Esperar) then
        WaitForSingleObject(ProcInfo.hProcess, INFINITE);

     Result := True;
  end
  else begin
            Result := False;
  end;

  CloseHandle(ProcInfo.hProcess);
  CloseHandle(ProcInfo.hThread);
end;
Cuando esperar es true es cuando se bloque la form del primer programa.
Responder Con Cita
  #2  
Antiguo 21-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, puedes usar sendmessage para enviar un mensaje de minimizado, por ejemplo, antes del waitforsingleobject.
Responder Con Cita
  #3  
Antiguo 21-10-2008
richi richi is offline
Miembro
 
Registrado: jun 2006
Ubicación: Portosin - A Coruña
Posts: 51
Poder: 18
richi Va por buen camino
Hola coso.
Gracias por la respuesta pero no lo puedo minimizar, ya que se necesita ver los datos del primer programa.
Responder Con Cita
  #4  
Antiguo 21-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
entonces...ir enviando cada cierto tiempo un mensaje de refresh a la otra aplicacion, con un ttimer, por ejemplo, que se activase antes del waitforsingleobject. No se es una idea
Responder Con Cita
  #5  
Antiguo 21-10-2008
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.281
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
Puedes mirar los trucos 168 y 30 en la sección de trucos del club.
__________________
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
  #6  
Antiguo 21-10-2008
richi richi is offline
Miembro
 
Registrado: jun 2006
Ubicación: Portosin - A Coruña
Posts: 51
Poder: 18
richi Va por buen camino
coso acobo de probar con el refresh, update, repaint y sigue sin funcionar.
Neftali probe lo de las dos paginas que me indicaste que son lo mismo y me pasa lo mismo que como lo tengo realizado que la pantalla de donde lo llamas no se ven los datos al ser bloqueada.
Gracias por las respuestas.
Responder Con Cita
  #7  
Antiguo 21-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
algo asi era mi idea
Código Delphi [-]
...
if (Esperar) then
begin
        Timer1.Enabled := true;
        WaitForSingleObject(ProcInfo.hProcess, INFINITE);
        ...
end;
...
...
procedure Form1.OnTimer(sender : TObject);
begin           
        sendmessage(Handle_de_la_otra_aplicacion,WM_REPAINT,1,0);
end;


no se si es lo que has hecho...
ahora que pienso, si esta esperando en infinite no se si puede recibir mensajes. Quiza deberias probar de hacer un bucle, ir reactivando momentaneamente, repintar y volver a parar...

PD: escribi sendmessage de memoria, no se si esta correcto
Responder Con Cita
  #8  
Antiguo 21-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
de todas maneras, viendo los trucos que te paso neftali, quiza sea mejor usar aquellos, pues te da mas versatilidad. saludos.
Responder Con Cita
  #9  
Antiguo 22-10-2008
richi richi is offline
Miembro
 
Registrado: jun 2006
Ubicación: Portosin - A Coruña
Posts: 51
Poder: 18
richi Va por buen camino
Gracias coso y Neftali.
Pero lo que hice al final no se si sero la mas correcto, pero fue cambiar

Código Delphi [-]
     if (Esperar) then
        WaitForSingleObject(ProcInfo.hProcess, INFINITE);
por esto otro

Código Delphi [-]
     while (Esperar) do
     begin
       rdo:= WaitForSingleObject(ProcInfo.hProcess, 500);
       formUsar.refresh;

       if rdo = 0 then
         esperar := false;
     end;
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
Llamar a pagina web desde otra jsp SevProgramador JAVA 1 24-06-2008 11:55:24
Llamar una forma desde otra Punzo OOP 1 02-10-2007 19:48:43
Mi primera aplicación en D4PHP mlara La Taberna 10 01-08-2007 20:56:49
Llamar de una función a otra jorgegetafe Varios 6 05-06-2007 15:53:19
llamar formas de otra aplicación karocs Varios 1 21-06-2005 20:01:50


La franja horaria es GMT +2. Ahora son las 15:12:26.


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