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
> 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?
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
Di nulla, passavo di qua :-P
>>MSComm non e' creabile
>
> ....
> Ecco, sembra che me li vado a cercare... prima esperienza con una classe e
> subito trovo qualche cosa che non si puo' fare. :-))))
Dove sarebbe il divertimento, altrimenti? ;-)
[cut]
> Ammettiamo che ho un Form che si chiama frmMain in cui ho un controllo
> MSComm.
> Come faccio funzionare la classe?
Ad esempio da qualche parte nel form tanto a livello di dichiarazioni
(probabilmente il caso tuo) come di singola procedure, dipende da cosa
vuoi fare, ti dichiari la variabile del tipo MiaClasse:
Private mMiaClasse As MiaClasse
Poi, magari la inizializzi nel load:
Set mMiaClasse = New MiaClasse()
mMiaClasse.Init(MSComm1)
> E se volessi utilizzare la classe in altri form, devo mettere in ciascuno di
> 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 ;-)
> 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
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
> 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)
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/
Contesto:
Visual Basic 6 Ita Professional SP5 , O.S. Windows 2000 pro SP4 Ita
ciao, roby
"hal1961" <hal...@despammed.com> ha scritto nel messaggio
news:83Z103Z67Z126Y1...@usenet.libero.it...
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,
--
> Hai voglia di mandarmi uno zippino con il sorgente direttamente in mail?
> ('indirizzo che vedi e' valido)
> 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
Gli imprevisti della vita :-PPP
[cut]
> 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?
E' quello che accade anche a me. Ma!
Sulla scheda con l'elenco dei riferimenti c'e' un pulsante "Browse".
Lo premi e navighi fino alla System32 e selezioni mscomm32.ocx.
Confermi e sei a posto.
Nota: io se ritorno sulla finestra dei riferimenti continuo a non
vedere selezionato mscomm, ma se controllo il file .vbp con il
blocco note vedo che e' riportato. Non so se accada a tutti o solo
a me. Sta di fatto che funziona!
> Non potevo essere uno
> 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
> E' quello che accade anche a me. Ma!
>
> Sulla scheda con l'elenco dei riferimenti c'e' un pulsante "Browse".
> Lo premi e navighi fino alla System32 e selezioni mscomm32.ocx.
> Confermi e sei a posto.
> Nota: io se ritorno sulla finestra dei riferimenti continuo a non
> vedere selezionato mscomm, ma se controllo il file .vbp con il
> blocco note vedo che e' riportato. Non so se accada a tutti o solo
> a me. Sta di fatto che funziona!
Anche io non vedo l'mscomm selezionato nella funestra riferimenti...
ciao, roby
> 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???
Non ho vb sottomano, percio' scrivo con riserva di inventario ;-)
Se dichiari la variabile con il modificatore WithEvents dovresti
riceverne gli eventi.
--
ciao, hal