I Dialogs permettono di creare finestre personalizzate con bottoni, caselle di testo, checkbox, radio button, liste, tab e menu - per chiedere input all'utente o costruire piccole interfacce dentro uno script. Copertura completa della documentazione ufficiale mIRC, con alcune semplificazioni dichiarate esplicitamente qui sotto.
$dialog() (a differenza di
/dialog -m) è modale: blocca l'esecuzione dello script finché l'utente non chiude il dialogo, e
ne restituisce il risultato come valore di ritorno. Il nostro motore di script gira in modo sincrono su un unico
thread JavaScript (il motore di Yoake, non un vero interprete mIRC) e non può sospendersi in mezzo a una riga in
attesa di un click dell'utente senza congelare l'intera interfaccia - è un limite della piattaforma, non qualcosa
aggirabile con più lavoro. Qui $dialog() apre comunque il dialogo (con un overlay che scurisce il resto
dell'app, per dare comunque un'idea "modale"), ma lo script prosegue subito - il risultato dei campi va letto
nell'evento on dialog:...:close, o nella %variabile collegata al controllo con lo stile
result, non dal valore restituito da $dialog() (che qui restituisce solo il nome del
dialogo appena aperto).Si definisce con il prefisso dialog, in aliases.ini/remote.ini/popups.ini come un alias o un evento
on:
dialog nomeTabella {
title "Titolo finestra"
size -1 -1 300 200
option pixels
text "Nome:", 1, 10 10 60 20
edit "", 2, 80 10 150 20
button "OK", 3, 10 170 60 20, ok default
button "Annulla", 4, 80 170 60 20, cancel
}
-1 -1 come x y centra il dialogo. id è un numero che identifica univocamente ogni
controllo (usato poi da /did/$did()/eventi). Il prefisso -l
(dialog -l nome {...}, "tabella locale") è accettato per compatibilità di sintassi ma ignorato: qui
alias/eventi/popup/tabelle dialog vivono già tutti in un unico spazio condiviso.
| Controllo | Sintassi | Note |
|---|---|---|
text | text "testo", id, x y w h, style | Etichetta statica. Stili: left/right/center, nowrap. |
edit | edit "testo", id, x y w h, style | Casella di testo. Stili: left/right/center, multi (multi-riga), pass (password), read (sola lettura), limit N (lunghezza massima). |
button | button "testo", id, x y w h, style | Stili: ok/cancel (chiude il dialogo al click), default (bottone predefinito). |
check | check "testo", id, x y w h, style | Checkbox. Stile 3state: tre stati (off/on/indeterminato) invece di due. |
radio | radio "testo", id, x y w h, style | Radio button. Stile group: inizia un nuovo gruppo (i radio successivi, fino al prossimo group, sono mutuamente esclusivi tra loro). |
box | box "testo", id, x y w h, style | Riquadro con etichetta (group box). |
scroll | scroll "", id, x y w h, range N N, pos N, page N | Slider. Renderizzato come <input type=range> orizzontale (l'orientamento verticale del vero mIRC non è riprodotto). |
list | list id, x y w h, style | Lista. Stili: sort (ordina alfabeticamente ad ogni modifica), multsel/extsel (selezione multipla con Ctrl/Shift), check (checkbox per riga), radio (radio per riga). Popolata via /did -a/-i/-o/-d, non ha testo iniziale. |
combo | combo id, x y w h, style | Menu a tendina. Stile edit: editabile (con suggerimenti); senza, è una tendina fissa. Popolato via /did come la lista. |
icon | icon id, x y w h, percorso, index, style | Mostra un'immagine dal percorso indicato. index (per file con più icone, tipico di .exe/.dll Windows) non è supportato, ignorato. Stile noborder toglie il bordo. |
link | link "testo", id, x y w h | Testo stile link. Al click scatena l'evento sclick come qualunque altro controllo - non apre automaticamente un URL, per restare interamente sotto il controllo dello script. |
tab | tab "testo", id, x y w h (prima) / tab "testo", id (successive) | Crea una barra di schede. Associa un controllo a una scheda con lo stile tab <id> (l'id di UNA riga tab specifica) - quel controllo è visibile solo quando quella scheda è attiva. |
menu/item | menu "testo", menuid [, menuid-padre] / item "testo", id [, menuid] / item break, id [, menuid] | Barra dei menu del dialogo. Se il campo dopo l'id di un item è ok/cancel invece di un numero, quella voce chiude il dialogo come il bottone corrispondente (visto nell'esempio ufficiale del menu File dell'editor mIRC). |
| Stile | Effetto |
|---|---|
disable | Disabilita il controllo. |
hide | Lo nasconde. |
group | Inizia un nuovo gruppo (soprattutto per i radio button). |
result | Il valore di questo controllo diventa il "risultato" del dialogo ($dialog(name).result). |
Se il campo testo di un controllo è una %variabile (es. edit "%nome", 2, ...), quella
%variabile viene impostata con il contenuto del controllo quando il dialogo si chiude - con qualunque bottone o
con /dialog -x.
/dialog -m <nome> <tabella> ; apre (modeless) usando la tabella /dialog -m -d <nome> <tabella> ; apre sul desktop %risultato = $dialog(nome,tabella) ; apre (stile "modale", vedi avviso sopra)
nome è l'identificatore con cui riferirsi POI a questa istanza aperta (con /did,
$did(), negli eventi on dialog) - non è detto coincida col nome della tabella.
| Switch | Cosa fa |
|---|---|
-m <nome> <tabella> | Apre un nuovo dialogo. |
-d | (con -m) apre "sul desktop" - qui equivalente, nessuna vera distinzione dalle altre finestre. |
-a | (con -m) usa la finestra attualmente attiva come parent - accettato, non ha un effetto visibile qui (non gestiamo una vera gerarchia di finestre padre/figlio). |
-x <nome> | Chiude un dialogo SENZA scatenare l'evento close (le %variabili collegate vengono comunque scritte). |
-t <nome> <testo> | Cambia il titolo. |
-s <nome> x y w h | Cambia dimensione/posizione (x y = -1 -1 per centrare). |
-r <nome> | Centra il dialogo. |
-o <nome> / -n <nome> | Imposta/rimuove "sempre in primo piano". |
-k <nome> / -c <nome> | Simula un click sul bottone ok/cancel (se presente) - chiude il dialogo scatenando gli eventi normalmente. |
-v <nome> | Porta il dialogo in primo piano. |
-i <nome> / -e <nome> | Minimizza / ripristina. |
-g <nome> <nuovonome> | Rinomina un dialogo già aperto. |
-h (lega il dialogo alla connessione attiva) e -b/-l/-p
(forza dbu/map/pixel su una singola chiamata -s) accettati per compatibilità di sintassi, con effetto
minimo o nullo qui: non gestiamo connessioni multiple per dialogo, e "map"/"pixels" coincidono già nel nostro
modello semplificato (vedi "Dbu e pixel" più sotto).on 1:dialog:nome:evento:id: {
echo $dname $devent $did
}
nome è il nome del dialogo (quello passato a /dialog -m o $dialog(), non
il nome della tabella), id è l'id del controllo coinvolto. Entrambi accettano * come
jolly; id accetta anche liste/intervalli come 1-3,5,7,9,15-20. Dentro il blocco,
$dname/$devent/$did (senza parentesi) restituiscono nome/evento/id senza
doverli riscrivere.
| Evento | Quando scatta |
|---|---|
init | Subito dopo la creazione del dialogo, prima che sia visibile - id è 0. |
close | Quando il dialogo si chiude (non con /dialog -x, che lo salta apposta) - id è 0. |
sclick | Click su un bottone, check/radio, riga di lista/combo, voce di tab. |
dclick | Doppio click su una riga di lista/combo. |
edit | Testo cambiato in una casella di testo o in un combo editabile. |
scroll | Posizione dello scroll/slider cambiata. |
menu | Voce di menu selezionata. |
mouse,
uclick, rclick, drop del vero mIRC) - richiederebbero di tracciare
posizione/click del mouse su tutta l'area del dialogo indipendentemente dai controlli, una superficie di
complessità sproporzionata rispetto al beneficio pratico in un client di chat.ok/cancel il dialogo si chiude DOPO aver scatenato
"sclick" - se lo script di quell'evento esegue halt, la chiusura automatica viene bloccata (stesso
comportamento del vero mIRC)./did -switch nome id [n] [testo|percorso]
Con più id separati da virgola/intervallo (es. 2,12-16,20) applica lo switch a tutti insieme.
| Switch | Cosa fa |
|---|---|
-f | Dà il focus al controllo. Su una tab: la attiva (equivale a cliccarla). |
-t | Lo imposta come bottone predefinito. |
-e / -b | Abilita / disabilita. |
-v / -h | Mostra / nasconde. Su una tab: mostra/nasconde l'INTERA barra di schede (tutte le tab e i controlli associati), qualunque id di tab venga usato per lanciarlo - come da documentazione ufficiale. |
-n / -m | Abilita / disabilita una editbox. |
-c | Su check/radio: seleziona. Su list/combo (con [n]): seleziona la riga N. Su una editbox (con [n] start end): seleziona un intervallo di caratteri. |
-u | Deseleziona check/radio/riga di lista. -c e -u insieme su un check 3state lo mettono in stato indeterminato. |
-k | (con -c su una lista) mantiene le altre righe selezionate, invece di sostituirle. |
-s / -l | Spunta / togli la spunta dalla checkbox di una riga (liste con stile check). |
-r | Svuota tutto il testo/le righe. |
-a | Su list/combo/editbox: aggiunge una riga in fondo (o imposta il testo, su una editbox a riga singola). Su un menu (quando l'id indicato non corrisponde a nessun controllo, ma a un menuid): /did -a nome menuid nuovoid testo aggiunge una voce in fondo a quel menu. |
-d | Elimina la riga N. |
-i | Su list/combo/editbox: inserisce testo alla riga N. Su un menu: /did -i nome id nuovoid testo inserisce una nuova voce subito prima della voce con quell'id (nello stesso menu che la contiene). |
-o | Sovrascrive la riga N. |
-g | Su un controllo icona: /did -g nome id percorso cambia l'immagine mostrata. |
-z | Su uno scroll: /did -z nome id min max cambia l'intervallo. Su una lista: nessun effetto qui (nel vero mIRC ridimensiona la scrollbar orizzontale). |
-j | Azzera lo stato "modificato" di una editbox ($did().edited torna a 0). |
Dentro un evento on dialog, nome è opzionale: $did(id) si riferisce già
al dialogo corrente. Senza proprietà (es. $did(nome,id)) equivale a .text.
| Proprietà | Cosa restituisce |
|---|---|
text | Il testo del controllo, o la riga N se indicata (default). |
len | Lunghezza di .text. |
lines | Numero di righe (liste/combo/editbox multi-riga). |
sel | Numero della riga selezionata (con N: 1/0 a seconda che la riga N sia selezionata). |
seltext | Testo selezionato (editbox) o prima riga selezionata (lista). |
selstart / selend | Inizio/fine della selezione di testo in una editbox. |
edited | 1/0 a seconda che il testo sia stato modificato dall'utente. |
state | 0=off, 1=on, 2=indeterminato (check/radio). |
next / prev | Id del controllo successivo/precedente nell'ordine di dichiarazione nella tabella (approssima l'ordine di tabulazione). |
visible / enabled | 1/0. |
isid | 1/0 a seconda che quell'id esista nel dialogo. |
csel | (liste con stile check) numero di righe spuntate, o riga N-esima spuntata se N > 0. |
cstate | (liste con stile check, con N) 1/0 a seconda che la riga N sia spuntata. |
| Forma | Cosa fa |
|---|---|
$dialog(0) | Numero di dialoghi aperti. |
$dialog(N) | Nome dell'N-esimo dialogo aperto. |
$dialog(nome).proprietà | x/y/w/h/cw/ch/title/modal/table/ok/cancel/result/focus/tab/mapw/maph/active/hwnd del dialogo aperto nome. |
| Identificatore/comando | Cosa fa |
|---|---|
$didtok(nome,id,C) | Le righe di un controllo unite dal separatore ascii C (come $gettok ecc.). |
/didtok nome id C testo | Sostituisce le righe di un controllo con testo diviso sul separatore ascii C. |
$didwm(nome,id,wildtext,N) | Numero della prima riga (a partire da N) che soddisfa un pattern con */?. 0 se nessuna. |
$didreg(nome,id,regex,N) | Come $didwm ma con un'espressione regolare. |
$dbuw / $dbuh | Fattore di conversione dbu→pixel (fisso, vedi sotto - nel vero mIRC dipende dal font di sistema). |
Con option dbu nella tabella, le coordinate x/y/w/h sono in Dialog Base Units invece che pixel -
qui convertite con un fattore FISSO (1 dbu ≈ 1.5px orizzontale, ≈ 1.8px verticale), non calcolato dal font di
sistema come nel vero mIRC: un'approssimazione visiva, non una misura precisa. Senza option dbu
("pixels", il default, o "map") le coordinate sono pixel diretti, nessuna conversione.
$dialog() (vedi avviso in cima alla pagina).mouse/uclick/rclick/drop).index su un controllo icona (icone multiple in un unico file .exe/.dll).-a di /dialog -m e per il parametro parent di $dialog(nome,tabella,parent) (letto ma non usato).icon percorso, index prima di qualsiasi controllo) viene letta ma non mostrata - solo l'icona in titlebar impostata da /window ... iconfile (per le @finestre) funziona davvero.option disable (disabilita l'intero dialogo alla creazione) e option notheme: interpretati ma senza effetto.return/hsbar/vsbar/autohs/autovs/rich su edit, flat/multi su button, push su check/radio, size/vsbar/hsbar su list/combo (si usa sempre uno scroll automatico), top/left/bottom/right/small/large/actual su icon.-1 come singola dimensione: solo x y insieme a -1 -1 centra il dialogo: w o h da soli a -1 non hanno un vero valore di default./did -a/-i (aggiungere/inserire una voce) sono le uniche operazioni supportate - abilitare/disabilitare/spuntare/eliminare/sovrascrivere una voce di menu via /did non sono implementati (mancano una sintassi concreta nella documentazione ufficiale, a differenza di aggiunta e inserimento).