Programmation mIRC/Dialogues
mIRC vous permet de créer des dialogues personnalisés qui peuvent être utilisés pour des entrées de requêtes pour un utilisateur ou pour accomplir de nombreuses autres tâches utiles.
Il y a deux types de dialogues; un dialogue sans mode, créé par la commande /dialog, et un dialogue modal, créé avec l'identifieur $dialog(). Les deux sont décrits ci-dessous.
La commande /dialog
modifierLa commande /dialog vous permet de créer un dialogue sans mode avec le paramètre -m. Ce type de dialogue n'arrête ni ne retourne une valeur au script appelant, et le dialogue peut être affiché indéfiniment et utilisé pour de nombreux buts.
/dialog -mdltsonkcvie nom [table] [x y w h] [texte]
- -m : crée un dialogue sans mode en utilisant 'table' /dialog -m nom table
- -a : utilisé avec -m, utilise actuellement une fenêtre active comme parent
- -l : Cherche la table du dialogue dans le fichier remote actif avant de chercher dans les autres
- -x : Ferme un dialogue sans déclencher un évènements
- -d : Ouvre un dialogue sur le bureau, utilisé avec -m
- -h : Fait travailler le dialogue avec la connexion du serveur actif
- -t : Règle le titre du dialogue /dialog -t nom texte
- -s : Règle la position/taille du dialogue /dialog -s nom x y w h
- -r : Centre le dialogue
- -bp : Interprète la taille en dbu ou en pixels
- -o : Mets le dialogue 'Placer au-dessus' de toutes les fenêtres
- -n : Efface le réglage 'Placer au-dessus'
- -k : Clique sur le bouton ok
- -c : Clique sur le bouton cancel
- -v : Met le dialogue en fenêtre active
- -ie : Minimise/restaure le dialogue s'il est créé sur le bureau
Où nom est le nom par lequel vous vous referez au dialogue, et table est le nom de la table du dialogue utilisée pour créer le dialogue (voir ci-dessous).
L'identifieur $dialog()
modifierLes dialogues créés avec $dialog() sont modaux. En d'autres termes, ils arrêtent le script jusqu'à ce que le dialogue soit refermé, puis retournent une valeur, donc ne permettent pas d'accéder à d'autres fenêtres pendant que ce dialogue est ouvert. Ces types de dialogue devraient seulement être affichés pour une entrée utilisateur immédiat. L'identifieur $dialog() fonctionne de la même façon que les autres identifieurs :
{{{1}}} |
Où nom est le nom par lequel vous vous référerez au dialogue, table est la table du dialogue utilisée pour créer un dialogue (voir ci-dessous), et parent est la fenêtre parente du dialogue. Parent peut être :
- un nom de fenêtre,
- -1 = fenêtre bureau,
- -2 = fenêtre mIRC principale,
- -3 = fenêtre actuellement active,
- -4 = dialogue actuellement actif.
Si aucun dialogue n'est ouvert, la valeur par défaut est généralement -3.
Note : Ce type de dialogue ne peut pas être appelé depuis un évènement d'un script remote. |
Vous pouvez également utiliser l'identifieur $dialog(nom/N) pour lister tous les dialogues ouverts, où N est le Nième dialogue ouvert. Si N est nul, le nombre total de dialogues ouverts est retourné.
$dialog() supporte également ces propriétés :
x,y,w,h retourne la taille et la position du dialogue cw,ch retourne la largeur et la hauteur de la zone client du dialogue
title retourne le titre du dialogue
modal retourne $true si le dialogue est modal, $false autrement
table retourne la table du dialogue qu'il utilise ok retourne l'identité du bouton OK si vous en avez spécifiez un cancel retourne l'identité du bouton Cancel si vous en avez spécifié un result retourne l'identité du bouton Result si vous en avez spécifié un
focus retourne l'identité du contrôle qui est en focus actuellement tab retourne l'identité de la tabulation actuellement affichée
active retourne $true si le dialogue est la fenêtre active, $false autrement
hwnd retourne le handle de la fenêtre du dialogue
La table du dialogue
modifierVous pouvez utiliser le préfixe dialog pour créer une table de dialogue appelée nom dans un script de ce format :
Note de scripteur : Il est plus que conseillé de mettre un bouton de type OK lors de la création de vos dialogues. Certaines DLLs ou vieilles versions de mIRC ne supportent pas la non-présence de ce bouton OK.
dialog [-l] nom {
title "texte" icon nomdefichier, index size x y w h option type (dbu, pixels, notheme) text "texte", id, x y w h, style (right, center, nowrap ) edit "texte", id, x y w h, style (right, center, multi, pass, read, return, hsbar, vsbar, autohs, autovs, limit N ) button "texte", id, x y w h, style (default, ok, cancel, flat , multi ) check "texte", id, x y w h, style (left, push, 3state) radio "texte", id, x y w h, style (left, push) box "texte", id, x y w h, style scroll "texte", id, x y w h, style (top left bottom right horizontal range N N ) list id, x y w h, style (sort, extsel, multsel , size , vsbar, hsbar) combo id, x y w h, style (sort, edit, drop, size, vsbar, hsbar) icon id, x y w h, nomdefichier, index, style (noborder top left bottom right) link "texte", id, x y w h tab "texte", id, x y w h tab "texte", id menu "texte", IDmenu [, IDmenu] item "texte", id [, IDmenu] item break, id [, IDmenu]
|
}
Le paramètre -l rend une table de dialogue locale, ainsi elle ne peut être accédée que par d'autres scripts dans le même fichier.
Où "texte" est le texte par défaut pour un contrôle, id est un numéro qui identifie uniquement un contrôle, x y w h sont la position et la taille du contrôle, et style se compose en une combinaison de mots entre parenthèses.
Autres styles
modifierEn plus des styles montrés entre parenthèses pour chaque type de contrôle, vous pouvez également spécifier ces styles :
disable désactive le contrôle hide cache le contrôle group début d'un groupe result identifie le contrôle auquel la valeur sera utilisée comme valeur de retour au script appelant quand l'utilisateur presse le bouton ok
Variables
modifierSi vous spécifiez un nom %variable dans une définition d'item dans un nom de dialogue, le %variable sera réglé avec le contenu de cet item quand le dialogue est fermé.
edit "", 2, 10 10 100 20, autohs %result
Contrôle tab
modifierLa première définition de tab spécifie la taille du contrôle tabulation, et toutes définitions suivantes de tab s'ajoutent aux tabulations. Vous pouvez associer les contrôles avec une tabulation spécifique en utilisant le style tab suivi de la valeur id pour le tab, comme montré dans l'exemple ci-dessous.
dialog test {
title "mIRC" size -1 -1 110 100 option dbu tab "m", 1, 5 5 100 90 tab "I", 2 tab "R", 3 tab "C", 4 button "m est pour... ;)", 11, 30 50 50 24, ok tab 1 button "I est pour Internet", 12, 30 50 50 24, tab 2 button "R est pour Relay", 13, 30 50 50 24, tab 3 button "C est pour Chat", 14, 30 50 50 24, tab 4
|
}
Vous pouvez utiliser /did -fu pour régler le focus sur un tab spécifique, et /did -vh pour montrer/cacher le contrôle tab entier.
Menus
modifierVous pouvez ajouter des menus et sous-menus aux dialogues en utilisant les préfixes menu et item :
dialog nom {
menu "texte", <IDmenu> [, IDmenu] item "texte", <id> [, IDmenu] item break, <id> [, IDmenu]
}
Si vous ne spécifiez pas un IDmenu pour un item, il utilisera le dernier IDmenu qui a été créé/utilisé dans un précédent menu/item.
Par exemple, la définition du menu suivant reproduit le menu file du dialogue d'édition de mIRC :
dialog test {
title "mIRC" size -1 -1 110 100 option dbu menu "&File", 60 item "&New", 70 menu "&Load", 80, 60 item "&Script", 90 item break, 100 item "&Users", 110 item "&Variables", 120 item "&Unload", 130, 60 item break, 140 item "&Save", 150 item "&Save As...", 160 item "Save &All", 170 item break, 180 item "Save && &exit", 190, ok item "&Cancel", 200, cancel
|
}
Vous pouvez utiliser la commande /did (décrite ci-dessous) pour activer/désactiver, cocher/décocher, ajouter, effacer, insérer, et écraser un item de menu.
Pour ajouter un item à un menu que vous pouvez utiliser : /did -a nom <IDmenu> <nouveauID> <texte>.
Pour insérer un item que vous devez utiliser : /did -i nom <id> <nouveauID> <texte> où <id> est l'item avant lequel vous voulez insérer un item.
Dbu contre Pixels
modifierL'option dbu fait que mIRC utilise les unités de base du dialogue lors de la création du dialogue. Cela assure que le dialogue sera vu de la même façon sous tous les types d'affichage. Pixels est la valeur par défaut cependant pour maintenir la compatibilité avec les précédents scripts.
Les identifieurs $dbuw et $dbuh retournent les valeurs de la hauteur et la largeur par pixel du dbu de l'affichage actuel. Cela peut ne pas être une valeur entière.
Boutons Ok et Cancel
modifierVous pouvez spécifier un bouton ok et/ou cancel, et quand l'utilisateur clique sur les boutons ok ou cancel le dialogue est fermé. Vous pouvez empêcher le dialogue de se fermer si un utilisateur clique sur le bouton ok en utilisant /halt.
Position et taille par défaut
modifierSi vous spécifiez -1 pour n'importe quelles valeurs x y w h dans les réglages de taille pour le dialogue, un réglage par défaut est utilisé. Pour faire centrer le dialogue dans une fenêtre, spécifiez x y en -1 -1. Le réglage de taille peut être surmonté dans l'évènement init (voir ci-dessous) en utilisant /dialog -s nom x y w h.
L'évènement On Dialog
modifierSi un utilisateur change l'état des contrôles dans le dialogue, par exemple cliquer sur un bouton, taper du texte dans une boite d'édition, etc., cela déclenche l'événement de script on dialog ce qui permet de contrôler l'entrée de l'utilisateur :
on 1:dialog:nom:évènement:id: { echo $dname $devent $did }
$dname Nom du dialogue utilisé pour cet évènement $devent Type d'évènement déclenché $did Numéro d'identité du contrôle déclenché
Où nom identifie le dialogue, id est le numéro d'identité du contrôle déclenchant l'évènement, et l'événement peut être :
active s'active sur le dialogue quand il est actif init juste avant que le dialogue soit affiché, les contrôles peuvent être initialisés dans cet événement. L'identité est nulle.
close Quand le dialogue est fermé. edit Le texte dans la boite d'édition ou la boite combo a changé.
sclick Un seul clic dans la liste/boite combo, cocher/décocher des boutons radio/check ou cliquer sur un bouton.
dclick Double clic dans une liste/boite combo. menu Un item du menu a été sélectionné. scroll La position du contrôle scroll a changé.
Vous pouvez détecter les évènements de souris qui n'est pas associé au contrôle spécifique :
mouse La souris a bougé sclick bouton gauche cliqué uclick bouton gauche relevé dclick double clique rclick bouton clic droit drop clic de déplacement
Vous pouvez utiliser $mouse pour récupérer la position actuelle de la souris.
La commande /did
modifierLa commande /did vous permet de modifier les valeurs des contrôles dans un dialogue, par exemple changer le texte dans un contrôle edit ou mettre le focus sur un bouton ou effacer des lignes dans une liste.
/did -ftebvhnmcukradiogj nom id [n] [texte | nomdefichier]
- -f : Met le focus sur l'id
- -t : Met l'id du bouton par défaut
- -e : Active l'id
- -b : Désactive l'id
- -v : Rend l'id visible
- -h : Cache l'id
- -n : Active la boite d'édition
- -m : Désactive la boite d'édition
- -c : Coche la boite check/bouton radio, la ligne de la liste/combo
- -u : Décoche la boite check/bouton radio, la ligne de la liste/combo
- -k : fonctionne avec -cu, garde les autres sélections dans une liste
- -r : Efface tout le texte dans l'id
- -a : Ajoute la ligne de texte à la fin
- -d : Efface la Nième ligne
- -i : Insère le texte à la Nième ligne
- -o : Ecrase la Nième ligne par le texte
- -g : Met une nouvelle image icône/bmp dans un contrôle icon
/did -g nom id [n] nomdefichier
- -z : Efface la largeur de la barre de défilement (scrollbar) horizontale dans une liste
- -j : Efface les réglages édités dans une boite d'édition
Où nom identifie le dialogue et id est le numéro d'identité du contrôle que vous voulez modifier.
Si vous voulez modifier plusieurs contrôles en même temps, vous pouvez spécifier de multiples numéros d'identité séparés d'une virgule, par exemple /did -b nom 2,12,14,16 etc.
Vous pouvez sélectionner une portée de texte dans une boite d'édition en utilisant /did -c nom id [n] [start [end]]. Cela sélectionne la ligne N dans une boite d'édition, et règle la sélection à la portée spécifiée de caractères.
Vous pouvez mettre la case à cocher 3 états en position indéterminée en spécifiant les deux paramètres -cu.
Vous pouvez accéder au contrôle edit dans une boite combo en utilisant 0 à la valeur N.
Pour changer la portée d'un contrôle barre de défilement (scrollbar), vous pouvez utiliser /did -z nom id [min max].
L'identifieur $did(nom,id)
modifierVous pouvez obtenir les réglages et valeurs des contrôles dans un dialogue en utilisant l'identifieur id de dialogue $did() avec les formats et propriétés suivants appropriés au contrôle auquel vous vous référez.
$did(nom,id) $did(nom,id,N)
Si utilisé dans un évènement de dialogue, nom est optionnel.
Les propriétés $did() suivantes supportées :
text retourne la ligne ou la Nième ligne
$did(id) est la même que $did(id).text
len retourne la longueur de ligne ou la longueur de la Nième ligne lines retourne le nombre de lignes sel retourne le numéro de ligne de la Nième ligne sélectionnée
Si N est nul, retourne le nombre de lignes sélectionnées
seltext retourne le texte sélectionné dans une boite d'édition ou le premier item sélectionné dans une liste
selstart retourne le caractère de départ dans une ligne d'édition selend retourne le caractère de fin sélectionné dans une ligne d'édition edited retourne $true si le texte dans une boite d'édition a changé state retourne l'état du contrôle : 0 = off, 1 = on, et 2 = indéterminé next retourne l'identité du prochain contrôle dans l'ordre de tabulation prev retourne l'identité du précédent contrôle dans l'ordre de tabulation
visible retourne $true si le contrôle est visible, $false autrement enabled retourne $true si le contrôle est activé, $false autrement
Vous pouvez accéder au contrôle edit dans une boite combo en utilisant 0 dans la valeur N.
$didwm(nom,id,textejoker,N)
modifierRetourne le nombre de lignes qui correspond au texte joker, auquel la recherche peut commencer à la ligne N. N est optionnel.
$didreg(nom,id,regex,N)
modifierRetourne le nombre de ligne qui correspond à l'expression régulière, avec la recherche commençant à la ligne N, N est optionnel.
$didtok(nom,id,C)
modifierRetourne une liste tokenizée d'items dans une liste/boite combo/d'édition.
Vous pouvez utiliser /didtok nom id C texte pour ajouter une liste tokenizée d'items à une liste/boite combo/d'édition.