Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Créer une classe ou une DLL ?

2 réponses
Avatar
François ROLAND
Actuellement dans une appli, j'utilise un fichier de code postaux.

Pour faire une recherche, Je rentre un code, et je compare dans le fichier
jusqu'a trouver toutes les communes qui correspondent.

Pas sorcier.

En revanche, j'aimerai que cet fonction puisse etre utiliser dans plusieurs
applications. Pour eviter de retaper (malgrès les copier coller) tout le
code, et surtout pour alleger, j'aimerai créer soit un module de class, soit
une DLL.

Malheureusement, mes copétences s'arretent avant ça.

Si qqn pouvait me guider dans cette démarche. Bien entendu, je ne suis pas
pressé pour la réponse

Ci joint le code que j'utilise actuellement:

Pla saisie d'un code postal =

Private Sub com_cp_LostFocus()

If ch_commune% = 1 Then Exit Sub

com_commune.clear

com_cp.clear
com_cp.text = t_cp.text

Me.MousePointer = 11

Open App.Path & "\Codepos.txt" For Random As #1 Len = Len(cp)
nb_cp = LOF(1) / Len(cp)


For i = 1 To nb_cp

Get #1, i, cp

If Left$(Trim$(cp.code), 5) = Trim$(com_cp.text) Then

com_commune.AddItem Trim$(cp.ville)

End If

Next i

Close

Me.MousePointer = 0



Pour la saisie d'une commune =


Private Sub com_commune_LostFocus()

If ch_cp% = 1 Then Exit Sub

com_cp.clear

com_commune.clear
com_commune.text = t_ville.text

Me.MousePointer = 11

Open App.Path & "\Codepos.txt" For Random As #1 Len = Len(cp)
nb_cp = LOF(1) / Len(cp)


For i = 1 To nb_cp

Get #1, i, cp

If Trim$(Left$(cp.ville, 40)) = Trim$(UCase$(com_commune.text))
Then

com_cp.AddItem Trim$(cp.code)

End If

Next i

Close

Me.MousePointer = 0





Cordialement

--

François ROLAND
francois.roland@free.fr

2 réponses

Avatar
Ledev
François ROLAND wrote:

Bonjour

Actuellement dans une appli, j'utilise un fichier de code postaux.

Pour faire une recherche, Je rentre un code, et je compare dans le
fichier jusqu'a trouver toutes les communes qui correspondent.

Pas sorcier.

En revanche, j'aimerai que cet fonction puisse etre utiliser dans
plusieurs applications. Pour eviter de retaper (malgrès les copier
coller) tout le code, et surtout pour alleger, j'aimerai créer soit
un module de class, soit une DLL.

Malheureusement, mes copétences s'arretent avant ça.

Si qqn pouvait me guider dans cette démarche. Bien entendu, je ne
suis pas pressé pour la réponse

Ci joint le code que j'utilise actuellement:



Pour commencer, crée un projet de type DLL ActivX.
Dedans, vous devriez avoir un module de classe par défault nommé class1,
nommée le par exemple CodePostal.
Ensuite dedans, crée les fonctions:

Public Function MaFonction(MonArg as string) as string
'Code permettant de retrouvée le résultat de la fonctions avec le/les
arguments(sa pourrai être une commune avec le code postal en argument pas
exemple).
...
'Enfin, une fois la valeur trouvée, retourner la comme une fonction
ordinaire:
MaFonction=Resultat
end function

Ainsi, pour faire votre module d'objet, dans votre cas, ne vous occupée pas
que c'est un module d'objet. Utiliser-le comme un module ordinaire(placez
les function/sub). Et ensuite, les functions/sub aparaîtrons comme des
methodes tout a fait ordinaires dans vos applications.

Pour débuguer la Dll, plusieurs solutions:
-La lancée, lancée une nouvelle instance de Vb et l'appellez comme ci
est avait été compiler
-Mais moi, celle que j'utilise plus généralement, c'est de crée un
groupe de projet. Ainsi dans le second projet vous référencez le
1er(projet/référence) et vous pouvez l'utilisée comme si elle était compilé.

Voilà, a+.
Avatar
François Picalausa
Bonjour/soir,

Une classe, créée sous VB, se compose de plusieurs éléments:
-Des Procédures (Sub et functions)
-Des propriétés
-Parfois des événements
(rien que bien particulier en fait...)

En ce qui concerne les procédures que ta classe affichera, il te suffit de
les déclarer en Public:
Public Sub Toto(Arg1 As Long)
'code
End sub

En ce qui concerne les propriétés, on garde souvent une variable qui
contient et maintient les données, sinon, Public aussi:

Private m_ValeurPropriété As Long

Public Property Get Age() As Long 'Quand on demande la valeur de Age
Age=ValeurPropriété
End Property

Public Property Let Age(NewAge As Long) 'Définit la valeur de Age
ValeurPropriété = NewAge
End Property

En ce qui concerne les events, il faut d'abord les déclarer ensuite les
apeller:
Event AgeChange(NouvelAge As Long)

'Code
Public Property Let Age(NewAge As Long) 'Définit la valeur de Age
RaiseEvent AgeChange
ValeurPropriété = NewAge
End Property

Pour utiliser ta classe, une fois construite, si elle n'est pas dans un
ActiveX Dll:
Dim MaClasse As NomDeLaClasse
Set MaClasse = New NomDeLaClasse

MaClasse.MaPropriété = Valeur
MaClasse.MaMéthode
...
Set MaClasse = Nothing

Pour employer les events, il te faudra toutefois la créer comme ceci:
Private WithEvents MaClasse As NomDeLaClasse

Private Sub Form_Load()
Set MaClasse = New NomDeLaClasse
End Sub

Private Sub MaClasse_MonEvenement()
'L'événement est appelé ici
End Sub

Private Sub Form_UnLoad(Cancel As Integer)
Set MaClasse = Nothing 'Détruit l'objet
End Sub

Dans un activeX Dll, la méthode de création est généralement identique... si
ce n'est que pour la lisibilité, on emploiera plutôt
Dim MaClasse As NomDuProjet.NomDeLaClasse
Set MaClasse = New NomDuProjet.NomDeLaClasse

Toutefois, les classes d'un ActiveX Dll ont une propriété Instancing qui,
définie à Global Multiuse, permet d'utiliser le composant directement sans
avoir a passer par As New.
Cela ressemble plus à un module.

Si tu ne veux pas toujours partager les données entre les applications, je
te conseillerais un module de classe simple dans ton projet.
Sinon, pour que tout soit mis à jour à chaque nouvelle version du composant,
peu importe l'application, emploie un nouveau composant activeX Dll et
n'oublie pas, dans les propriétés du projet, la compatibilité binaire pour
que les nouvelles versions soient utilisées par les anciennes applications.
--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"François ROLAND" a écrit dans le message
de news:
Actuellement dans une appli, j'utilise un fichier de code postaux.

Pour faire une recherche, Je rentre un code, et je compare dans le
fichier jusqu'a trouver toutes les communes qui correspondent.

Pas sorcier.

En revanche, j'aimerai que cet fonction puisse etre utiliser dans
plusieurs applications. Pour eviter de retaper (malgrès les copier
coller) tout le code, et surtout pour alleger, j'aimerai créer soit
un module de class, soit une DLL.

Malheureusement, mes copétences s'arretent avant ça.

Si qqn pouvait me guider dans cette démarche. Bien entendu, je ne
suis pas pressé pour la réponse

Ci joint le code que j'utilise actuellement:

Pla saisie d'un code postal >
Private Sub com_cp_LostFocus()

If ch_commune% = 1 Then Exit Sub

com_commune.clear

com_cp.clear
com_cp.text = t_cp.text

Me.MousePointer = 11

Open App.Path & "Codepos.txt" For Random As #1 Len = Len(cp)
nb_cp = LOF(1) / Len(cp)


For i = 1 To nb_cp

Get #1, i, cp

If Left$(Trim$(cp.code), 5) = Trim$(com_cp.text) Then

com_commune.AddItem Trim$(cp.ville)

End If

Next i

Close

Me.MousePointer = 0



Pour la saisie d'une commune >

Private Sub com_commune_LostFocus()

If ch_cp% = 1 Then Exit Sub

com_cp.clear

com_commune.clear
com_commune.text = t_ville.text

Me.MousePointer = 11

Open App.Path & "Codepos.txt" For Random As #1 Len = Len(cp)
nb_cp = LOF(1) / Len(cp)


For i = 1 To nb_cp

Get #1, i, cp

If Trim$(Left$(cp.ville, 40)) > Trim$(UCase$(com_commune.text)) Then

com_cp.AddItem Trim$(cp.code)

End If

Next i

Close

Me.MousePointer = 0





Cordialement