# 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

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

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

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

En plus des styles montrés entre parenthèses pour chaque type de contrôle, vous pouvez également spécifier ces styles :

# Variables

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

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.

# Menus

Vous pouvez ajouter des menus et sous-menus aux dialogues en utilisant les préfixes menu et item :
dialog nom {
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

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

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

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

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 :
$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 :
Vous pouvez détecter les évènements de souris qui n'est pas associé au contrôle spécifique :
Vous pouvez utiliser $mouse pour récupérer la position actuelle de la souris.

## La commande /did

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.
* -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)

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.
Si utilisé dans un évènement de dialogue, nom est optionnel.
Les propriétés $did suivantes supportées :
$did(id) est la même que $did(id).text
Si N est nul, retourne le nombre de lignes sélectionnées
Vous pouvez accéder au contrôle edit dans une boite combo en utilisant 0 dans la valeur N.

## $didwm(nom,id,textejoker,N)

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)

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)

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.