[R] Problème de débutant / menu contextuel

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Avatar du membre
micbar
Niveau 3
Niveau 3
Messages : 33
Enregistré le : mer. 21 nov. 2007 17:29
Status : Hors ligne

[R] Problème de débutant / menu contextuel

#1

Message par micbar »

Bonsoir à tous,
Dans le code ci-dessous, je n'arrive pas à comprendre pourquoi $toto et $msg ne prennent pas la même valeur si je clique sur l'option "toto" du menu.
► Afficher le texte
Merci par avance d'avoir bien voulu me lire.
Eppur si muove (Galileo Galilei)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problême de débutant / menu contextuel

#2

Message par Tlem »

Tout simplement parce que la variable $msg, récupère la valeur de la fonction GUIGetMsg() qui elle ne peut récupérer que l'ID du contrôle qui à été cliqué.
Avec cet ID, vous pouvez tout simplement lire ça valeur, et là vous aurez son texte. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Problême de débutant / menu contextuel

#3

Message par Iste »

Je ne suis pas sûr qu'il veuille recuperer le texte de $toto

Si c'est bien ce que je pense, le probleme vien du fait qu'il ne faut pas mettre de sleep()
La, ta boucle ne verifi pas si tu clic sur $toto, mais si tu clic sur $toto exactement au moment ou le message s'affiche. Enfin, un peu compliqué a expliquer.

De plus, le sleep() n'est vraiment pas utile
Remarks

This function automatically idles the CPU when required so that it can be safely used in tight loops without hogging all the CPU.
un bon code alors (si j'ai bien compris ce que tu cherche a faire) serait :

Code : Tout sélectionner

#include <GUIConstants.au3>

GUICreate("Ma fenetre", 300, 200)
$menu = GUICtrlCreateContextMenu ()
$toto = GUICtrlCreateMenuitem ("Toto", $menu)
GUISetState ()

While 1
    $Msg = GUIGetMsg()
    Switch $Msg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $toto
            msgbox(0,$msg,$toto)
    EndSwitch
WEnd
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problême de débutant / menu contextuel

#4

Message par Tlem »

Effectivement, l'explication est bien plus claire. ;)
M'apprendra à faire 10 trucs en même temps. hihihi
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
micbar
Niveau 3
Niveau 3
Messages : 33
Enregistré le : mer. 21 nov. 2007 17:29
Status : Hors ligne

Re: [..] Problême de débutant / menu contextuel

#5

Message par micbar »

Merci à Iste c'est effectivement ce que je voulais faire.
L'inconvénient, c'est qu'en supprimant le sleep(n) le contenu de ma fenêtre clignote comme un arbre de Noël.
Bonne journée à tous.
Eppur si muove (Galileo Galilei)
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Problême de débutant / menu contextuel

#6

Message par Iste »

ben, tu ne dois pas creer de bouton/autre dans la boucle.
Tu les cree avant, et dans la boucle tu met une condition pour si tu dois les actualiser, et ne pas les recreer mais utiliser un symple guictrlsetdata() ou guictrlsetstat()
De plus, si tu cree un truc deux foi, oubli pas de le supprimer avant, sinon tu vas vite avoir des centaines de boutons les un sur les autre.

Je suis pas du genre a dire "tu fais pas comme il faut" sans avoir le script complet, mais là ca qui est sur, c'est que tu utilise pas la fonction GUIGetMsg() comme il faut ^^

Pour rappel, un "bon" script simple se presente comme cela

Code : Tout sélectionner

Creation de la GUI

Boucle infini
Conditions qui testent les boutons
Conditions autres (maj de la GUI, ou autre qui ne se passe pas par un clic gauche)
Fin boucle
Apres, si pour une raison ou une autre tu pense etre obligé de faire comme ca, demande sur le forum comment ammeliorer ton script, je suis sûr qu'on pourra t'aider ;) (peut etre passer au mod evenementiel ?)
Signez ici
Avatar du membre
micbar
Niveau 3
Niveau 3
Messages : 33
Enregistré le : mer. 21 nov. 2007 17:29
Status : Hors ligne

Re: [..] Problême de débutant / menu contextuel

#7

Message par micbar »

Voila la partie du code concernée dans laquelle est recherchée en permanence la qté de mémoire disponible:
► Afficher le texte
Eppur si muove (Galileo Galilei)
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Problême de débutant / menu contextuel

#8

Message par Iste »

hum.. je vois
donc tu dois en permanence actualiser la fenetre
En effet, c'est pas simple ^^

Donc, ce qui est sur, c'est que tu ne peux pas utiliser la meme boucle pour les boutons, et pour l'actualisation des donées

Tu peux donc soit reserver la boucle principal pour l'actualisation et mettre les boutons en func grace a l'option GUIOnEventMode
Ou alors, je sais qu'il y a un moyen pour appeler une fonction periodiquement.

Mais si je sais que c'est possible, je ne sais plus comment faire ^^' Je vais essayer de retrouver... mais la j'espere que quelqu'un d'autre repondra a ma place
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problême de débutant / menu contextuel

#9

Message par Tlem »

Pour rafraîchir la partie ProgressBar, je conseillerais l'utilisation de la fonction AdlibEnable.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
micbar
Niveau 3
Niveau 3
Messages : 33
Enregistré le : mer. 21 nov. 2007 17:29
Status : Hors ligne

Re: [R] Problème de débutant / menu contextuel

#10

Message par micbar »

Merci beaucoup Tlem impeccable.
Franchement je n'aurais pas deviné surtout que "Ad lib Enable" ce n'est pas très parlant.
Bonne soirée à tous.
Eppur si muove (Galileo Galilei)
Répondre