Page 1 of 1

Visualizzazione window

Posted: Wed Feb 24, 2010 8:25 am
by Ugo
Ciao a tutti,

per far si che la procedura venga lanciata una sola volta ho ripreso questo codice che funziona egregiamente:

Code: Select all

OpenExe( cWINDOW, nValue )
   LOCAL hWnd := GETWINDOW( GETDESKTOPWINDOW(), GW_CHILD ), lExist := .F.

   DEFAULT nValue := SW_MAXIMIZE

   IF ! Empty( cWindow )
      cWINDOW := Upper( cWINDOW )
      WHILE hWnd != 0
         IF cWINDOW $ UPPER( GETWINDOWTEXT( hWnd ) )
            ShowWindow( hWnd, nValue )
            lExist := .T.
            Exit
         ENDIF
         hWnd = GETWINDOW( hWnd, GW_HWNDNEXT )
      ENDDO

   ENDIF

   RETURN lExist
Ciò che non funziona è la ri-visualizzazione della window precedente se questa è nascosta o sotto altre window.
In pratica vorrei che quando viene rilanciata la procedura e questa sente che una è già in esecuzione dovrebbe riportare il fuoco su quella già aperta e poi chiudersi.

Attualmente si chiude senza portare in primo piano quella già aperta.
Ho provato con SW_SHOW, SW_SHOWNORMAL, SW_MAXIMIZE senza alcun risultato.

E' possibile?

Grazie per l'aiuto.

Re: Visualizzazione window

Posted: Wed Feb 24, 2010 4:37 pm
by Enrico Maria Giordano
Io uso questo:

Code: Select all

IF ISEXERUNNING( CFILENOEXT( HB_ARGV( 0 ) ) )
    SHOWWINDOW( FINDWINDOW( 0, "Titolo tua finestra" ), 9 )
    SETFOREGROUNDWINDOW( FINDWINDOW( 0, "Titolo tua finestra" ) )
    RETURN NIL
ENDIF
EMG

Re: Visualizzazione window

Posted: Mon Mar 01, 2010 9:42 am
by Ugo
Enrico Maria Giordano wrote:Io uso questo:

Code: Select all

IF ISEXERUNNING( CFILENOEXT( HB_ARGV( 0 ) ) )
    SHOWWINDOW( FINDWINDOW( 0, "Titolo tua finestra" ), 9 )
    SETFOREGROUNDWINDOW( FINDWINDOW( 0, "Titolo tua finestra" ) )
    RETURN NIL
ENDIF
Ciao Enrico,
funziona! :)
L'unico neo è che l'applicazione normalmente è aperta a tutto schermo e, dopo la "riapertura" no!
Nel senso che diventa una finestra normale.
Togliendo la SHOWWINDOW funziona come mi aspetto.
Grazie.

Re: Visualizzazione window

Posted: Mon Mar 01, 2010 9:58 am
by Enrico Maria Giordano
Il problema è che se la finestra è iconizzata credo che non la ripristina. Prova invece con

Code: Select all

SHOWWINDOW( FINDWINDOW( 0, "Titolo tua finestra" ), 3 )
EMG

Re: Visualizzazione window

Posted: Mon Mar 01, 2010 2:44 pm
by Ugo
Enrico Maria Giordano wrote:Il problema è che se la finestra è iconizzata credo che non la ripristina. Prova invece con ...
Enrico,
si adesso però la apre sempre a schermo intero!

Non capisco come generare da software il comando di click sul bottone della barra per ripristinare la window iconizzata.

Al momento avrei risolto così nel codice normale:

Code: Select all

OpenExe( "NomeDellaFinestra" ) // per aprire a schermo intero
oppure

Code: Select all

OpenExe( "NomeDellaFinestra", .F. ) // per aprire come finestra
e questa è la funzione OpenExe():

Code: Select all

FUNCTION OpenExe( cTitle, lWindows )

   LOCAL hWnd

   DEFAULT lWindows := .T.   // Default per finestra a tutto schermo.

   IF ISEXERUNNING( CFILENOEXT( HB_ARGV( 0 ) ) )
      hWnd := FINDWINDOW( 0, cTitle )
      IF IsIconic( hWnd )
         SHOWWINDOW( hWnd, IF( lWindows, 3, 1 ) )
      ENDIF
      SETFOREGROUNDWINDOW( hWnd )
      QUIT
   ENDIF

   RETURN Nil

Re: Visualizzazione window

Posted: Mon Mar 01, 2010 2:53 pm
by Enrico Maria Giordano
In teoria il valore 9 che avevo messo dovrebbe fare proprio quello. Boh.

EMG

Re: Visualizzazione window

Posted: Wed Mar 03, 2010 5:04 pm
by Ugo
Enrico Maria Giordano wrote:In teoria il valore 9 che avevo messo dovrebbe fare proprio quello. Boh.
Enrico,
non mi ricordavo più, l'avevo fatto un po' di tempo fa ma non ricordo dove l'ho trovato o se è farina del mio sacco la cosa importante è che funziona! :D

In pratica devi lanciare 2 volte showwindow, una con SW_MINIMIZE e una con SW_RESTORE! :wink:
Probabilmente si deve ripristinare una situazione prima di SW_RESTORE.
A me funziona perfettamente sia se iconizzato che no.
Fammi sapere se è lo stesso per te.

Re: Visualizzazione window

Posted: Wed Mar 03, 2010 8:30 pm
by Enrico Maria Giordano
Non ho prove da fare al momento ma comunque buono a sapersi, grazie.

EMG