12 Dialog


Per creare un dialog, dobbiamo innanzitutto capire le 3 sezioni che sono fondamentali, quindi:

1) Grandezza (size)
2) Nome (title)
3) Bottone di ok

Se tralasciamo uno di questi dati, otterremo questa risposta quando andremo a caricarlo: */dialog – invalid table
Mirc editor aperto come sempre, e iniziamo il corso… (copia incolla il codice qui sotto in remote script)

alias dialog-test /dialog -m prova prova
dialog prova {
    title "Mondoscript"
    size -1 -1 300 200
    button "Ok", 1, 95 160 50 25, ok
    button "Cancel", 2, 155 160 50 25, cancel
}

scriviamo ora /dialog test per vedere la nostra creazione. Analizziamo cosa abbiamo scritto: title “Mondoscript” sara’ il titolo size -1 -1 300 200 sara’ la grandezza e quindi: 200 l’altezza 300 la larghezza ,  -1 -1 lo useremo per centrarlo ma possiamo anche settare in modo che venga in un punto ben preciso dello  schermo, button “Ok”, 1, 95 160 50 25, ok   button creerà un bottone, “ok” sara’ il testo del bottone, 1 il suo   numero per quando lo richiameremo, 95 la sua distanza dal lato sinistro, 160 la sua distanza dal punto piu alto, 50 la lunghezza del bottone 25 l’altezza, ok l’attributo (quelli li vedremo dopo) Smanettate un po’ con questo dialog , poi tornate a leggere la guida…

Altro esempio

alias dialog-test2 /dialog -m prova2 prova2
dialog prova2 {
  title "Smanettate smanettate"
  size -1 -1 300 200
  button "Ok", 1, 95 160 50 25, ok
  button "Cancel", 2, 155 160 50 25, cancel
  check "TARAPIA", 3, 20 20 120 15
  check "TAPIOCA", 4, 20 40 130 15
  check "COME SE FOSS'ANTANI", 5, 20 60 150 15
  check "PER TE", 6, 20 80 120 15
}

alias dialog-test3 /dialog -m prova3 prova3
dialog prova3 {
  title "Ancora un prova"
  size -1 -1 300 200
  button "Ok", 1, 95 160 50 25, ok
  button "Cancel", 2, 155 160 50 25, cancel
  check "a", 3, 20 20 130 15
  check "b", 4, 20 40 130 15
  check "c", 5, 20 60 130 15
  check "d", 6, 20 80 130 15
  text "i radio sono cosi", 7, 150 20 130 15
  radio "a", 8, 155 40 130 15, group
  radio "b", 9, 155 60 130 15
  radio "c", 10, 155 80 130 15
}

Dopo questi esempi avremo capito cosa sono i radio e i check… quindi: nei radio quando inseriamo group nel primo, tutti i seguenti saranno parte del gruppo, per capire rifacciamo il dialog in questo modo:

alias dialog-test4 /dialog -m prova4 prova4
dialog prova4 {
  title "Ancora un prova"
  size -1 -1 300 200
  button "Ok", 1, 95 160 50 25, ok
  button "Cancel", 2, 155 160 50 25, cancel
  check "a", 3, 20 20 130 15
  check "b", 4, 20 40 130 15
  check "c", 5, 20 60 130 15
  check "d", 6, 20 80 130 15
  text "i radio sono cosi", 7, 150 20 130 15
  radio "a", 8, 155 40 130 15, group
  radio "b", 9, 155 60 130 15
  radio "c", 10, 155 80 130 15, group1
  radio "d", 11, 155 100 130 15
}

Facile no?
Ora vediamo questo:

dialog prova5 {
  title "Esempio"
  size -1 -1 300 200
  button "Ok", 1, 95 160 50 25, ok
  button "MHA", 2, 155 160 50 25, cancel
  check "FORZA", 3, 20 20 130 15
  check "MAGIACO", 4, 20 40 130 15
  check "BEPPE", 5, 20 60 130 15
  check "GOL", 6, 20 80 130 15
  text "Tarapia Tapioca", 7, 150 20 130 15
  radio "A", 8, 155 40 130 15, group
  radio "B", 9, 155 60 130 15
  radio "C", 10, 155 80 130 15
  edit "ANTANI?", 11, 20 110 120 18
  box "Dialog box", 12, 5 5 290 190
  list 13, 145 105 130 65
}

icon 14, 20 140 60 50, immagini\icon.bmp (questo lo metteremo per inserire un’immagine)

Aprire e chiudere il Dialog
per aprire il dialog scriveremo /dialog -m nome-dialog nome-dialog
per aprire il dialog sul desktop /dialog -dm nome-dialog nome-dialog
per aprire il dialog come finestra attiva scriveremo /dialog -v nome-dialog nome-dialog
la stessa funzione del bottone cancel possiamo richiamarla cosi /dialog -c nome-dialog nome-dialog
Per chiuderlo senza cambiare degli eventi /dialog -x nome-dialog nome-dialog
la stessa funzione del bottone OK possiamo richiamarla cosi /dialog -K nome-dialog nome-dialog

Comandi del Dialog
/dialog -mdtsonkcv name [table] [x y w h] [text]

  • -m apre il dialog /dialog -m nome nome
  • -a con
  • -m sara’ l’active windows
  • -x Chiude il dialog senza cambiare gli eventi
  • -d con -m apre il dialog sul desktop
  • -t setta il titolo del dialog /dialog -t name text
  • -s setta la posizione e la grandezza del dialog /dialog -s name x y w h
  • -o setta il dialog on top rispetto a tutte le finestre -n toglie il settaggio on top
  • -k emula il bottone ok
  • -c emula il bottone cancel
  • -v il dialog viene settato come finestra attiva

Iniziare a lavorare coi Dialog
L’evento principale e’ ON DIALOG ESEMPIO: on *:dialog:nome:evento:id: { comando }

nome sara’ il nome del dialog, e gli eventi saranno:
init – quando il dialog si aprira’
edit – Quando editeremo i edit boxes e combo
sclick – Quando faremo un click
dclick – Usato col il doppio click (lists – combo)

Ora “smanettiamo” un pò

dialog prova6 {
title ""
size -1 -1 300 200
button "Ok", 1, 95 160 50 25, ok
button "Cancel", 2, 155 160 50 25, cancel
check "", 3, 20 20 130 15
check "", 4, 20 40 130 15
check "", 5, 20 60 130 15
check "", 6, 20 80 130 15
text "", 7, 150 20 130 15
radio "", 8, 155 40 130 15, group
radio "", 9, 155 60 130 15
radio "", 10, 155 80 130 15
edit "", 11, 20 110 120 18
box "", 12, 5 5 290 190
list 13, 145 105 130 65
}
on *:dialog:prova6:init:*: {
/did -c prova6 3
/did -c prova6 4
/did -c prova6 9
/did -a prova6 11 $time
/did -a prova6 13 Prima linea
/did -a prova6 13 Seconda linea
}

Vediamo:
on dialog init vuol dire che quando lo apriremo……
/did -prova6 3,4,e 9 ; -c abilitera’ il radio o il check
/dia -a inserira’ il testo nella linea del list o nel edit

Poi:

  • -u disabilita i checkbox/radiobutton list/combo
  • -r pulise il testo in un edit
  • -a aggiunge una linea di testo alla fine
  • -d elimina un linaa
  • -i inserice testo in una linea
  • -o riscrvie un linea con nuovo testo
  • -g setta una nuova icona/bmp /did -g nome id [n] file

Did lo useremo cos’i’: /did -qualcosa dialog_nome id

Ora capiamo come funzionano gli gli eventi con questa prova (la prima parte finisce qui…. smanettate smanettate e capirete).

dialog Comadi-Op {
title "Comadi-Op"
size 123 88 277 181
button "Kikkalo", 1, 100 90 60 18
button "OK", 2, 50 140 160 18,ok
box "Comandi OP", 3, 10 0 250 167
edit "", 4, 30 110 200 18,autohs
button "Oppalo", 5, 20 20 60 18
button "Deop", 6, 20 50 60 18
button "+ voice", 7, 100 20 60 18
button "- voice", 8, 100 50 60 18
button "+ ban", 9, 180 20 60 18
button "- ban", 10, 180 50 60 18
}
on 1:dialog:Comadi-Op:init:0: {
;quando apriremo il dialog......
did -a Comadi-Op 4 %legion3
;nell'edit 4 visualizzeremo la variabile legion3
}
on 1:dialog:Comadi-Op:sclick:*: {
;quando clicchermo su un pusante qualsiasi (*)
if ($did == 5) { mode %legion2 +o %legion }
;se il pulsante e' 5 si eseguira' questo comando
if ($did == 6) { mode %legion2 -o %legion }
if ($did == 7) { mode %legion2 +v %legion }
if ($did == 8) { mode %legion2 -v %legion }
if ($did == 9) { mode %legion2 +b %legion }
if ($did == 10) { mode %legion2 -b %legion }
if ($did == 1) { kick %legion2 %legion %legion3 }
}
on 1:dialog:Comadi-Op:edit:*: {
;quando editeremo una parte non specificata del dialog (*)
if ($did == 4) {
;se lo spazio da editare sara' 4 ..........
set %legion3 $did(4).text
;il testo verra settato come variabile %legion3
}
}

Ora andiamo più nei dettagli, e facciamo un bel dialog per i mass op, mass deop, kick e ban, usando un’echo particolare, ora la lezione è diciamo interattiva, qui sotto metteremo il codice che vuoi da bravi incollerete nel mirc editor.

dialog mass {
;dialog mass ricordiamoci che usermo il title per fare l'echo.
title "(m)/(x)\(s)"
button "(m)/(x)\(s)" 33, 20 110 240 20,ok
;bottone di ok senza quello il dialog non si apre
size -1 -1 300 130
edit "" 2, 2 2 100 20,disable
edit "Mass Deop" 3, 2 20 100 20,disable
button "<" 4, 110 20 20 20,
button ">" 5, 130 20 20 20,
edit "Mass Op" 6, 2 40 100 20,disable
button "<" 7, 110 40 20 20,
button ">" 8, 130 40 20 20,
edit "Mass Kick" 9, 2 60 100 20,disable
button "<" 10, 110 60 20 20,
button ">" 11, 130 60 20 20,
edit "Mass Ban" 12, 2 80 100 20,disable
button "<" 13, 110 80 20 20,
button ">" 14, 130 80 20 20,
edit "" 15, 152 20 100 20
edit "" 16, 152 40 100 20
edit "" 17, 152 60 100 20
edit "" 18, 152 80 100 20
radio "" 20, 252 20 20 20,group1
radio "" 21, 272 20 20 20
radio "" 22, 252 40 20 20,group2
radio "" 23, 272 40 20 20
radio "" 24, 252 60 20 20,group3
radio "" 25, 272 60 20 20
radio "" 26, 252 80 20 20,group4
radio "" 27, 272 80 20 20
text "-------(m)/(x)\(s)--------" 19, 130 2 100 12,disable,multi
text "ON" 30, 252 2 20 12
text "OFF" 31, 272 2 20 12,
}
on *:dialog:mass:init:*: {
; ogni volta che si aprira' il dialog
/did -a mass 2 $date $time ;mettermo nell'edit 2 data e ora
if ( %MASSDEOP == on ) {
;se la variabile sara' on......
/did -a mass 15 Kick dopo %numerodeop deop
;scriveremo nell'edit questa informazione
did -c mass 20 ;e abiliteremo il radio 20
}
if ( %MASSOP == on ) {
/did -a mass 16 Kick dopo %numerop Op
did -c mass 22
}
if ( %MASSkick == on ) {
/did -a mass 17 Kick dopo %numerokick Kick
did -c mass 24
}
if ( %MASSban == on ) {
/did -a mass 18 Kick dopo %numeroban Ban
did -c mass 26
}
if ( %MASSDEOP == off ) {
/did -a mass 15 Spento
did -c mass 21
}
if ( %MASSOP == off ) {
/did -a mass 16 Spento
did -c mass 23
}
if ( %MASSkick == off ) {
/did -a mass 17 Spento
did -c mass 25
}
if ( %MASSban == off ) {
/did -a mass 18 Spento
did -c mass 27
}
}
on 1:dialog:mass:sclick:*: {
;qui si fa interessante..... ogni volta che cliccheremo
if ($did == 20) {
; se il did sara' 20
/did -r mass 15 :puliremo l'edit 15
/did -a mass 15 Kick dopo %numerodeop deop
;ci scriveremo quanto scritto sopra
dialog -t $dname (m)/(x)\(s) Protezione MassDEOP ON ;useremo quello che chiamo l'echo dialog, cioe' visualizzeremo le
;info sulla parte del titolo del dialog.
enable #massdeop ;abiliteremo il gruppo
echo -a (m)/(x)\(s) Protezione MassDEOP ON
; ecco l'echo classico
set %MASSDEOP on
;setteremo la variabile massdeop on
}
if ($did == 21) {
/did -r mass 15
/did -a mass 15 Mass Dop off
disable #massdeop
echo -a (m)/(x)\(s) Protezione MassDEOP OFF
set %MASSDEOP off
}
if ($did == 5) {
/did -r mass 15
inc %numerodeop
;qui facciamo salire la variabile per i mass deop
/did -a mass 15 Kick dopo %numerodeop deop
}
if ($did == 4) {
/did -r mass 15
if (%numerodeop >= 2) { dec %numerodeop } else { halt } ;qui consideramo che la variabile poteva diventare di segno meno, non so se ;il mirc calcola i -1 -2 deop...... quindi quando if (%numerodeop >= 2)  sara' = o maggiore a ;2 la variabile sara' diminuita, in caso contrario non e' necessario diminuirla e quindi la lasceremo cos'i'
/did -a mass 15 Kick dopo %numerodeop deop
}
if ($did == 22) {
/did -r mass 16
/did -a mass 16 Kick dopo %numerop OP
enable #massop | echo -a (m)/(x)\(s) Protezione MassOp ON
set %MASSoP on
}
if ($did == 23) {
/did -r mass 16
/did -a mass 16 Mass Op off
disable #massop
echo -a (m)/(x)\(s) Protezione MassOP OFF
set %MASSoP off
}
if ($did == 8) {
/did -r mass 16
inc %numerop
/did -a mass 16 Kick dopo %numerop op
}
if ($did == 7) { /did -r mass 16
if (%numerop >= 2) { dec %numerop } else { halt }
/did -a mass 16 Kick dopo %numerop op
}
if ($did == 24) {
/did -r mass 17
/did -a mass 17 Kick dopo %numerokick kick
enable #masskick
echo -a (m)/(x)\(s) Protezione Masskick ON
set %MASSkick on
}
if ($did == 25) { /did -r mass 17
/did -a mass 17 Mass kick off
disable #masskick
echo -a (m)/(x)\(s) Protezione Masskick OFF
set %MASSkick off
}
if ($did == 11) { /did -r mass 17
inc %numerokick
/did -a mass 17 Kick dopo %numerokick kick
}
if ($did == 10) {
/did -r mass 17
if (%numerokick >= 2) { dec %numerokick } else { halt }
/did -a mass 17 Kick dopo %numerokick kick
}
if ($did == 26) {
/did -r mass 18
/did -a mass 18 Kick dopo %numeroban ban
enable #massban
echo -a (m)/(x)\(s) Protezione Massban ON
set %MASSban on
}
if ($did == 27) { /did -r mass 18
/did -a mass 18 Mass ban off
disable #massban
echo -a (m)/(x)\(s) Protezione Massban OFF
set %MASSban off
}
if ($did == 14) { /did -r mass 18
inc %numeroban
/did -a mass 18 Kick dopo %numeroban ban
}
if ($did == 13) { /did -r mass 18
if (%numeroban >= 2) { dec %numeroban } else { halt }
/did -a mass 18 Kick dopo %numeroban ban
}
}

Autore: Antani