El problema de tener ventanas abiertas...

El problema de tener ventanas abiertas...

Postby Carles » Mon Feb 27, 2006 3:59 pm

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  Expand view  RUN
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
Carles
 
Posts: 1137
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Postby astursoft » Mon Feb 27, 2006 5:55 pm

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
astursoft
 
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Postby Carles » Tue Feb 28, 2006 7:15 am

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  Expand view  RUN
#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
Carles
 
Posts: 1137
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Postby astursoft » Tue Feb 28, 2006 10:01 am

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  Expand view  RUN
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
astursoft
 
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Postby Carles » Tue Feb 28, 2006 10:05 am

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
Carles
 
Posts: 1137
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Postby astursoft » Tue Feb 28, 2006 3:16 pm

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 unos cambios 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
astursoft
 
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Postby Carles » Tue Feb 28, 2006 3:20 pm

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
Carles
 
Posts: 1137
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Postby astursoft » Tue Feb 28, 2006 3:38 pm

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
astursoft
 
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Postby jlcapel » Tue Feb 28, 2006 7:12 pm

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
jlcapel
 
Posts: 229
Joined: Wed Oct 12, 2005 5:32 pm
Location: Valencia - España

Postby astursoft » Tue Feb 28, 2006 8:22 pm

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
astursoft
 
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Postby jlcapel » Tue Feb 28, 2006 9:31 pm

José Luis,

Prueba a ocultar el menú así:

ShowWindow( oMenu:hMenu, SW_HIDE)

Saludos,
José Luis Capel
User avatar
jlcapel
 
Posts: 229
Joined: Wed Oct 12, 2005 5:32 pm
Location: Valencia - España

Postby astursoft » Wed Mar 01, 2006 8:26 am

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
astursoft
 
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Postby Antonio Linares » Wed Mar 01, 2006 12:24 pm

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
Antonio Linares
Site Admin
 
Posts: 42103
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Carles » Wed Mar 01, 2006 12:29 pm

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
Carles
 
Posts: 1137
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Postby astursoft » Wed Mar 01, 2006 12:38 pm

Antonio , el tutor06 con estos cambios

Code: Select all  Expand view  RUN
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
User avatar
astursoft
 
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Next

Return to FiveWin para Pocket PC

Who is online

Users browsing this forum: No registered users and 9 guests

cron