<

   
 
  VeNtAnAs PeRsOnAlIZaDaS
 
Las Ventanas Personalizadas en el mIRC

 

 

 

El mIRC nos permite la creación de ventanas persolalizadas que no son mas 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 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 scripter 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 ayudaría a superar.

 

 

En el presente texto 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 a 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 salones), y a las listas de 'objetos' seleccionables que tienen también ciertas ventanas (como la lista de nicks en los salones).

 

 

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 siguiente 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 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ú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 primeros determinan la posición dentro de la pantalla, los dos últimos sus dimensiones (ancho y alto).

 

 

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 continuación puede ver una descripción de para que sirve 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 editbox 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 un listbox con N caracteres de largo.

 

     -n : Minimiza la ventana.

 

     -o : Si la ventana es una ventana de escritorio, este 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" (esta opción será analizada en un capítulo aparte).

 

     -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 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 más 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 coordinadas 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 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 ú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 (Ejemplo: @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 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 parámetro -l entre el nombre del comando y el parámetro [c], por ejemplo /aline -l @mi_ventana 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 el lector ya conoce 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 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 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 mostrara información de ese archivo en la ventana principal. Escribiremos el siguiente código en la sección 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 on una listbox (de tamaño 20 caracteres) y en la posición x (50), y (50) y con un tamaño de 400 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 así que se explicará solamente 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 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 ahí el $nopath() )

 

 

El resto de funcionabilidad 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 numero total de líneas 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 línea en la listbox de la ventana @mp3

 

$sline(@nombre,N) 

 

Devuelve el contenido de la línea seleccionada numero N (solo funciona en una listbox). Si le damos el valor '0' a N, devuelve el numero total de líneas seleccionadas en la listbox.

 

$sline(@nombre,N).ln 

 

Devuelve el número 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 posición de la ventana.

 

    $window(@nombre).y : Devuelve la coodinada 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 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 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 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 secció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 cláusula 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 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 Adiós

 

    .En Azul: /aline 12 @mi_ventana Adiós!

 

    .En Verde: /aline 3 @mi_ventana Adiós!

 

    -
    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 "menú @mi_ventana" y le hemos escrito unos popups de la manera habitual. Si pulsamos el botón 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 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 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 algún evento en las mismas (como abrir o cerrar la ventana). A continuación vamos a repetir, y esta vez a terminar, 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 código que ya habíamos 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 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 ( adiós isin $1- ) { /aline 5 @dialogo Nos vemos! | window -c @dialogo }

 

    else { /aline 6 @dialogo Lo que 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 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 %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 código 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 clic sobre una ventana de imagen o (como en este caso) sobre una listbox. Es decir que 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 16.000, en la tercera. Después 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 habíamos 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 quizás sea una buena idea que antes de ponerse a hacerlas, vea mas ejemplos de como se hacen en algún script.

 
  Hoy habia 20 visitantes (35 clics a subpáginas) ¡Aqui en esta página!  
 
-----------------------------------------------------------------------
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis