Addin helper - créez vos propres addin pour vb6 [modules de classe]

Soyez le premier à donner votre avis sur cette source.

Vue 5 486 fois - Téléchargée 670 fois


Description

Je vous propose 5 classes qui vont vous aider pour créer vos propres Addin.

======= 4 classes autonomes
AfCls_ButtonHelper => crée un item dans le menu des composants et renvoie l'évènement click
AfCls_MenuHelper => crée un bouton avec image et tooltip dans la toolbar et renvoie l'évènement click
AfCls_FormHelper => vous y attachez votre formulaire et savez à tout moment son état de chargement et pouvez facilement agir en conséquence
AfCls_UserDocHelper => crée une instance de votre userdocument, vous pouvez alors aussi facilement interagir (tant en MDI qu'en SDI)
======= 1 classe wrapper
AfCls_CoreHelper => regroupe une instance de chaque, chaque objet étant optionnel

vi vous avez besoin de 3 boutons et 2 userdocuments par exemple, pour garder ce côté pratique d'une seule instanciation faite plutôt une classe héritant de AfCls_CoreHelper (sans transmettre les "enfants" au 'Connect') et déclarez-y 2 'AfCls_ButtonHelper' et 1 'AfCls_UserDocHelper' supplémentaires
ou modifiez juste 'AfCls_UserDocHelper', question de goût.... ^^

pas forcément évident de comprendre le fonctionnement, j'ai épuré au possible en m'appuyant sur des sources existantes et sur la documentation MSDN, j'essayerai de répondre à mieux à vos questions

comme d'hab j'attends vos retours :p
ci-dessous le "code utile" final, ce qui simplifie grandement la tâche

Source / Exemple :


'
'
'   *- CONNECT : INITIALIZE -*
Private Sub AddinInstance_Initialize()
'   init classe d'aide
    Set AfAddIn = New AfCls_CoreHelper
     
'   menu
    AfAddIn.Menu.Caption = "Titre de votre menu"
    
'   bouton
    With AfAddIn.Button
        .ToolTipText = "Afficher / masquer l'horloge"
        .RessourceID = 101
    End With

'   Concepteur
    Set AfAddIn.DsrConnect = Me

'   userdoc
    With AfAddIn.UserDocument
        .Name = "UDoc_AddIn"
        .Caption = "Exemple : horloge bidon"
    End With
End Sub
'
'
'   *- CONNECT : CONNEXION -*
Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
'   instance VB
    Set AfAddIn.VBInstance = Application

'   initialisation finale
    AfAddIn.Connection AddInInst, False, True
End Sub
'
'
'   *- CONNECT : DéCONNEXION -*
Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
'   Supprime le bouton, menu, et les forms
    AfAddIn.Disconnection
End Sub

Conclusion :


les classes sont fournies avec un "projet bidon", une simple horloge qui vient se placer dans l'IDE....
projet uniquement pour que vous puissiez tester de suite, la source ne porte que sur les 5 classes

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_candyraton
Messages postés
109
Date d'inscription
dimanche 27 juillet 2008
Statut
Membre
Dernière intervention
2 février 2012
3 -
ok
le test est important.

J'ai vérifié mes dires, ben c'est exactement le contraire:
avec setwindowpos la propriété .visible change, mais (comme tu dis) pas avec SetLayeredWindowAttributes (preuves à l'appui).
Faut croire que setwindowpos agit directement sur la propriété de la feuille.
PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29 -
salut,

il ne faut pas confondre la propriété visible et le fait que tu la vois...
si ta form n'est plus dans ton espace de travail, tu peux toujours interagir sur sa visibilité et pourtant... tu ne la vois pas
de même qu'avec un taux de transparence de 255 sous xp, elle est transparente mais pas invisible. la méthode "visible" fournie permet juste de ne pas forcer le chargement en "posant la question" si la form n'est pas chargée

et tu n'as pas d'erreur de déchargement d'une feuille non chargée parce qu'en réalité, sans test, tu charges quand même cette feuille!

test => un projet, 2 forms :

FORM1 :
Private Sub Form_Load()
Unload Form2
End Sub

FORM2 :
Private Sub Form_Initialize()
MsgBox "FORM2 : j'ai bien été chargée"
End Sub

donc en réalité, tu décharges une feuille chargée ;), donc pas d'erreur

++
cs_candyraton
Messages postés
109
Date d'inscription
dimanche 27 juillet 2008
Statut
Membre
Dernière intervention
2 février 2012
3 -
D'accooooorrd...
Trés instructif;
J'ai parcouru et essayé
C'est une très bonne base de travail.
Je garde ça sous le coude, je suis persuadé que ça me servira (j'aurais sûrement des questions à ce moment là).
Au niveau codage, j'ai rien a redire (évidement) (ça donne envie de trouver (bizarre non?) (la perfection d'autrui taquinerai mon imperfection? je pense pas car pcpt a des grands pieds :))
Il y a même des exemples.
J'ai vu l'image dans l'éditeur de ressource, mais pas le gif, il est ou?
J'ai aussi envi d'apprendre ce que sont les concepteurs et .DsrConnect en lisant ce code.
bref, envi d'en savoir plus.
Pour http://www.codyx.org/snippet_form-chargee-form-visible_210.aspx#689; pour les forms comme pour les fenêtre l'IDEAL serait un "capteur" qui "lit" sur l'écran la réalité finale des choses (visible ou non), car il me semble avoir vu que si la form est rendue invisible par SetLayeredWindowAttributes la propriété .visible change, mais pas avec SetWindowPos whohandle, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE + SWP_HIDEWINDOW + SWP_NOACTIVATE + SWP_NOZORDER.
Je me trompe?
(de toute façon, avec ce qu'on a on y arrive.)
J'ai aussi constaté que si je demande à unloadé une form non loadée je n'ai pas d'erreur signalée;
Est-ce mieux de faire le test?

Je découvre For Each objects In Forms
qui me sera bien utile.

bref, c'est bien sympa tout ça.
PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29 -
merci pour vos comms (et note)
les addins sont assez "secrets", çà l'était pour moi en tout cas, j'espère que ces classes pourront vous aider à démystifier un peu la chose :p

nb : petite maj de nettoyage et 2 évènements pour le userdoc

je modifierai selon vos demandes
++
cs_NISANDSYSTEMS
Messages postés
179
Date d'inscription
vendredi 1 novembre 2002
Statut
Membre
Dernière intervention
9 janvier 2010
-
Bonjour,
Ouhais, bof, pffff, pas terrible. Que dire???

Je blague, heureusement même.
Sinon, bon travail avec recherche sur ce sujet un peu sensible pour les débutants et mêmes les confirmés.
Très bonne explication, rien à dire.
Si une petite chose! continue comme cela, c'est bien.
A la prochaine lecture.

Philippe.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.