Las Ventanas Personalizadas en
el mIRC
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.
Este documento ha sido creado por TeMpEsT.
Para cualquier duda o sugerencia, mandar un e-mail a tempest@mixmail.com
|