Probleme de return pour un $submenu en variable [Résolu]

Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010
- - Dernière réponse : WorldDMT
Messages postés
882
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
- 28 mars 2010 à 17:31
Bonjour à tous,

Je voulais faire un menu popup en $submenu mais j'ai un souci

menu status {
  Salon-Favoris2
  .$submenu($salonFa2($1))
}
alias salonFa2 {
  var %x = 0
  while (%x < $ini(mirc.ini,chanfolder,0)) {
    %loopm2 = return coucou
    if ($1 == begin) return - 
        elseif ($1 == $calc(%x + 1)) return $readini(mirc.ini,chanfolder,n $+ %x):/join $readini(mirc.ini,chanfolder,n $+ %x)
    elseif ($1 == end) return - 
    inc %x
  }
}


Mon souci est que mes salons ne s'affichent pas, si je met ca:

elseif ($1 == $calc(%x + 1)) return d:/join $readini(mirc.ini,chanfolder,n $+ %x)

ca me met bien autant de "d" que j'ai de salon dans mon menu popup et ca joins bien les salons respectifs.
Donc c'est bien :

"return $readini(mirc.ini,chanfolder,n $+ %x)"

qui ne marche pas, j'ai tenté de faire un alias ou une autre variable en interne mais pareil , dès qu'on met une variable derrière le return %alias ca ne marche pas, si je fais ca exemple:

alias essais {
%essais = monalias
return %essais
}

et ligne pour tester :

elseif ($1 == $calc(%x + 1)) return %essais:/join $readini(mirc.ini,chanfolder,n $+ %x)

et bien ca ne me met même pas monalias dans le menu ( il reste vide et grisé)
même si je rajoute ça dans mon code du $submenu:
var %essais2 = $readini(mirc.ini,chanfolder,n $+ %x)
ou
%essais3 = return $readini(mirc.ini,chanfolder,n $+ %x)

j'ai fais au moins 10 facons differantes pour ne pas dire 20 et passer pour un mito lol

Donc si quelqu'un à une idée ca serait sympa ;)
Mon but de départ était de changer le bouton des favoris de mIRC 6.35 mais je teste mon menu dans la fenêtre de status et puis même si ca me servira pas à grand chose je voudrais bien arriver à comprendre pourquoi ca ne marche pas car peut être que ca me servira un jour pur autre chose.

Merci à tous ;)

PS: je me sert de la super aide " LA Bible pour mIRC scripteur v0.14
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
882
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
3
Merci
bon pour le probleme de la variable %loop2 existe toujour car elle est inutile
ensuite pour le $calc(%x +1) bon calculont ensemble, tu dis bien que n0 bon regarde ce que la loop fait:

alias salonFa2 {
  var %x =  0
  ; ici tu set %x a 0
  while (%x < $ini(mirc.ini,chanfolder,0)) {
    %loopm2 = return coucou <= inutile donc a suprimer
    if ($1 == begin) return -
    ; la premiere loop a valider cette condition donc %x devient 1 pour la 2eme loop
    elseif ($1 == $calc(%x + 1)) return blabla
    ; ici c'est if ($1 == 2) return $read(fichier,n1)
    elseif ($1 == end) return -
    inc %x
  }
}

tu vois?

donc pour la loop c'est $1 == %x return $read(fichier,n $calc(%x - 1)
ce qui signifi que $1 1 return $read(fichier,n0) parceque le %x 0 a été validé pour le "begin"

et pas d'aide dans le mIRC mais $calc(%x - 1) = $(},%x)

bon pour les chans il existe des chans qui contienent des commentaires et des parametres ect. comme je t'ai déja expliqué exp #chan, "blabla" c'est pourquoi j'ai utilisé $pos et $mid d'ailleur j'etais fatigué peut etre :p il suffisait d'utilisé un simple $gettok

donc c'est pourquoi le code doit etre amelioré comme celà

menu status {
  Salon-Favoris2
  .$submenu($salonFa2($1))
}
alias salonFa2 {
  var %x 0,%y $ini(mirc.ini,chanfolder,0)
  while %x <= %y {
    var %z $gettok($readini(mirc.ini,chanfolder,n $+ $(},%x)),1,44)
    if ($istok(begin.end,$1,46)) return -
    elseif ($1 == %x) return %z :join %z
    inc %x
  }
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de WorldDMT
Messages postés
882
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
3
Merci
bof we je vois
mais c'est plus rapide de ne pas utilisé un identifieur dans la commande while donc:
var %x 0,%i $ini(mirc.ini,chanfolder,0)
while %x <= %i { ...

ceci evite de faire un calcul suplement de l'identifieur $ini() a chaque loop si non utilise $readini dans la loop une fois comme ça le $gettok aura un $v1

var %x 0
while $readini(mirc.ini,chanfolder,n $+ %x) {
  var %y $gettok($v1,1,44)
  if ($istok(begin.end,$1,46)) return -
  elseif ($1 == $calc(%x + 1)) return %y :/join %y
  inc %x
  }

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de WorldDMT
Messages postés
882
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
0
Merci
salut
1- l'identificateur est collé au deux point ":"
2- ce n'est pas %x +1 c'est plutot %x - 1 (qui peux etre aussi $(},%x) qui est plus pratique)
3- il existe des parametres commentaires ect... ce qui veux dire tu trouve par exp #chan,"un chan de blabla" donc il va falloir ajouter rien que le chan c'est pourquoi je vais utiliser les identifieurs $pos et $mid
4- %loop2 est inutil

donc conclusion:
menu status {
  Salon-Favoris2
  .$submenu($salonFa2($1))
}
alias salonFa2 {
  var %x 0,%y $ini(mirc.ini,chanfolder,0)
  while %x < %y {
    var %i $readini(mirc.ini,chanfolder,n $+ $(},%x))
    var %z $iif($pos(%i,$chr(44),1),$mid(%i,1,$(},$v1)),%i))
    if ($istok(begin.end,$1,46)) return -
    elseif ($1 == %x) return %z $+ :join %z
    inc %x
  }
}
Commenter la réponse de WorldDMT
Messages postés
882
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
0
Merci
oups re rectifie la loop il en menque un "=" donc %x <= %y
menu status {
  Salon-Favoris2
  .$submenu($salonFa2($1))
}
alias salonFa2 {
  var %x 0,%y $ini(mirc.ini,chanfolder,0)
  while %x <= %y {
    var %i $readini(mirc.ini,chanfolder,n $+ $(},%x))
    var %z $iif($pos(%i,$chr(44),1),$mid(%i,1,$(},$v1)),%i))
    if ($istok(begin.end,$1,46)) return -
    elseif ($1 == %x) return %z $+ :join %z
    inc %x
  }
}
Commenter la réponse de WorldDMT
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010
0
Merci
Salut,

Donc pour le mon identifiant collé aux : et bien oui en fait mon code marche pfffff
menu status {
  Salon-Favoris
  .$submenu($salonFa2($1))
}
alias salonFa2 {
  var %x = 0
  while (%x < $ini(mirc.ini,chanfolder,0)) {
    %loopm2 = return coucou
    if ($1 == begin) return - 
    elseif ($1 == $calc(%x + 1)) return $readini(mirc.ini,chanfolder,n $+ %x) :/join $readini(mirc.ini,chanfolder,n $+ %x)
    elseif ($1 == end) return - 
    inc %x
  }
}


en fait j'avais même ps tilté alors que d'hab j'y fais bien attention mais c'est le système menu popup qui m'a embrouillé car on colle les commandes en standard comme l'exemple dans l'aide :

menu status {
Animalm
.$submenu($animalm($1))
}
alias animalm {
if ($1 == begin) return -
if ($1 == 1) {
return Cow:echo Cow
}
if ($1 == 2) return Llama:echo Llama
if ($1 == 3) return Emu:echo Emu
if ($1 == 4) return
if ($1 == end) return -
}
et vrai que j'avais même pas essayé de décoller car me disait que ca ne marcherait pas car en remplaçant mon $readini(mirc.ini,chanfolder,n $+ %x):.join... par d:/join ca marchait et affichait bien les "d" ralalalalala lol

Ensuite pour le $calc(%x + 1) Et bien si puisque dans le mirc.ini la liste commence en n0=#blabla et je ne comprend pas ton (},%x), je n'ai trouvé aucune aide sur le "(}"

Pour finir ton code marche oui mais je ne sais pas si mieux que le mien, enfin comme quoi il y a plusieurs façons de coder mais je trouve que le tiens est bcp se compliquer pour arriver au même résultat avec ttes ces variable alors que moi une me suffit, ensuite vu que $ini(mirc.ini,chanfolder,0) fait la même chose que $readini(mirc.ini,chanfolder,0)

Enfin en tous cas merci pour les : qui étaient collé pffffff dire que j'ai tenté pleins de trcus alors que c'était juste une titer erreur comme quand on colle les {ou}

Cordiallement,
Moi à nouveau Mdr lol
Commenter la réponse de MoiMdr
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010
0
Merci
Salut,

pour le %loopm2 oui j'avais oublié de le virer, c'était quand je faisais mes testes ;)

Ensuite
donc pour la loop c'est $1 == %x return $read(fichier,n $calc(%x - 1)
ce qui signifi que $1 1 return $read(fichier,n0) parceque le %x 0 a été validé pour le "begin"


Je suis pas convaincu mais ca marche et ca marche aussi pour moi avec
elseif ($1 == $calc(%x + 1)) return %y :/join %y
Moi je partais du principe que tant que la boucle était pas bouclée le %x était toujours = 0 d'ou le while (%x < et pas <=

pour les description des salon ok je n'y avais pas pensé ;)
pour ta variable %y j'ai estimé que pas nécessaire vu qu'on l'appel qu'une seule fois donc j'ai modifié mon code ainsi:

menu status {
  Salon-Favoris
  .$submenu($salonFa2($1))
}
alias salonFa2 {
  var %x = 0
  while (%x < $ini(mirc.ini,chanfolder,0)) {
    var %y = $gettok($readini(mirc.ini,chanfolder,n $+ %x),1,44)
    if ($istok(begin.end,$1,46)) return -
    elseif ($1 == $calc(%x + 1)) return %y :/join %y
    inc %x
  }
}

à remarquer que while (%x < $ini(mirc.ini,chanfolder,0))
< et pas <= d'ou le $calc(%x + 1)

Mais comme ceci ca marche aussi :

menu status {
  Salon-Favoris
  .$submenu($salonFa2($1))
}
alias salonFa2 {
  var %x = 0
  while (%x <= $ini(mirc.ini,chanfolder,0)) {
    var %y = $gettok($readini(mirc.ini,chanfolder,n $+ $(},%x)),1,44)
    if ($istok(begin.end,$1,46)) return -
    elseif ($1 == %x) return %y :/join %y
    inc %x
  }
}
Commenter la réponse de MoiMdr
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010
0
Merci
Salut,

Ok si c'est une histoire de rapidité ;)

Merci pour tous, :)
Commenter la réponse de MoiMdr
Messages postés
882
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
0
Merci
de rien avec plaisir
n'oubli pas de cocher reponse accepté :)

@+
Commenter la réponse de WorldDMT