Newsgroup: it.comp.lang.delphi
Titolo: Problema con minimizza

Ciao a tutti,
ho un problema un po' strano con la gestione della finestra.
Allora ho inserito nell'applicazione il controllo all'avvio della
presenza di un altra istanza: nel caso do un messaggio all'utente e
poi vorrei riportare in primo piano l'applicazione massimizzata.
Dopo varie letture e tantativi ho fatto così :
            SetWindowPos(NextHandle,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE or
SWP_NOMOVE);
            SetWindowPos(NextHandle,HWND_NOTOPMOST,0,0,0,0,SWP_NOSIZE
or SWP_NOMOVE);
            PostMessage(NextHandle, WM_SYSCOMMAND, SC_RESTORE,
NextHandle);
            PostMessage(NextHandle, WM_SYSCOMMAND, SC_MAXIMIZE,
NextHandle);
Faccio  prima restore e poi maximize perchè se no (chissà perchè) il
maximize non va.
Il problema è che se dopo questa operazione l'utente fa un minimizza
(da tasto della finestra windows) e poi si riapplica la procedura
scritta sopra (sempre per controllo doppia istanza) non si può più
minimizzare a mano.
E' come se dopo il minimizza a mano windows sappia che la finestra è
in stato minimizzato, poi da codice io la massimizzo ma windows non è
informato e la crede minimizzata e quindi non la minimizza.
Come potrei uscirne?
Ciao a tutti, grazie e scusate il papiro...
Matteo

 Come potrei uscirne?
http://groups.google.it/group/borland.public.delphi.objectpascal/browse_thread/thread/c941c8a23739016c/c417e8e571eb42d1?hl=it&lnk=st&q=foreground+single+instance+DELPhi#c417e8e571eb42d1
ho cercato su google per "foreground single instance DELPhi"
Ciao
-- 
Morde

 ha scritto nel messaggio 
news:52c4d301-29fc-4314...@e6g2000prf.googlegroups.com...
Ciao a tutti,
ho un problema un po' strano con la gestione della finestra.
Allora ho inserito nell'applicazione il controllo all'avvio della
presenza di un altra istanza: nel caso do un messaggio all'utente e
poi vorrei riportare in primo piano l'applicazione massimizzata.
[cut]
Io personalmente faccio così, e funziona.
Avendo l'handle della finestra che vuoi ripristinare:
ShowWindow(h, sw_show);
SetForegroundWindow(h);
"h" è l'handle della finestra che avrai trovato in qualche modo.
Ciao

 Morde
Cavolo, ne ho tentate veramente tante di ricerche (ammetto forse di
incaponirmi per pigrizia sull'italiano) ma questa non l'ho trovata...
Grazie mille, la testerò appena possibile
Ciao
Matteo

 Morde
Ciao,
oggi ho provato a testare la cosa e purtroppo non mi va ancora.
Nel link consigliato diceva di usare la funzione IsIconic(handle) per
controllare se minimizzata e nel caso di fare Restore e poi di usare
SetForegroundWindow(handle)
Non so perchè ma la funzione IsIconic da me (windows xp ) non torna
mai True, inoltre voglio avere la finestra massimizzata e sono
obbligato a usare la coppia di chiamate a SendMessage con Restore e
poi Maximize (solo il maximize non fa nulla).
Il problema che persiste (molto strano) è che se faccio un minimizza a
mano e poi riporto l'appplicazione in primo piano e massimizzata da lì
in poi il minimizza non funziona più!
Il mio codice attuale è (anche se le ho provate tutte...):
            If IsIconic(NextHandle) Then
                ShowMessage('ciao');   //MAI CHIAMATO
            SetForegroundWindow( NextHandle );
            SendMessage( NextHandle, WM_SYSCOMMAND, SC_RESTORE, 0 );
            SendMessage( NextHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0 );
Ciao e grazie dell'aiuto
Matteo

 Morde
Ciao,
oggi ho provato a testare la cosa e purtroppo non mi va ancora.
Nel link consigliato diceva di usare la funzione IsIconic(handle) per
controllare se minimizzata e nel caso di fare Restore e poi di usare
SetForegroundWindow(handle)
Non so perchč ma la funzione IsIconic da me (windows xp ) non torna
mai True, inoltre voglio avere la finestra massimizzata e sono
obbligato a usare la coppia di chiamate a SendMessage con Restore e
poi Maximize (solo il maximize non fa nulla).
Il problema che persiste (molto strano) č che se faccio un minimizza a
mano e poi riporto l'appplicazione in primo piano e massimizzata da lě
in poi il minimizza non funziona piů!
Il mio codice attuale č (anche se le ho provate tutte...):
