SCRIPTING
Introducción
El mIRC nos permite la creación
de ventanas personalizadas que no son más que
"ventanas" con diferentes atributos (que
aprenderemos a asignar y modificar) y que pueden ser usadas
para cualquier tipo de acción, generalmente para mostrar
informacion al usuario, ya que se hace de una manera más
limpia y ordenada que mostrando toda la información en la
ventana de Status.
Después veremos que tambien pueden ser usadas para la creación
de GUI's (Interfaces Graficas de Usuario) mediante las picture
Windows o ventanas de imagen.
Este documento está pensado para que el lector y aprendiz de
scriptter tenga un primer contacto con las ventanas
personalizadas y sea capaz de crearlas y manipularlas a su
gusto. Se han suprimido algunas funciones del comando window
bien por el escaso uso de estas o porque suponen alguna
dificultad añadida que solo la experiencia con el scripting
nos ayudaria a superar. De cualquier forma una vez el lector
ya domine todos los comandos y eventos expuestos en este
tutorial, le remito a la ayuda
del mIRC en ella encontrara informacion (de
una forma mas resumida, eso sí) de todas las funciones del
comando window.
En el presente texto se utilizarán las sigientes convenciones
para presentar la sintaxis de instrucciones y comandos: los
argumentos entre < y > representarán valores que es
necesario introducir para la correcta ejecucion del comando,
mientras que los argumentos entre [ y ] son opcionales, y
pueden ser omitidos a la hora de ejecutar el comando.
La manera de seguir el documento, y aprender con él, es
leerlo de arriba a abajo, siguiendo todos los ejemplos y
probandolos todos antes de seguir. Tambien es conveniente que
el lector modifique a su gusto los ejemplos que aquí
encontrará para que vaya experimentando con los comandos de
creacion/modificacion de ventanas personalizadas.
En este tutorial aparecen mucho las palabras
"editbox" y "listbox", se refieren,
respectivamente, al campo de texto que tienen en la parte
inferior ciertas ventanas (como las ventanas de los canales),
y a las listas de 'objetos' seleccionables que tienen tambien
ciertas ventanas (como la lista de nicks en los canales).
Y, por último, antes de empezar, en este tutorial se
presupone que el lector ya es medianamente experto en el uso
de Aliases, Popups y Eventos Remotos
Creación de ventanas
Para crear una
ventana personalizada usaremos el comando window
con la siguente sintaxis:
/window [-acdeEhkl[N]noprswx] [+bdelLmnstx]
<@nombre> [x y [w h]] [popup]
Por ejemplo:
/window –ad @miventana 10 10 200 100
Introduzca esta orden en mIRC y descubrirá que ha
creado una nueva ventana de windows, verá que su
nombre es "miventana" (el símbolo @ debe de
especificarse siempre al principio del nombre, esto
corresponde al argunento <@nombre> en la sintaxis
general). Hemos utilizado dos parámetros en esta orden: -a y
-d, esto ha supuesto que se ha mostrado como ventana activa de
windows y su icono ha aparecido en la barra de tareas
de la parte inferior de la pantalla. Observe que al utilizar
dos parámetros segidos solo hemos necesitado un símbolo
"-" delante de ellos. Los números 10 10 200 100
especifican la ubicación y dimensiones de la ventana
(corresponden respectivamente a los parámetros x, y, w, h);
los dos prineros deterninan la posición dentro de la
pantalla, los dos últimos sus dimensiones (alto y ancho).
La posición de la ventana se basa en un sistema de
coordenadas que toma como origen la esquina superior izquierda
de nuestra pantalla, y sitúa la esquina superior izquierda de
la ventana en el punto indicado, en este caso coordenadas
10,10.
Volvamos a la sintaxis general del comando window
para analizarla más despacio, resulta un poco imponente pero
veremos como examinando cada una de sus partes es bastante más
asequible de lo que parece :-).
Existen dos grupos de parámetros que podemos emplear, por un
lado [-acdeEhkl[N]noprswx] y por otro [+bdelLmnstx]. De
inmediato veremos la utilidad de cada elemento de estos
grupos. Una vez escritos los parámetros deseados
especificaremos el nombre que queremos dar la la ventana
(siempre con @ delante). A continuación no queda sino
concretar ubicación y tamaño de la ventana, no es necesario
especificar ninguno de los dos, en ambos casos se asumen unos
valores por defecto. También tenemos la posibilidad de
incluir al final del comando el nombre de un fichero de popup's
si deseamos que la ventana cuente con sus propios menús
emergentes, es decir, aquellos que aparecen pulsando sobre
ella con el botón derecho del ratón.
A continuacion puede ver una descripcion de para que sirve la
primera tanda de parametros del comando window
que definiran el estado de la ventana:
- -a : Activa la ventana.
-c : Cierra la ventana.
-d : Abre la ventana como ventana de escritorio ( se puede
acceder a ella desde la barra de ventanas de Windows).
-e : Añade a la ventana un editbox o línea de escritura
(como la que tienen en la parte inferior los canales).
-E : Añade a la ventana un editbox de múltiples lineas líneas.
-h : Esconde la ventana.
-k : Esconde el prefijo '@' del nombre de la ventana.
-w : Devuelve el prefijo '@' al nombre de la ventana.
-l[N] : Añade una listbox (lista de elementos) a la
ventana. Si se especifica N (opcional) se crea una listbox
con N caracteres de largo.
-n : Minimiza la ventana.
-o : Si la ventana es una ventana de escritorio, este
parametro la pone y mantiene siempre encima de todas las
ventanas (on top).
-u : Desactiva el poner la ventana encima de todas (on
top).
-p : Crea una ventana de imagen o "picture
window" (esta opción será analizada en un capitulo
aparte).
-r : Restaura una ventana despues de minimizarla.
-s : Organiza por orden alfabético la ventana.
-S : Organiza por orden alfabético la listbox de una
ventana.
-x : Maximiza la ventana.
Hasta aqui hemos visto la
primera tanda de argumentos del comando window
, no se asuste, la inmensa mayoria de las veces solo usará
uno o dos de estos argumentos, pero esta bien que los conozca
por si los necesitara para alguna ocasión en especial.
Ahora vamos con la segunda tanda de argumentos del comando,
estos definirán la apariencia de la ventana:
+b : Dibuja un pequeño borde
alrededor de la ventana.
+d : Ventana sin borde.
+e : Dibuja un borde un poco mas ancho y redondeado.
+l : Ventana de utilidades.
+n : Boton de minimizar.
+s : Se puede cambiar de tamaño.
+t : Con barra de titulo.
+x : Con boton de maximizar.
Después tenemos que indicar
el nombre de la ventana a crear/modificar :
<@nombre> : Por ejemplo, @mi_ventana
Por último indicamos (opcionalmente) las coordinadas de la
posición inicial de la ventana ( x y ) así como su longiud y
altura (en pixels). w (longitud) h (altura)
[ x y [ w h ] ] : por ejemplo, 100 100 300 100
Las coordinadas x y significan la distancia en pixels desde el
extremo izquierdo de la pantalla, y desde el extremo superior
de la ventana principal del mIRC (¡ojo, que no es lo mismo
que el extremo superior del monitor!).
Por ultimo el parámetro [popup] sirve para especificar un
archivo que contenga el menú popup de la ventana (que
aparecera al hacer click con boton derecho sobre la misma). Se
puede especificar un archivo (cuya extension NO sea .ini) o
bien el mismo nombre de la ventana (Ej: @mi_ventana) si se
quiere implementar el popup dentro de los remotes del script.
Edición/Modificación de ventanas
Ahora que el lector ya sabe las posibilidades del comando window,
veremos, ya creada la ventana, que comandos podemos usar para
modificar la informacion que se muestre en ella.
El parámetro [c] esta presente en todos estos comandos, e
indica el color principal de la linea que añadirá, borrará,
o modificará . En cualquier caso también se peden
especificar controles de color (ctrl + k + color), negrita
(ctrl + b) y subrayado (ctrl + u) en el parámetro
<texto>.
Estos comandos se refieren siempre a actuar sobre la ventana
principal, en caso de que queramos actuar sobre una listbox a
un lado de la ventana, incluiremos el parametro -l entre el
nombre del comando y el parametro [c], por ejemplo /aline -l
@mi_ventana lo ke sea... :).
/aline [c] <@nombre> <texto>
Añade la línea <texto> a la ventana <@nombre>
Ejemplo: /aline 4 @mi_ventana Hola mundo!!
/cline [c] <@nombre> <N>
Cambia el color de la línea número <N> al color número
[c]
Ejemplo: /cline 4 #ayuda_irc 3
/dline [c] <@nombre> <N>
Borra la línea (o el rango de lineas) numero <N>
Ejemplo: /dline @nombre 1-10
/iline [c] <@nombre> <N> <texto>
Inserta una línea (<texto>) en la posicion <N>
Ejemplo: /iline @mi_ventana 2 Insertando una linea...
/rline [c] <@nombre> <N> <texto>
Sustituye la línea <N> por <texto>
Ejemplo: /rline @mi_ventana 1 Hasta luegoorr!!
/sline [c] <@nombre> <N>
Selecciona la línea numero <N>
Ejemplo: /sline @mi_ventana 3
/renwin <@nombre> <@nuevo_nombre> [topic]
Cambia de nombre la ventana <@nombre> y (opcionalmente)
cambia su topic o descripción
Ejemplo: /renwin @mi_ventana @tu_ventana Nuevo_topic
Ahora que el lector ya conoce todos los comandos que se usan
para la creacion/modificacion de ventanas, y antes de entrar
en los eventos remotos asociados a las mismas, vamos a hacer
un par de ejemplos de crear ventanas, para que se vaya
familiarizando con estos comandos y compruebe por usted mismo
que no es tan complicado como quizás parece en un principio:
Ejemplo 1: Crear una ventana para dialogar con el
usuario
Vamos a crear una ventana que
mostrará una informacion al usuario y esperara que éste le
responda escribiendo en la editbox de la ventana:
Para ello escribimos en la sección "Aliases" del
Editor del mIRC:
/vent {
window -ae @dialogo 50 50 200 100
@dialogo
aline 12 @dialogo Hola, ¿Cómo
te llamas?
}
Si prueba ese ejemplo (escribiendo el alias "/vent"
), verá que se crea una ventana de nombre @dialogo con un
editbox abajo y nos aparece en ella el texto "Hola, ¿Cómo
te llamas?". En este momento nos tendremos que detener
aqui, más adelante veremos como puede hacer que al teclear
algo en la editbox y pulsar 'Enter' , el script le responda
adecuadamente.
Ejemplo 2: Ver un listado de archivos y mostrar
informacion de los mismos
En este ejemplo crearemos una ventana con una listbox, en la
que apareceran los archivos mp3 de nuestro directorio de mp3
(se supondrá que es c:\mp3), y al hacer doble click sobre uno
de los archivos se nos mostrara informacion de ese archivo en
la ventana principal. Escribiremos el siguiente código en la
seccion de "Aliases" en el Editor del mIRC:
/mp3 {
window
-l20 @mp3 50 50 600 200 @mp3
%i = 0
: comienzo
inc %i 1
if (%i > $findfile(c:\mp3,*.mp3,0)) {
goto fin }
else {
aline
-l @mp3 $nopath($findfile(c:\mp3,*.mp3,%i))
goto comienzo
}
: fin
unset %i
}
En el alias /mp3 hemos hecho lo siguiente: Primero creamos la
ventana @mp3 con una listbox (de tamaño 20 caracteres) y en
la posicion x (50), y (50) y con un tamaño de 400 pixels de
largo por 200 de alto.
Despues creamos una variable temporal %i y le damos el valor
'0'. Iniciamos un bucle cuya explicacion no forma parte de
esta sección así que se explicará solamente en lineas
generales lo que hace: incrementa %i en 1 y comprueba si el
valor de %i es mayor que la cantidad de mp3s en el directorio
c:\mp3, en caso de que %i sea mayor (querrá decir que ya no
hay mas mp3) vamos al indicador ": fin" que dejara
libre la variable temporal %i , y en caso de que el valor de
%i sea menos que la cantidad de archivos mp3 en c:\mp3 (quiere
decir que aun hay al menos un mp3 más), se añade una línea
a la listbox de la ventana con el nombre del archivo (sin la
ruta, de ahi el $nopath() )
El resto de funcionabilidad de la ventana, el mostrar
informacion del archivo al hacer doble click sobre una de las
lineas, la veremos más adelante cuando hayamos visto los
eventos remotos.
Identificadores de Ventanas Personalizadas
Estos identificadores pueden ser usados en cualquier Alias,
Popup o Evento Remoto para recoger informacion sobre una
determinada ventana:
$line(@nombre,N,[T])
Devuelve el contenido de la linea N de una ventana. Si N es
'0' devuelve el numero total de lineas en la ventana. El parámetro
[T] es opcional, y se usa solo cuando nos referimos a una
listbox en un lado de la ventana, para ello le daremos el
valor '0' a T . Si nos referimos a una ventana sin listbox el
parámetro [T] se omite, y si nos referimos a una ventana con
listbox, pero queremos información de la ventana principal y
no de la listbox, pondremos en lugar de [T] un 1.
Ejemplo: //echo -s $line(@mp3,2,0)
Devolverá el contenido de la segunda linea en la listbox de
la ventana @mp3
$sline(@nombre,N)
Devuelve el contenido de la linea seleccionada numero N (solo
funciona en una listbox). Si le damos el valor '0' a N,
devuelve el numero total de lineas seleccionadas en la
listbox.
$sline(@nombre,N).ln
Devuelve el numero de la línea seleccionada numero N (N
normalmente se pone '1')
$window(@nombre).<propiedad>
Devuelve las propiedades de una ventana. Los valores posibles
de <propiedad> son:
$window(@nombre).x : Devuelve la coordinada x de la posicion
de la ventana.
$window(@nombre).y : Devuelve la coordinada y de la posicion
de la ventana.
$window(@nombre).w : Devuelve la longitud en pixels de la
ventana.
$window(@nombre).h : Devuelve la altura en pixels de la
ventana.
$window(@nombre).dx : Devuelve la coordinada x de la ventana
con respecto al escritorio (no a la ventana del mIRC).
$window(@nombre).dy : Devuelve la coordinada y de la ventana
con respecto al escritorio (no a la ventana del mIRC).
$window(@nombre).state : Devuelve el estado de la ventana
(minimized, maximized, normal o hidden).
$window(@nombre).title : Devuelve el texto en la barra de
titulo de la ventana.
$window(@nombre).font : Devuelve el nombre del tipo de letra
actual en la ventana.
$window(@nombre).fontsize : Devuelve el tamaño del tipo de
letra actual en la ventana.
$window(@nombre).fontbold : Devuelve $true si el tipo de letra
esta en negrita, o $false si no lo esta.
Definición de popup's de ventanas en la sercción de
Remotes
Para definir el popup de una ventana personalizada sin
necesidad de crearlos en un fichero aparte podemos editarlos
dentro de la sección Remotes del editor del mIRC, la
forma de hacerlo es la habitual de los popup's. Tan
solo es necesario encerrarlos entre corchetes encabezar todo
con la clausula MENU <@nombre_ventana>.
MENU @nombre {
Popup1
.Sub-popup: /accion1
.Sub-popup2: /accion2
-
Popup2: /accion3
.....
}
Eso sí, previamente
tendremos que haber especificado en la definición de la
ventana que queremos definir en popup en los remotes
escribiendo el nombre de la ventana como el parámetro
[popup]:
Ejemplo: /window –a @nombre 10 10 100 100 @nombre
También podemos definir el popup de varias ventanas a la vez
poniendo:
MENU @nombre1,@nombre2,@nombre3 {
... popup ...
}
Donde he puesto
"...popup..." se ha de poner una secuencia de lineas
con el formato normal de un Popup. Para que se entienda mejor
el uso de esta técnica aquí va un ejemplo que debe ser
copiado en la sección “Remotes” del editor del mIRC:
alias
miventana {
window -a
@mi_ventana 10 10 200 200 @mi_ventana
}
Esto anterior tambien se puede hacer
dentro te la sección de ALIAS poniendo: /miventana /window -a
@mi_ventana 10 10 200 200 @mi_ventana.
Y ahora ya sí, en remotes
necesariamente:
menu @mi_ventana {
Decir
Hola
.En rojo : /aline 4 @mi_ventana Hola!
.En negro: /aline 1 @mi_ventana Hola!
Decir Adios
.En Azul: /aline 12 @mi_ventana Adios!
.En Verde: /aline 3 @mi_ventana Adios!
-
Cerrar Ventana: /window -c @mi_ventana
}
El resultado de crear este codigo es que al teclear /miventana
nos aparecerá una ventana personalizada en blanco y que, como
le hemos especificado, usará como popup el menú @mi_ventana
. Asi pues en el remote hemos declarado el "menu
@mi_ventana" y le hemos escrito unos popups de la manera
habitual. Si pulsamos el boton derecho sobre la ventana que
hemos creado, veremos como aparece ese popup que hemos creado.
Eventos más comunes en el uso de ventanas
personalizadas
on 1:INPUT:@nombre:{
comandos
}
Este evento solo sirve para las ventanas que creemos que
dispongan de una editbox, ya que el evento INPUT
"salta" cuando introducimos texto en una editbox y
pulsamos 'Enter'.
También podemos usar el evento ON CLOSE:
on 1:CLOSE:@nombre:{
comandos
}
Los comandos que
especifiquemos se ejecutaran cuando el usuario cierre la
ventana, ya sea mediante un popup, o mediante el boton de
cerrar (la 'X') de toda ventana de Windows.
Y análogamente tambien disponemos del evento:
on 1:OPEN:@nombre:{
comandos
}
Estos comandos se ejecutarán cuando se abra la ventana
indicada.
Con lo que hemos visto hasta ahora, y un poco de práctica, el
lector debe ser ya capaz de crear sofisticadas ventanas
personalizadas, modificar sus atributos, añadirles menús
emergentes, y ejecutar comandos cuando suceda algun evento en
las mismas (como abrir o cerrar la ventana). A continuacion
vamos a repetir, y esta vez a acabar, los dos ejemplos que se
expusieron anteriormente, ya que ya se está en condiciones de
poder darles toda su funcionabilidad con lo que sabemos hasta
ahora:
Ejemplo 1: Crear una
ventana para dialogar con el usuario
Primero copiamos el codigo
que ya habiamos hecho antes en los Aliases:
/ventana
{
window
-ae @dialogo 50 50 200 100 @dialogo
aline 12 @dialogo Hola, ¿Cómo te
llamas?
}
Ahora nos vamos a la seccion
"Remotes" y copiamos el siguiente codigo:
menu
@dialogo {
Salir: window
-c @dialogo
}
on
1:INPUT:@dialogo:{
%vari01
= me llamo
%vari02 = como estás?
if ( %vari01 isin $1- ) { /aline 12
@dialogo Hola $3 !! }
elseif ( %vari02 isin $1- ) { /aline 4
@dialogo Estoy bien gracias, y tu? }
elseif ( estoy isin $1- ) { /aline 3
@dialogo Pues me alegro... }
elseif ( idiota isin $1- ) { /aline 10
@dialogo Idiota tu !!!! }
elseif ( adios isin $1- ) { /aline 5
@dialogo Nos vemos! | window -c @dialogo }
else { /aline 6 @dialogo Lo ke tu
digas... }
halt
}
Primero hemos creado la ventana @dialogo con el comando
/ventana, a esta ventana le hemos indicado que ha de tener una
editbox (-e) y por lo tanto nosotros podremos escribir en
ella. Dependiendo de lo que escribamos, el script nos
responderá de una forma u otra gracias al evento ON INPUT que
controla el texto que escribamos en la ventana especificada.
Creo que el código esta bastante claro asi que al lector solo
le queda copiarlo en el editor del mIRC, probarlo y
modificarlo a su gusto.
Ejemplo 2: Ver un listado de archivos y mostrar
informacion de los mismos
Primero copiamos el código que ya teniamos en los
"Aliases" :
/mp3 {
window
-l20 @mp3 50 50 600 200 @mp3
%i = 0
: comienzo
inc %i 1
if (%i > $findfile(c:\mp3,*.mp3,0)) {
goto fin }
else {
aline
-l @mp3 $nopath($findfile(c:\mp3,*.mp3,%i))
goto comienzo
}
: fin
unset %i
}
Ahora vamos a los
"Remotes" y copiamos:
MENU
@mp3 {
dclick:
{
aline 4
@mp3 $findfile(c:\mp3,*.mp3,$sline(@mp3,1).ln)
aline 4 @mp3
$lof($findfile(c:\mp3,*.mp3,$sline(@mp3,1).ln)) bytes
aline 4 @mp3
$duration($calc($lof($findfile(c:\mp3,*.mp3,$sline(@mp3,1).ln))
/ 16000))
}
Recargar mp3: window -c @mp3 | /mp3
-
Salir: window -c @mp3
}
Supongo que la principal
pregunta al leer este codigo es: ¿Que es "dclick"?.
Eso se explicará más adelante, cuando veamos las ventanas de
imagen (picture windows), de momento ha de saber que el
contenido de "dclick" se ejecuta cuando hacemos
doble click sobre una ventana de imagen o (como en este caso)
sobre una listbox. Es decir que cuando hagamos doble click
sobre alguno de los objetos de la listbox (que seran nombres
de los mp3 que tengamos en el directorio c:\mp3) nos aparecerá
en la ventana principal la ruta completa del archivo en la
primera línea, el tamaño de ese archivo (usando el
identificador $lof ) en la segunda línea y la duración
aproximada del mp3, que se consigue dividiendo el tamaño del
mismo por 16.000, en la tercera. Despues hemos añadido dos
opciones al menú popup de la ventana, la primera “Recargar
Mp3” consiste en cerrar la ventana, y volverla a abrir
(usando el comando que habiamos creado anteriormente de nombre
/mp3 )
Bien, vistos estos dos
ejemplos, usted ya sabe lo suficiente como para hacer ventanas
personalizadas muy complejas y útiles, aunque si este es su
primer contacto con las ventanas personalizadas quizas sea una
buena idea que antes de ponerse a hacerlas, vea mas ejemplos
de como se hacen en algún script.
<---Atrás
|
 |
 |
 |
|