OVH Cloud OVH Cloud

Developpement d'application form less

7 réponses
Avatar
dorlag
Bonjour à tous,

Je souhaite développer une application en VB6 sans fenètre.
Cette appli utilise un composant winsock.

J'ai donc crée un fenetre MaForm dans laquelle j'ai associé le dit composant
Winsock. Dans un module j'ai une procédure Main qui Loade ma fenetre,
excécute mon code et ferme la fenètre :
Load MaForm
MaForm.MonCode
Unload MaForm
MonCode est bien excécuté (si je met des msgbox ou des espions) mais mon
composant Winsock ne fonctionne pas.
Si je fais la même chose sans le Unload : tout est OK.

Quelle est la solution la plus rationnelle pour utiliser un composant sans
que l'utilisateur ai de fenetre (et sans que le programme reste en mémoire,
bien entendu).

Merci de vos réponses

7 réponses

Avatar
LE TROLL
Salut, ben on va voir les autres réponses, mais souvent un
objet, je crois bien qu'il faut qu'il soit vu...
---------

"dorlag" a écrit dans le message de
news:
Bonjour à tous,

Je souhaite développer une application en VB6 sans
fenètre.
Cette appli utilise un composant winsock.

J'ai donc crée un fenetre MaForm dans laquelle j'ai
associé le dit composant
Winsock. Dans un module j'ai une procédure Main qui Loade
ma fenetre,
excécute mon code et ferme la fenètre :
Load MaForm
MaForm.MonCode
Unload MaForm
MonCode est bien excécuté (si je met des msgbox ou des
espions) mais mon
composant Winsock ne fonctionne pas.
Si je fais la même chose sans le Unload : tout est OK.

Quelle est la solution la plus rationnelle pour utiliser
un composant sans
que l'utilisateur ai de fenetre (et sans que le programme
reste en mémoire,
bien entendu).

Merci de vos réponses


Avatar
Jacques93
Bonjour,
dorlag a écrit :
Bonjour à tous,

Je souhaite développer une application en VB6 sans fenètre.
Cette appli utilise un composant winsock.

J'ai donc crée un fenetre MaForm dans laquelle j'ai associé le dit composant
Winsock. Dans un module j'ai une procédure Main qui Loade ma fenetre,
excécute mon code et ferme la fenètre :
Load MaForm
MaForm.MonCode
Unload MaForm
MonCode est bien excécuté (si je met des msgbox ou des espions) mais mon
composant Winsock ne fonctionne pas.
Si je fais la même chose sans le Unload : tout est OK.

Quelle est la solution la plus rationnelle pour utiliser un composant sans
que l'utilisateur ai de fenetre (et sans que le programme reste en mémoire,
bien entendu).

Merci de vos réponses



Soit la cacher,

MaForm.Hide

Soit l'afficher en dehors de l'écran :

MaForm.Top = -(MaForm.Height)
MaForm.Left = -(MaForm.Width)

--
Cordialement,

Jacques.
Avatar
dorlag
Merci de vos réponses,

Si je cache la feuille (maform.hide) c'est OK, mon code marche à merveille.
Si j'inclue à la fin de ma procedure main un unload maform : le code ne
marche plus (alors que je l'appelle AVANT de fermer la fenetre).
Je suis un peu perplexe. J'ai essayé de passe par un objet pour ne pas avoir
à traiter le composant (Set Winsock = CreateObject("MSWinsock.Winsock")) mais
dans ce cas je ne sais pas gérer l'évenement Winsock_DataArrival.

Merci de vos éclaircissements.
Avatar
Jacques93
Bonjour,
dorlag a écrit :
Merci de vos réponses,

Si je cache la feuille (maform.hide) c'est OK, mon code marche à merveille.
Si j'inclue à la fin de ma procedure main un unload maform : le code ne
marche plus (alors que je l'appelle AVANT de fermer la fenetre).
Je suis un peu perplexe. J'ai essayé de passe par un objet pour ne pas avoir
à traiter le composant (Set Winsock = CreateObject("MSWinsock.Winsock")) mais
dans ce cas je ne sais pas gérer l'évenement Winsock_DataArrival.

Merci de vos éclaircissements.



Pour gérer les évenements, il faut passer soit par une feuille en y
mettant un contrôle Winsock, soit par un module de classe en déclarant :

Private WithEvents MySocket As Winsock


--
Cordialement,

Jacques.
Avatar
dorlag
Je suis désolé d'insiter mais je suis vraiment largué : peux-tu me donner un
peu plus d'infos au sujet du module de classe : j'ai bien essayé mais malgré
ma déclaration "Private WithEvents MySocket As Winsock" je n'arrive pas à
récupérer les évènements. Malgrè mes recherches, je n'ai pas trouvé de code
satisfaisant ni avec un module de classe ni en passant par l'API windows.

Merci de votre aide

"Jacques93" a écrit :
Pour gérer les évenements, il faut passer soit par une feuille en y
mettant un contrôle Winsock, soit par un module de classe en déclarant :

Private WithEvents MySocket As Winsock
Avatar
Jacques93
Bonjour,
dorlag a écrit :
Je suis désolé d'insiter mais je suis vraiment largué : peux-tu me donner un
peu plus d'infos au sujet du module de classe : j'ai bien essayé mais malgré
ma déclaration "Private WithEvents MySocket As Winsock" je n'arrive pas à
récupérer les évènements. Malgrè mes recherches, je n'ai pas trouvé de code
satisfaisant ni avec un module de classe ni en passant par l'API windows.

Merci de votre aide

"Jacques93" a écrit :
Pour gérer les évenements, il faut passer soit par une feuille en y
mettant un contrôle Winsock, soit par un module de classe en déclarant :

Private WithEvents MySocket As Winsock




Quelques explications ici :

http://www.frameip.com/vb_mode_tcp_udp/

voir le paragraphe 3.3.2

NB: Dans un module de classe, il faut que winsock soit dans les
références et non dans les composants.

Module de classe :

Option Explicit

Private WithEvents MySocket As Winsock

Private Sub MySocket_ConnectionRequest(ByVal requestID As Long)
MySocket.Close
MySocket.Accept requestID
MySocket.SendData "Connecté au serveur"
End Sub

Private Sub Class_Initialize()
Set MySocket = New Winsock
MySocket.LocalPort = 4000 ' à adapter
MySocket.Listen
End Sub

Private Sub Class_Terminate()
Set MySocket = Nothing
End Sub


--
Cordialement,

Jacques.
Avatar
dorlag
Merci de ton aide,

mais je galère toujours.

Je vais poster un nouveau topic à ce sujet.

"Jacques93" a écrit :

Bonjour,
dorlag a écrit :
> Je suis désolé d'insiter mais je suis vraiment largué : peux-tu me donner un
> peu plus d'infos au sujet du module de classe : j'ai bien essayé mais malgré
> ma déclaration "Private WithEvents MySocket As Winsock" je n'arrive pas à
> récupérer les évènements. Malgrè mes recherches, je n'ai pas trouvé de code
> satisfaisant ni avec un module de classe ni en passant par l'API windows.
>
> Merci de votre aide
>
> "Jacques93" a écrit :
> Pour gérer les évenements, il faut passer soit par une feuille en y
> mettant un contrôle Winsock, soit par un module de classe en déclarant :
>
> Private WithEvents MySocket As Winsock
>

Quelques explications ici :

http://www.frameip.com/vb_mode_tcp_udp/

voir le paragraphe 3.3.2

NB: Dans un module de classe, il faut que winsock soit dans les
références et non dans les composants.

Module de classe :

Option Explicit

Private WithEvents MySocket As Winsock

Private Sub MySocket_ConnectionRequest(ByVal requestID As Long)
MySocket.Close
MySocket.Accept requestID
MySocket.SendData "Connecté au serveur"
End Sub

Private Sub Class_Initialize()
Set MySocket = New Winsock
MySocket.LocalPort = 4000 ' à adapter
MySocket.Listen
End Sub

Private Sub Class_Terminate()
Set MySocket = Nothing
End Sub


--
Cordialement,

Jacques.