IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

appel de function


Sujet :

VB 6 et antérieur

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Par défaut appel de function
    je voudrais que vous m'aidier à réaliser une fonction dans un module de vb6 pour remplacer le code suivant qui devient long sant avoir terminer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Private Sub mn_mfour_Click()
    Frm_cl.Enabled = False
    Frm_cl.Visible = False
    Frm_four.Enabled = True
    Frm_four.Visible = True
    Frm_prod.Enabled = False
    Frm_prod.Visible = False
    End Sub
     
    Private Sub mn_mpro_Click()
    Frm_cl.Enabled = False
    Frm_cl.Visible = False
    Frm_four.Enabled = False
    Frm_four.Visible = False
    Frm_prod.Enabled = True
    Frm_prod.Visible = True
    End Sub
     
    Private Sub mn_nfour_Click()
    Frm_cl.Enabled = False
    Frm_cl.Visible = False
    Frm_four.Enabled = True
    Frm_four.Visible = True
    Frm_prod.Enabled = False
    Frm_prod.Visible = False
    End Sub
     
    Private Sub mn_npro_Click()
    Frm_cl.Enabled = False
    Frm_cl.Visible = False
    Frm_four.Enabled = False
    Frm_four.Visible = False
    Frm_prod.Enabled = True
    Frm_prod.Visible = True
    End Sub
     
    Private Sub mn_spro_Click()
    Frm_cl.Enabled = False
    Frm_cl.Visible = False
    Frm_four.Enabled = False
    Frm_four.Visible = False
    Frm_prod.Enabled = True
    Frm_prod.Visible = True
    End Sub

  2. #2
    Membre confirmé
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Private sub etat(n as integer)
    select case n
    case 0:code0'mn_mfour
    case 1:code1'mn_mpro
    case 2:code2'mn_nfour
    case 3:code3'mn_npro
    case 4:code4'mn_spro
    end select
    end sub
     
    Private Sub mn_mfour_Click()
    etat(0)
    End Sub
     
    Private Sub mn_mpro_Click()
    etat(1)
    End Sub
     
    Private Sub mn_nfour_Click()
    etat(2)
    End Sub
     
    Private Sub mn_npro_Click()
    tat(3)
    End Sub
     
    Private Sub mn_spro_Click()
    etat(4)
    End Sub

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour lavida,


    Il faut te servir de la collection Form

    Voilà un exermple (à toi de l'adapter à ton cas)

    Un projet avec 4 Forms nommées Form1, Form2, Form3 et Form4

    sur Form1 : un bouton de commande Command1

    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Private Sub Form_Load()
      'la collection Forms ne concerne que les Forms chargées.
      'ce que l'on fait donc ici
      Form2.Show
      Form3.Show
      Form4.Show
      valide "Form1" ' et ici on fait d'une pierre 2 coups : seule Form1 sera visible au départ
    End Sub
     
    Private Sub Command1_Click()
        valide "Form4" ' tu choisis ici ta Form
    End Sub
     
     
    Private Sub valide(maforme As String)
      For Each f In Forms
        Select Case f.Name
          Case maforme
            f.Visible = True
            f.Enabled = True
          Case "Form2", "Form3", "Form4" ' tu ne mets là que les Forms parmi lesquelles décider
            f.Visible = False
            f.Enabled = False
        End Select
      Next
    End Sub
    Lance ... tu vas comprendre...

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    Sympa, y'a 2 solutions différentes J'aime bien quand ça se passe comme ça

    Au passage, ton exemple ucfoutu met en évidence une des lacunes les plus graves (à mon sens) de vb6 : pas de variable dynamiques.

    Par ex en php, tu peux faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function machin($ma_variable_d_entrée as string) {
    $ma_variable_locale as object;
    $var1 as object;
    $var2 as object;
    $var3 as object;
        /* du code pour peupler var1, var2 et var3 par exemple ... */
        $ma_variable_locale =  $$ma_variable_d_entrée;
     
    }//EOF
    Dans cet exemple, volontairement vb-isé pour que tout le monde comprenne (les dollars en php représentent les variables) la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ma_variable_locale =  $$ma_variable_d_entrée;
    permet d'affecter à "ma_variable_locale" la variable dont le nom est la string contenue dans "ma_variable_d_entrée".

    Si la chaine "ma_variable_d_entrée" contient "var1" par exemple, alors $ma_variable_locale = $var1 !

    Très très puissant, et dans notre exemple du coup, on pourrait accéder à la form voulue (dont le nom est passé en paramètre) en une seule ligne en bidouillant un peu ...

  5. #5
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Bonjour,

    Attention à ne pas affirmer sans certitude
    Citation Envoyé par Vld44 Voir le message
    Sympa, y'a 2 solutions différentes J'aime bien quand ça se passe comme ça

    Au passage, ton exemple ucfoutu met en évidence une des lacunes les plus graves (à mon sens) de vb6 : pas de variable dynamiques.
    .../...
    ... et le Dictionary ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function machin(ma_variable_d_entrée As String)
        Dim ma_variable_locale As New Dictionary
        Dim var1 As Object, var2 As Object, var3 As Object
     
        Set var1 = Form1
        ' du code pour peupler var1, var2 et var3 par exemple ... '
        ma_variable_locale.Add ma_variable_d_entrée, var1
     
        Debug.Print TypeName(ma_variable_locale(ma_variable_d_entrée))
     
    End Function
    Evidemment l'utisation sera moins évidente qu'avec php mais
    il n'y a encore rien que je n'ai vu impossible avec VB6 ce qui n'est pas le cas avec php
    Ceci dit ce n'est pas pire que dire
    Citation Envoyé par Ucfoutu
    Il faut te servir de la collection Form
    comme s'il n'y avait qu'une seule solution - je te rejoindrais donc sur ta 1ère phrase citée plus haut.

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour DarkVader,

    Tu as raison : le verbe falloir m'est venu (de bon matin) à la place du verbe pouvoir...

    J'aurais pas du l'utiliser (et ce d'autant que j'ai 3 autres solutions... mais celle que j'ai exposée sera plus compréhensible pour lavida ...)

  7. #7
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Bonjour,
    Sur, il y en aura au moins autant que de développeurs s'attachant à cette tache
    et même plus pour peu que chacun ait plusieurs solutions

  8. #8
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    Citation Envoyé par DarkVader Voir le message
    ... et le Dictionary ?
    Evidemment l'utisation sera moins évidente qu'avec php
    C'est de la haute bidouille ton truc Comment dire ... Mais c'est pas la classe quoi, pour moi y'a pas photo entre une fonctionnalité native propre et nette et des trucages maisons ... (bon, ça me rappelle une conversation ou tu comparais extends avec implement)

    Mais méa culpa, on s'en sort quand même.

  9. #9
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par Vld44 Voir le message
    C'est de la haute bidouille ton truc Comment dire ... Mais c'est pas la classe quoi, pour moi y'a pas photo entre une fonctionnalité native propre et nette et des trucages maisons ...
    S'il fallait n'utiliser que des fonctions natives (notamment avec un language qui a cessé d'évoluer), on ne serait pas sorti d'affaire.
    Bien au contraire la classe c'est de toujours avoir une solution - il n'y a pas de « bon » code, il n'y a que du code fonctionnel
    (j'entends rapide et sans erreur) - le reste, c'est du vent

  10. #10
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Moi, j'aime bien le vent. Si deux codes sont fonctionnellement identiques, j'aime utiliser celui que je trouve le plus élégant, le plus simple, le plus facile à comprendre, etc ...

  11. #11
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bon. Me revoilà, mais avec quelques explications :

    J'ai choisi de montrer à lavida le code que je lui ai montré car :
    1) il me paraissait proche de sa compréhension
    2) il était moins gourmand en mémoire puisqu'il utilisait la collection Forms déjà présente. Comme toujours, toutefois, une gourmandise moins grande en mémoire peut se traduire par une vitesse d'exécution moins rapide. Mais lavida n'utilise que quelques Forms et tout se passe donc très vite.

    Une solution simple, rapide ?
    Elle n'est pour moi qu'un faux-ami (car plus gourmande en mémoire) et je ne l'utiliserais personnellement (chacun voit midi à sa porte comme il l'entend en matière d'optimisation) que si, le nombre de Forms étant très élevé, celà vaudrait vraiment le coup d'augmenter la consommation de mémoire pour accélérer de façon perceptible ...

    La voilà donc , cette solution "faux-ami" :

    4 Forms Form1,... Form4
    et un bouton de commande Command1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private f As Form
    Private Sub Form_Load()
      Set f = Form4
    End Sub
     
    Private Sub Command1_Click()
      valide Form3
    End Sub
     
    Private Sub valide(f1 As Form)
      f.Visible = False
      f.Enabled = False
      f1.Show
      f1.Visible = True
      f1.Enabled = True
      Set f = f1
    End Sub

    A lavida ==>> bien que cette solution te paraitra fort simple, je la déconseille dans ton cas.

  12. #12
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    Citation Envoyé par Delbeke Voir le message
    Moi, j'aime bien le vent. Si deux codes sont fonctionnellement identiques, j'aime utiliser celui que je trouve le plus élégant, le plus simple, le plus facile à comprendre, etc ...
    Je plussoie, et je peux te dire par expérience que l'esthétique d'un programme (si tant est qu'elle soit objectivement définissable [...]) compte pour beaucoup sur sa maintenabilité ET sur la qualité de la maintenance.

    Et puis pour préciser ce que j'entends par classe, ça serait par ex dans l'exemple ici présent sur les forms :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $$monparamdentrée.show
    Ca j'aime, c'est beau, c'est de la puissance, c'est ... aaaaaa /me aime les méta variables !!!

  13. #13
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par Delbeke Voir le message
    Moi, j'aime bien le vent. Si deux codes sont fonctionnellement identiques, j'aime utiliser celui que je trouve le plus élégant, le plus simple, le plus facile à comprendre, etc ...
    Il est difficile de ne pas être en accord - l'exemple avec Dictionary n'avait pour objet que rebondir sur l'absence d'un parallèle au modèle php $$ -
    pas de dire que c'était la solution dans l'exemple précédent.
    Pour la suite qui était peut-être plus confuse, je répondais aux limitations des fonctions natives qui iront grandissantes sous VB
    vis à vis d'autres langages qui eux continuent d'évoluer d'où l'obligation d'utiliser des objets externes tels que Dictionary.

    On est parti en troll ?

Discussions similaires

  1. Appeller une function javascript de la page mère
    Par Anubis dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/07/2007, 15h22
  2. Appel de function sur événement SurClic
    Par Lingo dans le forum Access
    Réponses: 1
    Dernier message: 06/10/2006, 12h52
  3. Page Html qui appel une function
    Par grimsk dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 15/09/2006, 20h01
  4. Appel de function en SQL Dynamique
    Par dkd dans le forum Oracle
    Réponses: 22
    Dernier message: 28/09/2004, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo