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

modifier

La 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()

modifier

Les 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

modifier

Vous 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

modifier

En 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

modifier

Si 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

modifier

La 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.

Vous 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

modifier

L'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

modifier

Vous 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

modifier

Si 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

modifier

Si 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

modifier

La 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)

modifier

Vous 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)

modifier

Retourne 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)

modifier

Retourne 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)

modifier

Retourne 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.