Newsgroup: it.comp.lang.visual-basic
Titolo: Windows Messages

Ciao,
Io ho un'applicazione MDI e vorrei poter scambiare messaggi da me definiti
tra i vari form Child.
C'è un modo per creare un Message Loop personalizzato all'interno dei form
per poter processare i messaggi senza dover subclassare i form.
(Per esempio usando una GetMessage)
Oppure, se devo subclassare i form può andare bene questo metodo?
In pratica mi creo una matrice Instances(x,y) dove nelle x metto l'handle
del form subclassato e nell'y metto l'indirizzo della sua WinProc originale.
Poi, quando arriva un messaggio, cerco con un ciclo il form in questione.
L'unico mio dubbio è che qui un ciclo è una pazzia (anche se i form sono
pochi).
Che ne dite?
_______________________________________________________________________
Public Function SubWinProc(ByVal hwnd As Long, _
                            ByVal MSG As Long, _
                            ByVal wParam As Long, _
                            ByVal lParam As Long) As Long
    ' subclassing del form
    Select Case MSG
        Case EMsg.MY_MESSAGE_1
        Case EMsg.MY_MESSAGE_2
        Case Else:
            Call DefWindowProc(hwnd, MSG, wParam, lParam)
    End Select
    'Cerco quale form ha inviato il messaggio
    For i = 0 To NUM_OF_FORM - 1
        If hwnd = Instances(i, FRM_HANDLE) Then Exit For
    Next
    SubWinProc = CallWindowProc(Instances(i, FRM_HANDLE), hwnd, MSG,
wParam,lParam)
End Function
___________________________________________________________________________

Che ne dite?
[cut]
Si puo' fare, ma il debug diventa un incubo, non puoi ragionare in vb
come faresti in C con Win32.
Piuttosto sfrutta vb per le cose che sa fare meglio, cioe' definendo
interfacce ed eventi, senza dover reinventare la ruota.
-- 
ciao,
hal

 interfacce ed eventi, senza dover reinventare la ruota.
Ok, ma in questo caso come posso sfruttare le interfacce?
Intendi specializzare i form con nuove proprietà ed eventi?
Grazie in anticipo!
Ciao!

Intendi specializzare i form con nuove proprietą ed eventi?
Esatto :-)
-- 
ciao,
hal

 Esatto :-)
Bè, però vedi...non so se nel mio caso fosse conveniente.
Ti spiego brevemente...
Io ho dei form MDIchild associati a varie tabelle di un db.
Devo fare in modo che se modifico dei dati in un form, tutti gli altri
visibili aggiornino i loro dati di conseguenza.
Così ho pensato che quando faccio una modifica, invio un mio messaggio (es.
MSG_MODIFICATA_TAB1) agli altri form e che questi, in risposta al suddetto,
ricarichino i dati.
Spero di essermi spiegato.
Un comportamento di questo tipo non saprei come gestirlo con le interfacce.
Hai qualche idea?
Ciao e grazie mille!

 ricarichino i dati.
Dovresti utilizzare una classe comune a tutti i form, la dichiari WithEvents
in tutti i form, la istanzi dall'MDI, che è sicuramente sempre su, e ogni
volta che crei un nuovo form child gli assegni l'istanza della classe.
Questa classe potrà avere ad es. l'evento QueryUpdate e il metodo Update.
Quando fai l'update dei dati fai anche una chiamata a objMiaClasse.Update e
tutti i form che la implementano come generatore d'eventi riceveranno
l'evento _QueryUpdate
Non so se sono stato chiaro :)
Ciao

Non so se sono stato chiaro :)
Se posso aiutare a fare ancora piu' confusione :P credo che sia il
pattern Observer:
http://www.dofactory.com/Patterns/PatternObserver.aspx
http://sern.ucalgary.ca/courses/SENG/609.04/W98/lamsh/observerLib.html
-- 
ciao,
hal

 Non so se sono stato chiaro :)
Cavolo!! Sai che non ci avevo proprio pensato!!
Grazie mille per la dritta!!
LeleB