Newsgroup: it.comp.lang.visual-basic
Titolo: [?] L'evento GotFocus di un form funziona ??

Ciao a tutti !!
Dunque...
Dovrei associare alcune routine all'evento GotFocus di un form, solo che
facendo dei test  (ho messo un msgbox per vedere quando veniva generato
l'evento) pare che questo curioso evento non viene chiamato.
Qualcuno ha mai avuto lo stesso problema ?    soluzioni possibili ?
Ah.. il form non e' vuoto, contiene dei frames, dei bottoni e delle caselle
di testo.. in pratica non resta una parte dello sfondo "nuda" , che sia per
quello ?? pero' a me servirebbe che si generasse un evento sia quando premo
in un punto qualsiasi del form , sia quando premo la sua barra del titolo...
Grazie per eventuali consigli.
DaVe
VB6 , Win98 SE

 wrote in message
89ka3c$c46$1...@bw107zhb.bluewin.ch...


Non puoi usare l'evento MouseDown?






 wrote in message
89l5du$frn$1...@lacerta.tiscalinet.it...


Di nuovo ciao DaVe
ti propongo questa soluzione un po' elaborata (pescata da MSDN) nel caso
neanche con l'evento MouseDown tu abbia risolto il problema.
In pratica devi utilizzare un controllo timer che a tempo prestabilito
verifica quale sia la form attiva tramite la chiamata API GetActiveWindow,
che ti restituisce l'Handle del form attivo. Se l'Handle corrisponde a
quello del tuo form, allora quello è l'evento che ti interessa!
Sintassi di GetActiveWindow:
   Declare Function GetActiveWindow Lib "User" () As Integer
poi dal timer
Sub Timer1_Timer ()
    If GetActiveWindow() = Form1.hWND Then
       'Quello che vuoi fare
    End If
End Sub
Basta impostare il timer ad un valore discretamente basso e la tua
applicazione dovrebbe essere in grado di rispondere velocemente.
La (triste) alternativa è rivedere la logica dell'applicazione .
Spero di esserti stato utile.
Ciao
___________________________________________
                             Davide Deidda
URL      
http://web.tiscalinet.it/meridies
E-Mail          
davide...@tiscalinet.it
___________________________________________


dave, mi sa che il punto non sia il gotfocus del form:
se hai il cursore in un txtbox, passi a un'altra app, poi torni alla tua con
alt-tab o simili, il fuoco ce l'ha il txtbox.
il punto e' rilevare se la tua e' l'app attiva, che direi sia tutt'altra
cosa, per la qle purtroppo non so aiutarti.
ciao, a.
"-> Dave <-" <da...@hate.spam> ha scritto


 wrote in message 89ljrs$7e3$1...@nslave2.tin.it...


Ti sei preoccuto mai di leggere l' help ? Leggi cosa dice :
L' Evento GotFocus viene generato quando lo stato attivo viene spostato su
un oggetto premendo TAB o facendo clic sull'oggetto oppure utilizzando il
metodo SetFocus nel codice. Un FORM può ricevere lo stato attivo solo quando
tutti i controlli visibili sono disattivati.
Ciao.
--
Icq ---> 50759119
Mercenaries Never Die. They Just Go Hell To Regroup.

Gotfocus funziona solo su una form che non contiene oggetti (e'
l'equivalente del gotfocus degli oggetti, quando una form contiene almeno un
oggetto visibile e abilitato, e' quello che riceve il focus).
In VB non esiste un metodo per verificare - in ogni circostanza - quando una
form riceve il focus. Poiché il gotfocus è comunque relativo agli oggetti di
una form, non puoi neppure testare il gotfocus di tutti gli oggetti della
form (a parte che potrebbe darsi il caso in cui nessun oggetto della form ha
il focus e comunque questo non è sulla form stessa).
A dire il vero, io avrei giurato che l'evento Activate svolgesse questo
ruolo, ma da una sommaria prova sembra che funzioni solo la prima volta che
la form viene aperta, non sui successivi focus.
Potresti ottenere quello che vuoi solo subclassando la form - oppure usando
un OCX - ce ne sono milioni - che ti permette di fare la stessa cosa - e
intercettando il messaggio WM_ACTIVATE.
----------------------------------------------------------------------
Stefano Minardi
zet...@mclink.it
----------------------------------------------------------------------

avete provato con il FORM_ACTIVATE ??? Viene scatenato quando la forma
prende il ''focus''

Ciao,
    effettivamente penso che quello che serve a te è un bel SubClassing per
intercettare il messaggio WM_ACTIVATE, se pensi che ti possa servire
scrivimi a 
zann...@libero.it
 e chiedimelo (facendo per favore riferimento a
questa particolare mail, con tutta la posta che ricevo...      :)
Saluti
Faber

 wrote in message 8a2s0m$9jm$1...@nslave2.tin.it...


Il fatto che esista un evento Form_Activate farebbe certo pensare che
risponda al messaggio WM_ACTIVATE. Tuttavia, teste' prima di risponderti la
volta scorsa, lo avevo provato, notando come venga eseguito solo alla
*prima* activate della form (e comunque NON quando la form passa
semplicemente in primo piano). Se anche funzionasse nel 90% dei casi,
sarebbe un tantino inaffidabile. Io intercetterei WM_ACTIVATE.


semplicemente in primo piano).
non solo la *prima* volta, [s]fortunatamente anche quando per es. da quella
form (es. form1) faccio un bel form2.show vbmodal, quando la form2 si chiude
magicamente viene eseguita la routine form_activate della form1...
Faber

l'evento Form_Activate ? c'e' differenza ?
eccome! [semplicemente] la routine Form_Activate *non* avviene quando la
form viene attivata (messa in primo piano, insomma --> quindi non
corrisponde al messaggio WM_ACTIVATE)
da un paio di prove che ho fatto ho notato che:
- Form_Activate funziona effettivamente come se fosse il corrispondente del
messaggio WM_ACTIVATE solo se la finestra che era in primo piano prima fa
parte dello stesso programma
- Form_Activate avviene sempre quando viene fatto lo Show di quella Form
Saluti
Faber