[AIDE] Création de contrôle dans le code

Résolu
nico_fip1 Messages postés 80 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 26 septembre 2006 - 10 oct. 2005 à 10:36
nico_fip1 Messages postés 80 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 26 septembre 2006 - 10 oct. 2005 à 18:43
Bonjour,
Quelqu'un pourrait me dire s'il est possible de créer des contrôles directement dans le code :

Private WithEvent toto as "Control"
Set toto as New "Control"

En l'occurence, ce contrôle serait un Timer, ou un Contrôle ActiveX
Merci d'avance

Peut-on les mettre dans une Form ? Dand un module de classe ?

Nico
Strasbourg
France

4 réponses

nico_fip1 Messages postés 80 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 26 septembre 2006
10 oct. 2005 à 18:43
Conclusion :

2 possibilité :

1) Créer un nouveau contrôle Active X

- Faire un projet Contrôle Active X

- Mettre les différents contôles dans la feuille "ControlUser"

- A partir de là, vous pouvez directement récupérer les évenement et gérer les contrôles

Je conseille ceci, qui fait très propre.

Inconveniant : Vous êtes obligés de compiler l'Active X avant de l'utiliser dans le projet



2) Créer dans son projet un pseudoControlUser

- Crée une feuille clasique

- la rendre invisible et enlever toutes les options "redimensionner", 3D...

- Placer ici les contrôles

- Dans votre module de classe, mettez ceci :



Private Sub Class_Initialize()

Load FrmFTP

Set SockFTP = FrmFTP.ReyFTP

End Sub



Vous pouvez alors gérer directement le controle dans le module de classe

(y compris les évenements)

Ceci est un très bon moyen pour débugger le futur Active X ...



Pour toute question, n'hésitez pas à répondre à ce sujet ...

Merci à [auteurdetail.aspx?ID=13557 DARKSIDIOUS] pour son aide



Nico
Strasbourg
France
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 oct. 2005 à 11:10
Nico : je pense que ton problème vient du type de contrôle que tu veux
instancier : par exemple, le contrôle Timer ne peux pas être instancié,
tu ne peux que lui passer qu'une copie d'instance déjà crée.



Si tu veux un cas concret : place un timer dans ta feuille nommé Timer1.



Si tu tape ceci :

Private Sub Form_Load()



Dim oTimer As Timer



Set oTimer = New Timer



End Sub



VB refuse de créer la nouvelle instance du timer, alors qu'avec :

Private Sub Form_Load()



Dim oTimer As Timer



Set oTimer = Me.Timer1



End Sub



Là ca marche bien.



Donc en gros, tu ne peux pas utiliser l'opérateur New pour créer une
nouvelle instance d'un contrôle ! (c'est le même principe que les
classes PublicNotCreatable d'une dll activeX : tu peux les utiliser,
mais pas les instancier à volonté).


Donc pour créer une instance d'un contrôle, il faut rajouter ce contrôle dans la collection des contrôles d'une feuille :

Private Sub Form_Load()



Dim oTimer As VB.Timer



Set oTimer = Me.Controls.Add("vb.timer", "Timer1")



End Sub




_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
nico_fip1 Messages postés 80 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 26 septembre 2006
10 oct. 2005 à 14:53
En fait, j'ain une classe, qui gêre une connexion Réseau, et j'aimerais que cette classe utilise un Timer ; donc je n'ai pas de Form dans laquelle déposer un objet.

Donc si j'ai bien compris ta réponse, une classe ne peux pas utiliser les contoles tels les Timer, ou tel les ActiveX.

Il faut OBLIGATOIREMENT que je crée un contrôle ActiveX dont l'interface utilisateur contient le Timer ?

Ai-je le droit d'écrire
Set oTimer = Me.Controls.Add("vb.timer", "Timer1")
dans un module de classe ?

Nico
Strasbourg
France
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 oct. 2005 à 16:15
Ben non, vu que le Me va être inconnu, et surtout, la collection Controls appartient à l'objet Form et non à une classe !



Après, il est sûrement possible de faire autrement pour intégrer une
classe d'un contrôle dans une autre classe, mais je ne vois pas comment
(c'est pour cà que je râle à chaque fois que je vois un nouveau
contrôle ocx qui aurait très bien pu être développé en tant que dll
activeX : c'est le cas du timer et de Winsock : à part le petit carré
gris symbolisant le contrôle sur une feuille en mode création, pour le
manipuler, il faut écrire du code, donc j'avoue ne pas comprendre
pourquoi microsoft en a fait des contrôles et non des Classes ActiveX
directement !).

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
Rejoignez-nous