Newsgroup: it.comp.lang.visual-basic
Titolo: studiando una classe e un controllo mscomm

Salve,
ogni tanto mi riaffaccio sul ng, ed ogni volta con una domanda :-)
In un programma che sto portando avanti da un bel po, ho bisogno di
utilizzare un controllo mscomm, e fin qui nessun problema.
Mi sono messo in testa di definire una classe, semplicemente per iniziare ad
usarla ed imparare qualche cosa di piu'.
Avrei quindi bisogno di dichiarare un oggetto mscomm all'interno di questa
classe.
Ho provato con (in un modulo di classe):
...
Private ComClass as MSComm
...
Private Sub Class_Initialize()
    ComClass.CommPort = 1
Il compilatore a questo punto mi restituisce un errore :"Variabile oggetto o
variabile del blocco with non impostata.
Cercando fra i vecchi post del ng (si, lo ho fatto, prima di scrivere
:-))) ), trovo un'istruzione del tipo:
Set ComClass = CreateObjet (e l'oggetto che era un Winsock).
Ho immaginato che come prima cosa bisognasse creare l'oggetto MSComm, ed ho
provato a digitare:
Set CommClass = CreateObject ("MSComm")
A questo punto ho un errore:
Errore di runtime 429
Il componente ActiveX non puo' creare l'oggetto.
Cosa sbaglio?
Forse il "MSComm" del CreateObject?
Se cosi',dove posso trovare documentazione su come creare oggetti?
Grazie della pazienza.... Maurizio

 Cosa sbaglio?
MSComm non e' creabile. Devi passartelo come parametro, prendendolo
da un form che lo ospiti.
L' ideale sarebbe poter passare il riferimento al costruttore della
tua classe, ma con vb6 non si puo' :-(
Devi percio' definirti una proprieta' o un metodo appositi.
Ad esempio:
nel tuo modulo .cls:
Private mMsComm As MSComm
Public Sub Init(ByRef aMsComm As MSComm)
	Set mMSComm = aMSComm
End Sub
-- 
ciao, hal

 End Sub
...
No, aspetta, non ho capito....
Ammettiamo che ho un Form che si chiama frmMain in cui ho un controllo
MSComm.
Come faccio funzionare la classe?
Poi, in quel form istanzio un oggetto (che fa riferimento alla classe) che a
sua volta fa riferimento ad un oggetto del form chiamante?
E se volessi utilizzare la classe in altri form, devo mettere in ciascuno di
essi un controllo MSComm?
Che giochetto!!! :-)
Ciao... Maurizio

 essi un controllo MSComm?
Ni...
Potresti anche passarti la reference allo stesso controllo.
Oppure, ti passi la reference al Form ed  aggiungi, questa
volta dinamicamente, il controllo:
Set mMiaClasse = New MiaClasse()
mMiaClasse.Init(Me)
In questo caso supponiamo che l'Init abbia un'altra firma
nel modulo MiaClasse.cls:
Public Sub Init(ByRef aParent As Form)
     Set mMSComm = aParent.Controls.Add(.... vedi guida ;-)


 ciao, hal
Io tempo fa avevo creato un progetto DLL Activex dove avevo creato un modulo
con la dichiarazione :
Public PLC As MSComm
e una classe in cui andavo ad utilizzare questo controllo:
Private Sub Class_Initialize()
   Set PLC = New MSComm
End Sub
e tutto mi funziona correttamente.
( Non so se č dovuto al fatto che il progetto era una DLL Activex)
ciao, roby

 ( Non so se č dovuto al fatto che il progetto era una DLL Activex)
Sei sicuro?
Poiche' mi hai messo la pulce nell'orecchio, ho appena provato a
a compilare una New sia in un exe che in una dll, tanto in un form
come in una class e con e senza riferimento diretto all'ocx, ma:
- con New non compila proprio: mi da' Invalid use of New Keyword;
- con CreateObject compila, ma in esecuzione da' errore di tipo.
Contesto:
Visual Basic 6 Eng Ent SP5, O.S. Windows 2000 Pro SP4 Eng
--
ciao, hal
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio
news:83Z103Z67Z126Y1...@usenet.libero.it...


 Visual Basic 6 Ita Professional SP5 , O.S. Windows 2000 pro SP4 Ita
Incredibile!
Hai voglia di mandarmi uno zippino con il sorgente direttamente in mail?
('indirizzo che vedi e' valido)
Spero di riuscire a capire cosa sbaglio.
Grazie in anticipo,
--


 Spero di riuscire a capire cosa sbaglio.
Ho ricevuto e provato.
Ringrazio pubblicamente Roberto per la disponibilita' :-)
Riporto qui l'esito in modo che possa essere utile anche ad altri.
Il sorgentino di Roberto ha funzionato alla prima :-)
L'inghippo era che dal mio vb non viene mostrato, da Project / References
il riferimento a mscomm32, neanche dopo aver cercato esplicitamente
il file mscomm32.ocx . Ho dovuto aprire il file .vbp con notepad per
capirlo.
A questo punto posso rimangiarmi la mia prima risposta data all'OP :-)
Affinche' l'OP possa realizzare il proprio intento deve aggiungere
una reference (non come controllo, ma proprio come riferimento)
alla libreria mscomm32.ocx. In questa maniera e' possibile istanziare
un oggetto mscomm direttamente in early binding tramite New.
Ringrazio sinceramente ancora Roberto per la disponibilita' :-)
--
ciao, hal


 Ringrazio sinceramente ancora Roberto per la disponibilita' :-)
di nulla.
ciao, roby

 alla libreria mscomm32.ocx.
...
Dunque, cerchiamo di capirci (vabbe', lo so che sono io che non capisco)...
In Progetto/Componenti ho il segnetto di spunta su Microsoft Comm Control
6.0
In Progetto/Riferimenti (ti riferivi a questo, vero?) non trovo nessun
mscomm32.ocx
A questo punto?
Grazie e ciao.... Maurizio
P.s. ma guarda che mi tocca fare alle 23:19.... venire in negozio per
potermi connettere ad internet e scaricare le news!!! Non potevo essere uno
che torna a casa e si mette a guardare la TV ?!?! :-))))

 che torna a casa e si mette a guardare la TV ?!?! :-))))
Per quello che c'e' da vedere... Io non ho piu' la tv da un po'
e sono soddisfatto di questa scelta.
-- 
ciao, hal

 a me. Sta di fatto che funziona!
Anche io non vedo l'mscomm selezionato nella funestra riferimenti...
ciao, roby

 A me funziona.
...
Con il metodo suggerito da Hal (browse in riferimenti, aggiungere il
riferimento al mscomm32), anche a me.
Ora, dopo aver creato l'oggetto, riesco a lavorarci.
Pero', cosi' facendo ho perso la possibilita' di gestire l'evento
On_Comm..... o no???
Ciao... Maurizio

 On_Comm..... o no???
Non ho vb sottomano, percio' scrivo con riserva di inventario ;-)
Se dichiari la  variabile con il modificatore WithEvents dovresti
riceverne gli eventi.
-- 
ciao, hal

 riceverne gli eventi.
...
Ci provo a breve ed eventualmente posto i risultati.
TNX... Maurizio