Custom Windows (@finestre)

Il comando /window crea finestre di testo generiche - un'area con righe di testo colorabili una per una, con in più una list box laterale opzionale e una casella di input opzionale in fondo. Utile per mostrare output di script, log, elenchi, o piccole interfacce testuali. Sottoinsieme pratico della documentazione ufficiale mIRC, con le omissioni dichiarate esplicitamente qui sotto.

A differenza dei Dialogs, una @finestra non è una chat: i comandi echo/say/ecc. lanciati da un suo editbox restano nel CONTESTO da cui il /window è stato aperto, non scrivono dentro la @finestra stessa. Per scrivere lì dentro usa esplicitamente /aline.

Gli eventi generici on open/on close (vedi Scripting) scattano anche per le @finestre, non solo per canali/gruppi/query/status: $chan dentro quegli handler restituisce il nome della @finestra appena aperta/chiusa (es. @log).

Creare una finestra

/window [-switch] [-tN,..,N] [+aspetto] <@nome> [x y w h]
   [/comando | [popup.txt] [font [size]] [iconfile]]

@nome deve iniziare con @. x y w h sono opzionali (senza, la finestra viene centrata con una dimensione di default). Dopo x y w h va O un /comando (eseguito ogni volta che l'utente scrive testo nell'editbox e preme Invio - il testo digitato arriva come se fosse stato scritto subito dopo il comando, quindi come $1- se è un alias), O in alternativa popup.txt/font [size]/iconfile: qui sono a scelta esclusiva (non combinabili nella stessa chiamata come nel vero mIRC) per poter distinguere in modo affidabile un nome di comando da un nome di file, senza ambiguità.

window -e1l15 @log 50 50 400 300
aline @log Finestra pronta.

Switch di /window

SwitchCosa fa
-a / -vPorta la finestra in primo piano.
-cChiude la finestra.
-e[N]Aggiunge una casella di input in fondo. N=1 multi-riga, altrimenti riga singola.
-h / -rNasconde / mostra la finestra.
-l[N]Aggiunge una list box laterale, larga circa N caratteri (default ~100px).
-nMinimizza (nasconde) - se combinato con -e viene ignorato per non nascondere una finestra appena creata con un editbox.
-xMassimizza/ripristina.
-o / -uImposta/rimuove "sempre in primo piano".
-pCrea una picture window (superficie di disegno) al posto dell'area di testo.
-q<S>:<P>Imposta la barra di avanzamento: S = 0 disabilitata, 1 in corso, 2 successo, 3 errore; P = percentuale 0-100.
-j<N>Limita il buffer a N righe (le più vecchie vengono scartate).
-sOrdina alfabeticamente il testo principale (e la list box, se presente).
-SOrdina solo la list box laterale.
-w<N>Mostra/nasconde il bottone in taskbar: N=0 nascosto, altrimenti visibile (qui una sola taskbar fa da switchbar e treebar insieme, nessuna distinzione reale tra le due).
-k<N>N=0 nasconde il prefisso @ nel testo del bottone in taskbar.

Switch -tN,..,N (separato dal resto, con uno spazio prima): imposta le posizioni di tabulazione della list box laterale, in caratteri - il testo di una riga che contiene dei tab (\t) viene messo a partire da quelle posizioni. -t0 nasconde il testo prima del primo tab.

Stili di aspetto (prefisso +, es. /window +tnx @nome ...): t mostra la barra del titolo, n mostra il bottone minimizza, x mostra il bottone massimizza, d toglie il bordo.

Righe di testo

/aline [c] <@nome> <testo>      aggiunge una riga in fondo
/cline [c] <@nome> <N>          cambia colore della riga N
/dline <@nome> <N[-N2]>          elimina la riga N (o da N a N2)
/iline [c] <@nome> <N> <testo>  inserisce alla riga N
/rline [c] <@nome> <N> <testo>  sostituisce la riga N
/sline <@nome> <N>                seleziona la riga N

c (opzionale, subito dopo lo switch) è un numero di colore 0-15 (stessa tavolozza classica IRC). Tutti questi comandi accettano -l per operare sulla list box laterale invece che sul testo principale. /aline//iline accettano anche -n (non aggiungere se il testo esiste già), -i[N] (indenta di N spazi, 2 di default), -s/-a (seleziona la riga appena aggiunta/inserita). /cline -r riporta la riga al colore di default.

aline @log Connessione stabilita
aline 3 @log Attenzione: timeout
cline 9 @log 1
dline @log 2

/renwin

/renwin <@vecchionome> <@nuovonome> [topic]

Rinomina una finestra già aperta. Il parametro topic (nel vero mIRC un argomento di contesto aggiuntivo) è accettato ma ignorato: qui una @finestra non ha un vero "topic".

$window(N/@nome)[.proprietà]

FormaCosa fa
$window(0)Numero di @finestre aperte.
$window(N)Nome dell'N-esima @finestra aperta.
$window(@wildcard,N)N-esima @finestra il cui nome soddisfa il pattern con */?.
$window(@nome).proprietàVedi tabella sotto.

Proprietà supportate: x, y, cx, cy (qui identiche a x/y - non gestiamo una vera distinzione multi-monitor), w, h, dw, dh (dimensioni dell'area di testo o del canvas), mdi, title, fulltitle, state (normal/hidden/maximized), font, fontsize, fontbold, fontitalic, ontop, type (custom o picture), wid, hwnd, lb (0 = niente list box, 1 = presente), pbstate/ pbpercent (stato/percentuale della barra di avanzamento, vedi /window -q sopra).

$line(@nome,N[,T])[.proprietà]

T opzionale: 1 per riferirsi alla list box laterale invece del testo principale (come -l nei comandi sopra). N=0 restituisce il numero di righe.

$line(@log,3)          ; testo della riga 3
$line(@log,0)          ; quante righe ci sono
$line(@log,3).color    ; numero colore della riga 3 (vuoto se nessuno)
$line(@log,3).state    ; 1/0 a seconda che sia la riga selezionata
$line(@log,2,1)        ; riga 2 della list box laterale

$fline(@nome,testo,N,T,S)

Trova la posizione della N-esima riga che soddisfa testo (wildcard di default, T=2 o T=3 per espressione regolare; T=1 opera sulla list box). N=0 restituisce il numero di righe che soddisfano. S imposta da dove iniziare la ricerca. La posizione trovata resta anche in $flinen (identificatore nudo).

popup.txt e iconfile

popup.txt (parametro posizionale di /window, deve finire per .txt) carica un menu tasto-destro per la finestra da un file di testo semplice - stessa sintassi Etichetta:comando usata in popups.ini, senza le sezioni [...]. iconfile (deve avere un'estensione immagine: ico/png/jpg/jpeg/bmp/gif) imposta l'icona nella titlebar - l'indice N (per file con più icone, tipico di .ico/.exe Windows) non è supportato, ignorato.

window @log 50 50 400 300 miopopup.txt "Courier New" 12
window @log 50 50 400 300 icona.png

Picture Windows (/window -p)

Un picture window è un @window con un'area di disegno (<canvas>) al posto del testo. Ci si disegna sopra con i comandi /draw*, e si possono intercettare i click/movimenti del mouse.

window -p @tela 50 50 300 200
drawrect -f @tela 4 1 10 10 100 60
drawtext @tela 1 Arial 14 20 20 Ciao!

Colori nei comandi /draw*

Senza lo switch -r, <color> è un indice 0-15 nella stessa tavolozza classica usata da /aline ecc. Con -r, è un valore RGB "impacchettato" come quello restituito da $rgb(r,g,b) (formato R + G×256 + B×65536, lo stesso usato internamente dal vero mIRC).

Comandi di disegno

ComandoCosa fa
/drawdot [-r] @ <color> <size> <x y> [x y ...]Disegna uno o più punti quadrati di lato size.
/drawline [-r] @ <color> <size> <x y> <x y> [x y ...]Disegna una linea (spezzata, se più coppie x y) spessa size.
/drawrect [-refd] @ <color> <size> <x y w h> [...]Rettangolo (o più, ripetendo x y w h). -f lo riempie, -e disegna un'ellisse invece.
/drawfill [-rs] @ <color> <color2> <x y>Riempimento a partire da x,y. Senza -s: "border fill", riempie tutto tranne color2 (il colore di bordo). Con -s: "surface fill", sostituisce color2 con color.
/drawtext [-rbo] @ <color> [color sfondo] [font size] <x y> <testo>Scrive testo. -b indica che è stato dato anche un colore di sfondo, -o lo rende grassetto.
/drawpic @ [x y [w h]] <file>Carica e disegna un'immagine (file grafico) - il caricamento è asincrono (il disegno appare non appena il file è pronto, non nello stesso istante del comando).
/drawscroll @ <dx dy> <x y w h>Sposta il contenuto del rettangolo indicato di dx,dy.
/drawcopy [-r] @ <x y w h> @dest <x y [w h]>Copia un'area (anche su un'altra picture window), con eventuale ridimensionamento.
/drawrot @ <angolo> [x y w h]Ruota l'area indicata (l'intera tela se omessa) attorno al proprio centro.
/drawreplace [-r] @ <color1> <color2> [x y w h]Sostituisce ogni pixel color1 con color2 nell'area indicata.
/drawsize @ <w> <h>Ingrandisce la superficie di disegno (fino a 8192×8192) - non la rimpicciolisce mai.
/drawsave [-a] @ [x y w h] <file>Esporta la tela (o l'area indicata con -a) in un file PNG.
/clear @nomeSvuota la tela di una picture window (o il testo di una @finestra normale). /clear -c @nome svuota solo la cronologia dei click.

Eventi mouse

Il vero mIRC li definisce dentro un blocco menu @nome { mouse:/comando sclick:/comando ... }. Qui, per coerenza con il resto del motore di script (stessa struttura degli eventi on dialog), si usa invece:

on 1:mouse:@nome:evento: {
  echo $mouse.x $mouse.y
}
EventoQuando scatta
mouseIl mouse si muove sopra la tela.
sclick / dclick / uclickClick singolo / doppio / rilascio del pulsante.
rclickClick destro (mostra anche il popup.txt, se presente).
lbclickSelezione di una riga nella list box laterale (di qualunque @finestra, non solo picture window).
leaveIl mouse esce dall'area della finestra - $window (nudo) restituisce il nome della finestra appena lasciata.
dropClick e trascinamento seguito dal rilascio del pulsante.

Identificatori Picture Windows

IdentificatoreCosa fa
$click(@nome[,N]).x/.yCoordinate dell'N-esimo click registrato (l'ultimo, se N omesso).
$getdot(@nome,x,y)Valore RGB impacchettato del pixel a quella posizione.
$height(testo,font,size,bipt) / $width(...)Altezza/larghezza in pixel del testo con quel font. bipt: 4 cifre 0/1 per grassetto/corsivo/codici colore/tab (qui solo il grassetto - 1° cifra - è considerato).
$inrect(px,py,x,y,w,h)1/0 a seconda che il punto sia dentro il rettangolo.
$inellipse(px,py,x,y,w,h)1/0 a seconda che il punto sia dentro l'ellisse.
$inroundrect(px,py,x,y,w,h,w,h)Approssimato: trattato come $inrect, gli angoli arrotondati non sono considerati a parte.
$inpoly(px,py,x,y,x,y,...)1/0 a seconda che il punto sia dentro il poligono.
$onpoly(n1,n2,x,y,...)1/0 a seconda che due poligoni si sovrappongano (approssimato: verifica se un vertice di uno cade dentro l'altro, non una vera intersezione di segmenti).
$mouse (nudo)"x y" dell'ultimo evento mouse. Proprietà: .win .x .y .mx .my .cx .cy .dx .dy .key .lb - .key è una maschera bit a bit (1=sinistro, 2=ctrl, 4=shift, 8=alt, 16=destro), da leggere con &.
$pic(file).width/.heightDimensioni di un file immagine.
$rgb(r,g,b)Valore RGB impacchettato. $rgb(N) con un solo numero lo scompone in "r g b". $rgb(nome) con un colore di sistema (face/shadow/hilight/3dlight/frame/text) restituisce un'approssimazione fissa.

Cosa NON è supportato