Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Accedere alle proprietà di un controllo

Ciao ragazzi!
Forse si tratta solo di un mio pasticcio, ma non sono riuscito ad accedere
alle proprietŕ di un controllo ActiveX (UserControl) da una routine pubblica
di un modulo BAS contenuto all'interno del progetto Controllo ActiveX.  La
mia domanda č: come vi si puň accedere?
Grazie in anticipo a tutti e scusatemi se questa domanda puň sembrare molto
banale.
--
Marco Minerva, 
vbco...@libero.it
http://www.marcominerva.com/vbcorner

mia domanda č: come vi si puņ accedere?
Passando lo UserControl come parametro.
ciao, hal

 ha scritto nel messaggio
news:9mrbq0$3u09e$1...@ID-56381.news.dfncis.de...


 > >mia domanda č: come vi si puņ accedere?
Non mi sembra si possa fare.
Da quanto ricordo lo usercontrol non č accessibile dall'esterno del suo
modulo.
Il che avrebbe anche una logica.
A meno che tu dal modulo bas non instanzi l'usercorntrol, ma non credo sia
quello che tu voglia fare.
Se ti basta perņ puoi usare il suo hWnd rendendolo pubblico dal modulo bas e
settandolo a
hWnd_pubblico = Usercontrol.hWnd
nella Usercontrol_readproperties
Ciao

"Pippo" definita nello UserControl, come posso fare?
Ipotizziamo di avere un ocx composto da uno user control 
che si chiami UserControl1.
nello user control:
Public Sub Pippo()
    MsgBox "OK!"
End Sub
----------------
nel modulo:
Public Function Prova(ByRef a_UC As UserControl1) As Long
    a_UC.Pippo
End Function
hth, hal

 ha scritto nel messaggio
news:9mrohm$3qg59$1...@ID-56381.news.dfncis.de...


in un progetto ActiveX?
Nella situazione prospettata occorre salvarsi un riferimento (o un weak pointer, se
ci sono problemi di riferimenti circolari) allo user control e chiamarne un metodo Friend
(quindi non Public, perche' altrimenti sarebbe visto anche all' esterno, e nemmeno
Private, perche' altrimenti non sarebbe possibile chiamarlo).
Il metodo chiamato dello UserControl provvedera' a sua volta a generare l' evento
al client.
Es. stringato buttato giu' al volo:
Ipotizziamo che lo user control si chiami SuperCombo
------- Nel modulo .bas:
Private Type tagCombo
      Combo As VB.ComboBox
      Container As SuperCombo
End Type
Private m_SuperCombo() As tagCombo
Public Function ComboWindowProc(ByVal hWnd As long, _
                                    ByVal uMsg As long, _
                                    ByVal wParam As Long, lParam As Long) As Long
 
        Dim index As Long
        index = IsMyHandle(hWnd) 
        If (index < 0) then exit function
        Select Case uMsg
        Case WM_QUALCOSA: .....
        Case WM_QUALCOSALTRO: ......
        Case WM_LBUTTONDOWN: Call GeneraEventoMouseDown (index, wParam, lParam) 
        .....
        End Select
 
        ComboWindowProc = CallWindowProc(m_oldWindowProc, hWnd, uMsg, wParam, lParam)
End Function
Private Function IsMyHandle(ByVal hWnd As Long) As Long
      ' restituisce l' indice di un array che memorizza tutti gli handle delle combo
     ' subclassate (ricordarsi che il codice dei .bas e' condiviso fra tutte 
     ' le istanze dell' ocx
     ' se fallisce allora ritorna -1
End Function
Private Function GeneraEventoMouseDown(wParam As long, lParam As Long)
        ' decodifica Bottone, Shift e coordinate dai parametri ricevuti
        ..................
        m_SuperCombo(index).RaiseMouseDown(Button, SHift, X, Y)
End Function
---------------- nello user control:
Public Event MouseDown (Button As Integer, Shift As Integer, _
                                          X As Single, Y As Single)
Friend Sub RaiseMouseDown(Button As Integer, Shift As Integer,  _
                                               X As Single, Y As Single)
       RaiseEvent MouseDown(Button, Shift, X, Y)
End Sub
hth, hal


Scusa la confusione, spero si capisca qualcosa lo stesso.
hth, hal