Visualizzazione window

Moderator: Enrico Maria Giordano

Post Reply
User avatar
Ugo
Posts: 283
Joined: Sat Oct 15, 2005 6:40 am
Location: Turin, Italy

Visualizzazione window

Post 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.
Ciao, best regards,
Ugo
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Visualizzazione window

Post 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
User avatar
Ugo
Posts: 283
Joined: Sat Oct 15, 2005 6:40 am
Location: Turin, Italy

Re: Visualizzazione window

Post 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.
Ciao, best regards,
Ugo
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Visualizzazione window

Post 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
User avatar
Ugo
Posts: 283
Joined: Sat Oct 15, 2005 6:40 am
Location: Turin, Italy

Re: Visualizzazione window

Post 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
Ciao, best regards,
Ugo
User avatar
Ugo
Posts: 283
Joined: Sat Oct 15, 2005 6:40 am
Location: Turin, Italy

Re: Visualizzazione window

Post 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.
Ciao, best regards,
Ugo
Post Reply