![]() |
![]() |
Ventanas personalizadas
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 información 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 también pueden ser usadas para la creación de GUPs (Interfaces Graficas de Usuario) mediante las Picture
Windows o ventanas de imagen.
Este
documento está pensado para que el lector y aprendiz de scripter tenga un
primer contacto con las ventanas personalizadas y se capaz de crearlas y
manipularlas a su gusto.
En el
presente documento se utilizarán las siguientes convenciones para presentar la
sintaxis de instrucciones y comandos: los argumentos entre < y >
representarán valores que es necesario introducir para la correcta ejecución
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 abajo, siguiendo
todos los ejemplos y probándolos todos antes de seguir. También es conveniente
que el lector modifique a su gusto los ejemplos que aquí encontrará para que
vaya experimentando con los comandos de creación/modificación 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 también ciertas
ventanas (como la lista de nicks en los canales).
Por
último, antes de empezar, en este tutorial se presupone que el lector ya está
familiarizado y 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 siguiente sintaxis:
/window
[-acdeEhl[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 argumento
<@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 seguidos solo hemos necesitado un símbolo
“-“ delante de ellos. Los número 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 primeros determinan 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 momento veremos la utilidad de cada uno de estos
grupos. Una vez descritos los parámetros deseados especificaremos el nombre que
queremos dar a la ventana (siempre con @ delante). A continuación no queda sino
concretar la ubicación y tamaño de la ventana, no es necesario especificar
ninguno de los dos, en ambos casos, 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 botón derecho del ratón.
A
continuación pude ver una descripción que sirve para la primera tanda de
parámetros del comando window que definirán 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 editox de múltiples 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, ese parámetro 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”
-r: Restaura una ventana después 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 aquí hemos visto la primera tanda de argumentos del
comando window, no se asuste, la inmensa mayoría de las veces solo usará uno o
dos de estos argumentos, pero está bien que los conozca por si los necesitara
para alguna ocasión 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: Botón de minimizar
+s: Se puede cambiar de tamaño
+t: Con barra de título
+x: Con botón 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 coordenadas de la posición inicial de la ventana
(x y) así como su longitud y altura (en pixels) w (longitud) h (altura).
[x y [w h]] : por ejemplo, 100 100
300 100
Las
coordenadas 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 último
el parámetro [popup] sirve para especificar un archivo que contenga el menú
popup de la ventana (que aparecerá al hacer clic con botón derecho sobre la
misma). Se puede especificar un archivo (cuya extensión 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 información que se muestre
en ella.
El
parámetro [c] esta presente en todos estos comandos, e indica el color
principal de la línea que añadirá, borrará o modificará. En cualquier caso
también se pueden 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
parámetro –l entre el nombre del comando y el parámetro [c], por ejemplo
/aline –l @mi_venatana lo que 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 3
/dline [c] <@nombre> <N>
Borra la línea (o el rango de líneas) número <N>
Ejemplo: /dline @nombre 1-10
/iline [c]
<@nombre> <N> <texto>
Inserta una línea (<texto>) en la posición <N>
Ejemplo: /iline @mi_ventana 2 Insertando una línea…
/rline [c]
<@nombre> <N> <texto>
Sustituye la línea <N> por <texto>
Ejemplo: /rline @mi_ventana 1 Hasta luego
/sline [c] <@nombre> <N>
Selecciona la línea número <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 ya se conocen todos los comandos que se usan
para la creación/modificación 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 información al usuario y esperará 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
este 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
aquí, 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 información de los mismos.
En este
ejemplo crearemos una ventana con una listbox, en la que aparecerán los
archivos mp3 de nuestro directorio de mp3 (se supondrá que es c:\mp3), y al
hacer doble clic sobre uno de los archivos se nos mostrará información sobre
ese archivo en la ventana principal.
Escribiremos
el siguiente código en la sección “Aliases” en el Editor de 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 posición x (50), y (50) y con un
tamaño de 600 pixels de largo por 200 de alto.
Después
creamos una variable temporal %i y le damos el valor “0”. Iniciamos
un bucle cuya explicación no forma parte de esta sección, asi que se explicará
en líneas generales lo que hace: incrementa %i en 1 y comprueba si el valor de
%i es mayor que la cantidad de mp3s que tenemos en el directorio c:\mp3, en
caso de que %i sea mayor (querrá decir que ya no hay más mp3) vamos al
indicador “fin” que dejará 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 archivo mp3 más), se añade una línea a la
listbox de la ventana con el nombre del archivo (sin la ruta, de ahí el $nopath()).
El resto
de funcionalidad de la ventana, el mostrar información del archivo al hacer
doble clic sobre una de las líneas, 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 información sobre una determinada ventana:
$line(@nombre,N,[T])
Devuelve
el contenido de la línea N de una ventana. Si N es “0” devuelve el
número total de líneas en la ventana. El parámetro [T] es opcional, y se usa
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 línea en la listbox de la ventana @mp3.
$sline(@nombre,N)
Devuelve
el contenido de la línea seleccionada número N (solo funciona en una listobx).
Si le damos el valor “0” a N, devuelve el número total de líneas
seleccionadas en la listbox.
$sline(@nombre,N).ln
Devuelve
el número de la línea seleccionada número 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 coordenada x de la posición de la ventana.
$window(@nombre).y:
Devuelve la coordenada y de la posición 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 coordenada x de la ventana con respecto al escritorio (no a la
ventana del mIRC).
$window(@nombre).dy:
Devuelve la coordenada y de la ventana con respecto al escritorio (no a la
ventana del mIRC).
$window(@nombre).state:
Devuelve el estado de la ventana (minimizad, maximizad, normal o hidden).
$window(@nombre).title:
Devuelve el texto en la barra de título de la ventana.
$window(@nombre).font:
Devuelve el nombre del tipo de letra actual en la ventana.
$window(@nombre).fontsize:
Devuelve el tamaño el 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 sección de Remotes.-
Para
definir el popup de una ventana pesonalizada 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 y 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 líneas
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 también se puede hacer dentro de 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 código 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. Así pues en
el remote hemos declarado el “menu @mi_ventana” y le hemos escrito
unos popups de la manera habitual. Si pulsamos el botón derecho de nuestro
ratón 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 ejecutarán cuando el usuario cierre la ventana,
ya sea mediante un popup, o mediante el botón de cerrar (la “X”) de
toda ventana de Windows.
Y
análogamente también disponemos del evento:
on 1:open:@nombre:{
comandos
}
Estos
eventos 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 capaz ya de
crear sofisticadas ventanas personalizadas, modificar sus atributos, añadirles
menús emergentes, y ejecutar comandos cuando suceda algún evento en las mismas
(como abrir o cerrar la ventana).
A
continuación 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 funcionalidad con lo que sabemos hasta ahora:
Ejemplo 1: Crear una ventana para dialogar
con el usuario
Primero
copiamos el código que ya habíamos hecho antes el los Aliases:
/ventana {
window –ae @dialogo 50 50 200 100 @dialogo
aline 12
@dialogo Hola, ¿Cómo te llamas?
}
Ahora nos
vamos a la sección “Remotes” y copiamos el siguiente código:
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 alias /ventana, a esta le hemos
indicado que ha de tener una editbotx (-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 está bastante claro así 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 información de los mismos.
Primero
copiamos el código que ya teníamos en los “Aliases”:
/mp3 {
window –l20 @mp3 50 50 600 200 @mp3
%i = 0
:comienzo
inc %1 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 “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 primera pregunta al leer este código es: ¿Qué es “dclick”?.
Corresponde a las ventanas de imagen y se tratará en ese tema, de momento ha de
saber que el contenido de “dclick” se ejecuta cuando hacemos doble
clic sobre una ventana de imagen o (como en este caso) sobre una listbox. Es
decir, cuando hagamos doble clic sobre alguno de los objetos de la listbox (que
serán 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 16000, en la tercera. Después hemos
añadido dos opciones a menú popup de la ventana, la primera “Recargar
mp3” consiste en cerrar la ventana, y volverla a abrir (usando el comando
que habíamos creado anteriormente de nombre /mp3).