El problema de tener ventanas abiertas...

User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

El problema de tener ventanas abiertas...

Post by Carles »

Hola,

Gracias al colega Jose Luis Parajon, se me ha abierto un nuevo dolor de cabeza :? Si tenemos una ventana principal y por ejemplo estamos en una segunda ventana o dialogo y el usuario vuelve a ejecutar la aplicacion, q ocurre?

Con la funcion del foro StillRun() podemos controlar si la aplicacion, mas bien, la ventana principal, esta funcionando, y con dicha funcion ejecutamos la funcion SetForegrounWindow() para pasarla a primer plano, perooooo, realmente ponemos en un primer plano la ventana principal y NO la secundaria.

Code: Select all

HB_FUNC (STILLRUN) 
{ 
   HWND hWnd; 
   BOOL lRet = FALSE; 
   hWnd = FindWindow (NULL,L"SV Pedidos" ); 
   if (hWnd) 
   { 
     SetForegroundWindow ( hWnd ); 
   lRet = TRUE; 
   } 
   hb_retl (lRet);
}
Hasta hoy, creo q la mejor solucion es mirar si la aplicacion ya esta ejecutandose, mostrar un simple mensaje de 'aplicacion ejecutandose', y q el usuario espabile cerrandose sus ventanitas.

Si alguien se encuentra con este problema y tiene una mejor solucion que quiera compartir, encantado :wink:


Saludos.
C.
User avatar
astursoft
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Post by astursoft »

Yo lo tengo solucionado :D .
La ventana principal debe de ser ventana , el resto dialogos , cuando llamas a la aplicacion hacia delante te trae el ultimo dialogo activo y en cascada los demas .
Garantizado 100*100 .
En la aplicacion que tengo ya en casi producción ninguno de los 10 viajantes se a quejado y mira que son torpes.. :D :D
Jose Luis Parajón
Asturias
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Post by Carles »

Jose Luis,

Me alegro q te funcione. Yo tengo el mismo sistema Una ventana principal y el resto dialogos, pero me temo q no :( Este sencillo ejemplo muestra como lo hago.

Code: Select all

#include 'FWCE.ch'
#include 'winapi.ch'

FUNCTION Main()

   LOCAL oWnd

   IF StillRun()
      RETU NIL
   ENDIF

   DEFINE WINDOW oWnd TITLE "MiVentana"
   ACTIVATE WINDOW oWnd ON INIT IniDlg01()

RETU NIL


STATIC FUNCTION IniDlg01()

    LOCAL oDlg

    DEFINE DIALOG oDlg TITLE 'Dlg01' SIZE 200,100 COLOR CLR_BLACK, CLR_RED

*        oDlg:nStyle := nOR( DS_MODALFRAME, WS_POPUP, WS_BORDER, WS_SYSMENU )

        @1,4 BUTTON 'Salir' OF oDlg ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

RETU NIL

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

HB_FUNC (STILLRUN)
{
   HWND hWnd;
   BOOL lRet = FALSE;
   hWnd = FindWindow (NULL,L"MiVentana");
   if (hWnd)
   {
      SetForegroundWindow ( hWnd );
      lRet = TRUE;
   }
   hb_retl (lRet);
}


#pragma ENDDUMP
Quizas es la funcion SetForegroundWindow() q no trae a un primer plano la ventana activa ?

Nota: Ya se que muchos usuarios, como tus viajantes, son torpes, pero coñe, si tan torpes son, q carajo hacen con una Pocket ? :roll:

Saludos.
C.
User avatar
astursoft
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Post by astursoft »

Bueno , primero decir que yo tengo todos los dialogos desde recursos , cuando descubrí el problema cambié todas las ventanas por dialogos y como no existian los de codigo ..... .mira a ver si ese es el problema , por que yo tengo un codigo clavado al tuyo y no le veo problema .

Respecto a lo del uso de pocket por viajantes , cosa de marketing empresarial ( la competencia los lleva ) y de rapidez , mandas el envio delante del cliente , le dices el importe y al dia siguiente en tienda .

He hecho este cambio al stillrun( cTitulo) , aunque no lo he probado aun....

Code: Select all

HB_FUNC (STILLRUN)
{
   HWND hWnd;
   BOOL lRet = FALSE;
   hWnd = FindWindow (NULL,AnsiToWide( hb_parc( 1 ) ) );
   if (hWnd)
   {
   SetForegroundWindow ( hWnd );
   lRet = TRUE;
   }
   hb_retl (lRet);
}
Saludos
Jose Luis Parajón
Asturias
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Post by Carles »

Jose Luis,

Pues el ejemplo q hay mas arriba, si lo pruebas, estando en la caja de dialogo, vuelves a iniciar el programa, y se inicia peroooo activando la ventana principal.

Uhmmm, seguiremos probando..

Gracias y un saludo.
Carles.
User avatar
astursoft
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Post by astursoft »

Carles , tienes toda la razon , falla , pero te diré mas .Tengo el programa compilado con las versiones anteriores de fwpcc ( una copia de la version anterior , antes de _ importantes ) con fecha del 16 de febrero y en este programa funciona bien .
Parece ser que en el build que se introducen los dialogos por codigo , se introducen cambios que no permiten el buen funcionamiento , y el caso es que he machacado la version ( a ver si la encuentro por ahi ...)
Saludso.
Jose Luis Parajón
Asturias
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Post by Carles »

Hi Jose Luis,

Ya me parecia a mi. Ya no pierdo mas tiempo en este punto. Ya te dije, lo solucione cheuqeando si esta la aplicacion activa y en caso afirmativo, muestro un mensaje y salgo. Q la busquen que no cuesta nada :evil:


Saludos.
C.
User avatar
astursoft
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Post by astursoft »

He encontrado la version con lib del 21 de febrero ( justo la anterior , creo) , he recompilado el programa y funciona bien , mientras se resuelve esto , yo voy a volver a esta versión , tengo demasiadas ventanas en cascada como para que las tengan que recuperar en el orden correcto .
Saludso.
Jose Luis Parajón
Asturias
User avatar
jlcapel
Posts: 229
Joined: Wed Oct 12, 2005 5:32 pm
Location: Valencia - España
Contact:

Post by jlcapel »

Hola,

¿Habeis probado a hacer un hide de aquellas ventanas que no están activas y solo tener visible la que se está viendo (y valga la redundancia)?

Saludos,
José Luis Capel
User avatar
astursoft
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Post by astursoft »

con hide() , no se resuelve el problema , he modificado un poco el tutor06 , para probarlo , pero no vale , se queda la ventana oculta , menos el menu :shock: :shock:
Antoniooo ... Socorrooo :D :D
Creo que esto ya es cosa de Antonio .
De momento me quedo en la version anterior , y mira que me fastidia ahora que tenía los dialogos de codigo y el log de errores ...
Por hoy ya está bien.
Saludso.
Jose Luis Parajón
Asturias
User avatar
jlcapel
Posts: 229
Joined: Wed Oct 12, 2005 5:32 pm
Location: Valencia - España
Contact:

Post by jlcapel »

José Luis,

Prueba a ocultar el menú así:

ShowWindow( oMenu:hMenu, SW_HIDE)

Saludos,
José Luis Capel
User avatar
astursoft
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Post by astursoft »

Se puede ocultar el menu , pero eso no resuelve el problema , el dialogo sigue quedando en segundo plano .
Esto es cosa de Antonio , creo , pero con las nuevas modificaciones...
Demosle tiempo , cuando termine con éstas, veremos si queda resuelto , y sino ya veremos.
Para mi es esencial este punto , me quedaré con lo que está estable de momento ( en esta semana se juega el uso o no de mi programa ).
Saludso.
Jose Luis Parajón
Asturias
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Jose Luis,

Cual sería un ejemplo pequeño y completo que reproduzca el problema ? gracias.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Post by Carles »

Antonio,

El tercer post de este hilo es un ejemplo q puedes probar. Se trata de ejecutarlo, irte al menu y volver a ejecutarlo. el resultado esta en q te aparece la ventana principal y NO el dialog activo.

Nota: Como te aprietan la tropa, eh ;-)

Saludos.
C.
User avatar
astursoft
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Post by astursoft »

Antonio , el tutor06 con _

Code: Select all

function Main()

   local oWnd

//--------   añadido ----------
  if STILLRUN()
       Quit
   endif
//-------------------------


   DEFINE WINDOW oWnd TITLE "Tutor06" ;
      MENU BuildMenu()

  @1,4 BUTTON 'Hola' OF oWnd ACTION ShowDialog() 
   ACTIVATE WINDOW oWnd ;
     ON INIT  ShowDialog() ;         // añadido --------------------  
      ON CLICK MsgInfo( "Click!" )

Return Nil


HB_FUNC (STILLRUN)
{
   HWND hWnd;
   BOOL lRet = FALSE;
   hWnd = FindWindow (NULL,L"Tutor06" );
   if (hWnd)
   {
   SetForegroundWindow ( hWnd );
   lRet = TRUE;
   }
   hb_retl (lRet);
}


Lanzas el programa ( se coloca el dialogo delante ) , te vas al explorador del pocket y vuelves a llamar al programa ....
Antes del ultimo build se colocaba la ventana tutor06 y delante el dialogo , ahora se coloca la ventana y el dialogo queda aculto .
Gracias por tu atencion.

-------------------- editado --------------------------
Veo que Carles esta casi sincronizado conmigo , mientras escribo el mensaje el ya ha respondido :D :D .
Cualquiera de los dos vale .
Jose Luis Parajón
Asturias
Post Reply