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 :

Plantage dans une fonction callback


Sujet :

VB 6 et antérieur

  1. #21
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    514
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 514
    Points : 131
    Points
    131
    Par défaut
    Merci

    Au premier coup d’œil, j'au vu un truc qui pourrait tout expliquer : ton programme ne boucle pas sur l'appel de EnumChildWindows ! Bon sang mais c'est bien sûr ! C'est EnumChildWindows qui boucle en interne sur l'appel du CallBack !

    Je regarde tout ça de façon plus approfondie et je reviens.

    A+

    AMIcalement

  2. #22
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    514
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 514
    Points : 131
    Points
    131
    Par défaut
    C'est à s'arracher les cheveux ! voici le nouveau 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
    27
    28
    29
    30
    31
     
    Public Sub Fenetres_filles(Mere As Long)
    '"Filles" est la table des types "Fille" où sont listées les données des fenêtres filles
    Dim texte As String * 21, n As Long
      MaxFilles = 100
      ReDim Filles(MaxFilles)
      nfille = 0
       EnumChildWindows Mere, AddressOf Une_Fille, ByVal nfille
      For nfille = 0 To nfille - 1
        With Filles(nfille)
          n = GetWindowText(.Handle, texte, 20)
          .TypeF = IIf(n > 0, Left(texte, n), "_")
          n = SendMessage(.Handle, WM_GETTEXT, 20, texte)
          .texte = IIf(n > 0, Left(texte, n), "_")
          .Autre = ""
        End With
    Next
    End Sub
     
    Public Function Une_Fille(ByVal hwndf As Long, ByVal nfille As Long) As Boolean
      If nfille > MaxFilles Then
        MaxFilles = MaxFilles + 100
        ReDim Preserve Filles(MaxFilles)
      End If
      With Filles(nfille)
        .numero = nfille
        .Handle = hwndf
      End With
      nfille = nfille + 1
      Une_Fille = nfille < 600
    End Function
    Maintenant, il ne me ramène qu'une seule fenêtre, avec aucun texte, et que ma fenêtre cible soit "mon démineur" (écrit en VB6 avec plein de boutons) ou celui de Microsoft.

    Je rame !

    AMIcalement, quand même

  3. #23
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    Par défaut
    Ligne 9 : For nfille = 0 To nfille - 1 ????
    Le compteur est en même temps une limite ?
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  4. #24
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 172
    Points
    17 172
    Par défaut
    Salut

    l_autodidacte
    @L'AMI Yves
    Je dirais même plus For 0 To - 1 donc le code à l’intérieur de la boucle For n'est jamais exécuté, à moins d'y ajouter Step -1
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  5. #25
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    514
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 514
    Points : 131
    Points
    131
    Par défaut
    Bonjour à tous les deux.

    Je n'avais pas fait attention à ce détail ! Est-ce que VB6 réévalue la borne à chaque passage ? La situation actuelle, après avoir transformé l'instruction en "for i = 0 to nfille-1", ne me permet pas de répondre, car le résultat est le même (donc nfille vallait 1). Je pense que ProElect se trompe un tout petit peu : ma boucle était exécutée une fois.

    Je me semi-pardonne cette faute de programmation, car j'avais conservé les "debug.print" : si EnumChildWindows m'en avait énuméré plusieurs, je l'aurais vu, et j'aurais cherché pourquoi, ensuite la boucle For ne m'en listait qu'une, et là, j'aurais vu la faute. A n'en pas douter une seconde, non mais sans blague.

    Je suis vraiment perplexe : je suis bien certain que l'application que je lance ouvre une fenêtre qui a au moins 300 fenêtres filles (les boutons du démineur). Je la lance avec "Shell", qui me répond un Numéro de Pid. Il y a une petite magouille (piquée sur le Net) qui me permet d'obtenir le handle de la fenêtre correspondante. Je vérifie bien que le titre de cette fenêtre est celui attendu ("Démineur", pour être original). Dans ces conditions, est-il possible que la fenêtre sur laquelle je lance le EnumChildWindows ne soit pas la bonne ? Voila ma prochaine recherche.

    Je vais surement revenir ici avant longtemps...

    Encore merci.

    AMIcalement.

  6. #26
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 172
    Points
    17 172
    Par défaut
    Salut du soir
    Je pense que ProElect se trompe un tout petit peu : ma boucle était exécutée une fois.
    Ben là je comprend pas, je viens de vérifier, chez moi cela ne passe pas dans la boucle For.

    Pour le reste ne programment plus sous VB6, toutes mes interventions son par apport à mes souvenirs, donc pas toujours des plus fiables car je me suis tourné du coté HTML, PHP, CSS et JavaScript, donc des fois il y a confusion de ma part.
    En tous cas, bon courage à toi L'AMI Yves, je suis toujours nostalgique de VB6, c'est pourquoi je surveil toujours ce forum.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  7. #27
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    514
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 514
    Points : 131
    Points
    131
    Par défaut
    Pour le moment, je suis dans la mélasse...

    Tu fais en PHP HTML CSS et JavaScript ce que tu faisais avant en VB6 ? J'ai fait pas mal de choses avec cette combinaison, mais pas du tout les mêmes : il faut que ça tourne en environnement "serveur/navigateur client"...

Discussions similaires

  1. plantage dans une fonction récursive
    Par Lintel-oo dans le forum Langage
    Réponses: 3
    Dernier message: 04/05/2014, 21h16
  2. [C#] Mettre à jour l'affichage dans une fonction callback
    Par pdgnr dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/02/2012, 08h33
  3. [Doctrine] Requête dans une fonction callback
    Par darkalex dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 24/10/2010, 12h34
  4. appel d'un autre callback dans une fonction
    Par jponsoda dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 23/06/2010, 10h01
  5. Changer valeur variable global dans une fonction callback
    Par bog333 dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 02/10/2008, 15h14

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