9

Ejemplo hpwColorMemo

ElvinesS pidió ayuda en un post del foro de Hispaneobook sobre como utilizar el plugin hpwColorMemo (H.P.Wickern). Luego de estar ocupado con unos trabajos, y viendo que nadie respondió (o eso creo) me propuse darle una mano.

Como ya dije en el post Ejemplo hpwImage la mayoría de los plugins crean un control sobre un objeto rectángulo y hpwColorMemo no es la excepción.

Pero antes tenemos que configurar unos cuantos parámetros, veamos un ejemplo del código que tendría el botón Crear Control:

.//Color de Fondo
hpwColorMemoSetVar "[hpwMemoBackColor]" "clWindow"
.//Opciones para la fuente
hpwColorMemoSetVar "[hpwMemoFontName]" "Courier"
hpwColorMemoSetVar "[hpwMemoFontColor]" "clBlack"
hpwColorMemoSetVar "[hpwMemoFontSize]" "10"

.//Opciones que pueden ir en [hpwMemoFontStyle]
.//fsBold,fsItalic,fsUnderline,fsStrikeout
hpwColorMemoSetVar "[hpwMemoFontStyle]" ""
hpwColorMemoSetVar "[hpwMemoFontCharset]" "0"

.//Opciones para mostrar hint 1=On 0=Off
hpwColorMemoSetVar "[hpwMemoShowhint]" "1"
hpwColorMemoSetVar "[hpwMemoHint]" "Click en el Memo"

.//Opciones que pueden ir en [hpwMemoCursor] si es que lo
.//usas crHandPoint,crDefault,crHourGlass
.//hpwColorMemoSetVar "[hpwMemoCursor]" "crHandPoint"

.//Opciones para barras de scroll, éstas pueden ser
.//ssNone,ssBoth,ssHorizontal,ssVertical
hpwColorMemoSetVar "[hpwMemoScrollBars]" "ssVertical"

.//Opciones para el borde pueden ser bsNone,bsSingle
hpwColorMemoSetVar "[hpwMemoBorderStyle]" "bsNone"

.//Opciones Generales 1=On 0=Off
.//Habilitado
hpwColorMemoSetVar "[hpwMemoEnabled]" "1"
.//Visible
hpwColorMemoSetVar "[hpwMemoVisible]" "1"
.//Solo lectura
hpwColorMemoSetVar "[hpwMemoReadOnly]" "0"

.//Justificado de texto
hpwColorMemoSetVar "[hpwMemoWordWrap]" "0"

.//Opciones de hipervinculos en ciertas acciones 1=On 0=Off
hpwColorMemoSetVar "[hpwMemoHotSpotActive]" "1"
hpwColorMemoSetVar "[hpwMemoHotSpotColor]" "clBlue"
hpwColorMemoSetVar "[hpwMemoHotSpotMarkerColor]" "clWindow"
hpwColorMemoSetVar "[hpwMemoHotSpotBeginChar]" "<"
hpwColorMemoSetVar "[hpwMemoHotSpotEndChar]" ">"
hpwColorMemoSetVar "[hpwMemoHotSpotUnderlined]" "1"
hpwColorMemoSetVar "[Rec_memo_HotSpotAction]" "AlertBox [#34]HotSpot[#34] [#34]Hotspot: [#91]Rec_memo_HotSpotStr[#93][#34]"

.//Creacion del control
.//Creo el contro y cargo la configuracion (acciones)
.//del archivo lenguaje.cfg
hpwColorMemoCreate "Rec_memo" "[PubDir]lenguaje.cfg"
.//Le doy foco al rectangulo con el control
hpwColorMemoSetFocus "Rec_memo"

.//Por si quisiera que al crearlo cargue un texto
.//setvar "[codigo_ejemplo]" "AlertBox [#34]Titulo[#34] [#34]Texto[#34]"
.//hpwColorMemoSetText "Rec_memo" "[codigo_ejemplo]"

Como podran ver con hpwColorMemoCreate “Rec_memo” “[PubDir]lenguaje.cfg” le dije al plugin que tiene que cargar la configuración del archivo lenguaje.cfg. Pero que contiene ese archivo?.

Pues esto:

;Este es un ejemplo de archivo de configuración para hpwColorMemo
;Los comentarios comienzan con ; en el primer carácter de la linea ; (punto y coma) La lista de reglas tiene que comenzar siempre con 0

;Esta es la primer regla
0|Add
0|KeyBegEndLst.Add|[;];Red

;Ahora la segunda regla
1|Add
1|KeyDrawingType|dtKeyShow
1|Keywords.Add|AlertBox;Blue
1|Keywords.Add|Ventana;Blue
1|ZOrder|1
1|PartWord|False
1|KeyCase|False

;La tercer regla
2|Add
2|KeyDrawingType|dtBeginLineEnd
2|KeyLineEndLst.Add|.;Gray
2|ZOrder|2

Algunas observaciones:

En la primera regla
0|KeyBegEndLst.Add|[;];Red
Significa que colorea de Rojo desde [ hasta ] y también lo que contiene dentro. Resultaría algo así [variable].

En la segunda regla
1|KeyDrawingType|dtKeyShow
1|Keywords.Add|AlertBox;Blue
1|KeyCase|False
Significa que colorea la palabra entera de azul y no distingue Minúsculas de Mayúsculas.
Resultaría algo así alertbox.

En la tercer regla
2|KeyDrawingType|dtBeginLineEnd
2|KeyLineEndLst.Add|.;Gray
Significa que colorea de gris desde el comienzo al fin de la linea si encuentra al comienzo el carácter . (punto) .
Resultaría algo así .Ejemplo de comentario.

Screen ejemplo hpwColorMemo
Screenshot del ejemplo

Dercarga del ejemplo:

  ejemplo_hpwColorMemo.rar (948,3 KiB, 1.691 hits)

Nota: hpwColorMemo es una interesante herramienta para aquellos docentes que pretendan enseñar a sus alumnos lenguajes de programación creando su propia sintaxis como bien lo propone ElvinesS en el post original. Yo estuve haciendo unas pruebas quedó lindo, pero…¿ le interesará a alguien?.

3

Ejemplo ver Espacio Libre

ElvinesS pregunto en un post del foro de Hispaneobook como puede saber el espacio libre en un disco…acá la forma que yo lo haría…

El ejemplo consiste en crear un archivo .bat con la instrucción DOS DIR /w C: >dir.txt, para luego ejecutarlo (al .bat) desde neobook, con lo que obtendremos los resultados del DIR en el archivo dir.txt para luego poder leerlo.

Como lo leemos? Pues bien el comando dir preformatea el texto y justo en la ultima linea nos informa el espacio libre que tenemos en el disco. Con la función StrParse separamos la última línea para poder obtener en limpio los números, luego con StrReplace eliminamos los . (puntos) para poder utilizar este valor con la función Math para calcular el espacio en Kb, Mb y Gb. Más detalles en el .pub del ejemplo.

Screen ejemplo espacio

Descargar ejemplo:

  ejemplo_espacio.rar (656,0 KiB, 2.339 hits)

2

Ataques DDOS masivos

Comienzo avisando que esta entrada nada tiene que ver con neobook, pero si con mi weblog, el cual estuvo inaccesible durante un tiempo…

¿Por que?
Todo comenzó hace unos días… Soy lector del blog Genbeta, el cual misteriosamente estuvo offline varios días y yo me preguntaba cual era el motivo… Resulta que Genbeta hace ya un tiempo publicó un post sobre los sitios que dicen mostrarte quienes te admiten y quienes no en el popular Messenger de Windows, sitios que todos sabemos son fraudes que se aprovechan de los usuarios para guardar sus contraseñas y posteriormente llenarlos de SPAM y/o robarles su cuenta, al correr de los dias dicho post tomó una indexacion importante en google con lo cual Genbeta recibió amenazas para quitar la entrada de lo contrario realizarían ataques DDOS, al cabo de un tiempo estas amenazas se hicieron realidad…

Pero ahí no terminó todo, siguieron atacando a varias webs, entre ellos Meneame, Error500, WeblogsSL, IPLan, etc. y el servidor donde hosteo este weblog.

La razón de esta entrada?
Pues solidarizarme con las victimas de estos ataques esperando que la justicia tome cartas en el asunto… y a los clientes de los servidores caídos decirles que dejen de quejarse y que entiendan que no es fácil resistir un ataque de este tipo, son contados los que no caerían como por ej Google, Microsoft, la NASA, y sitios tremendamente importantes que gastan millones y millones en seguridad informática.

Para saber más:
http://www.anieto2k.com/2008/02/11/ataque-ddos-sobre-la-blogosfera/
http://ricardogalli.com/2008/02/10/de-ciberdelincuentes-y-el-mundo-es-pequeno/
http://tonapa.cgrc.telefonica.com.pe/blog/?p=127
http://www.codigogeek.com/2008/02/08/que-hacer-ante-un-ataque-ddos/

15

Ejemplo Hipervinculos

Bien…hoy trato de solucionar lo planteado por darkisdeath en el post Ayuda plz, Hipervinculos. del foro de hispaneobook.

[…]Estoy haciendo un índice y me resulta más fácil poner texto con hipervínculos para ir a alguna página que poner imágenes como botón, pero resulta que al hacerlo el texto adquiere las características de un hipervínculo en html, azul y subrayado. ¿Hay forma de quitar esas característica y dejar el texto intacto? (sin el subrayado y el color azul)

La única opción que encontré fue la de cambiar de color el hipervínculo, pero no me sirve de mucho. […]

Vamos con la teoría: neobook permite la interacción con el objeto navegador, lo cual combinado con un poco de java se transforma en un potente vínculo. Pero… html también colorea y subraya los hipervínculos te preguntas… Pues si, también lo hace, pero desde la salida de CSS esto se puede cambiar.

En base a esto podemos hacer un .html que contenga el texto y su hipervínculo será un llamado a una función javascript que realizará la acción en neobook.

El código javascript para comunicarse con neobook es el siguiente:

function doExec()
{
	window.external.nbExecAction( 'alertbox "Javascript" "Hola desde el navegador"' );
}

El html que muestra el objecto Web browser tendría el siguiente enlace:

Mostrar alertbox

Listo…entendí perfecto pero como saco el subrayado???
Pues en el html tenes que agregar esta linea en el head.

Y el contenido de ejemplo_hipervinculos.css :

a:link {
	text-decoration: none;
	color: #000000;
}
a:visited {
	text-decoration: none;
	color: #000000;
}
a:hover {
	text-decoration: none;
	color: #000000;
}
a:active {
	text-decoration: none;
	color: #000000;
}

El css elimina el subrayado y colorea de negro (#000000) los hipervínculos dando un aspecto del texto normal…

Espero que sea útil…

Screen ejemplo hipervinculos

Bajar ejemplo:

  ejemplo_hipervinculos.rar (869,6 KiB, 2.387 hits)

2

Ejemplo Calculadora

Buenas… hoy voy a postear un ejemplo de como realizar un calculadora en neobook respondiendo al post de zasuangel en el foro de hispaneobook.

Math es la función que nos brinda neobook para realizar operaciones matemáticas.
Math operacion decimales resultado
Esta función soporta +, -, *, /, ^, Abs(valor absoluto), Sin(seno), Cos(coseno), Atan(arcotangente), Sqr(cuadrado), Sqrt(potencia), Round(redondeo), Trunc(entero mas cercano) y operaciones complejas utilizando parentesis ( ) y variables ej. (6+6)/[b].

.//Ejemplo sumar 20 + 20 con 0 decimales y guardar en la variable [resultado], daría 40
Math "20+20" "0" "[resultado]"

Sabiendo esto, ahora a cada botón (1,2,+,-,etc) tenemos que agregar unas acciones que concatenan la variable [operacion] para luego con el botón igual realizar la función Math.

En líneas generales:

.//Acciones del botón 1 (número 1)
setvar "[operacion]" "![operacion]1"

.//Acciones del botón 2 (número 2)
setvar "[operacion]" "![operacion]2"

.//Acciones del botón + (suma)
setvar "[operacion]" "![operacion]+"

.//Acciones del botón - (resta)
setvar "[operacion]" "![operacion]-"

.//Acciones del botón = (igual)
Math "[operacion]" "0" "[resultado]"

Cabe destacar el uso de ! al momento de concatenar las variables para que neobook tome los números y signos de forma literal.

Si no lo usamos sucedería lo siguiente:

.//Primer click al número 1
setvar "[operacion]" "[operacion]1"
.//Ahora [operacio] contiene 1

.//Primer click a + (sumar)
setvar "[operacion]" "[operacion]+"
.//Ahora [operacion] contiene 1+

.//Segundo click al número 1
setvar "[operacion]" "[operacion]1"
.//Ahora [operacion] contiene 2, puesto q antes contenia 1+ y se concatenó con 1, lo que formó 1+1 , se realizó la operación y se guardó en [operacion].

Este es un ejemplo básico, luego se le pueden agregar el soporte de más operaciones, limpiar la operación (C) , usar decimales, etc y todo lo q se te ocurra :D.

Espero que sea de utilidad.

Screen ejemplo calculadora

Bajar el ejemplo:

  ejemplo_calculadora.rar (879,2 KiB, 3.042 hits)

4

Trabajando con archivos ini

Buenas…hoy voy a poner un pequeño ejemplo de las funcionalidades que nos brindan los archivos .ini (pedido por zasuangel). Pero ?…

Que es un archivo INI?

Archivo ini: Son ficheros que almacenan información de configuración para un amplio repertorio de elementos, incluyendo preferencias de usuario, controladores de periféricos, etc. Estos archivos han sido mayoritariamente sustituidos con el uso del Registro de windows, aunque se ofrece todavía soporte para los mismos por razones de compatibilidad.

En que podemos usar archivos .ini?
En todas nuestras aplicaciones dado a que en ellos podemos guardar las configuraciones del mismo, preferencias de los usuarios , opciones predeterminadas ,etc.
Cuando no usar archivos .ini?
Cuando las variables que vamos a almacenar en ellos tienen características privadas, por ejemplo alguna contraseña, numero de tarjeta de crédito, etc. Por que? Simplemente porque cualquier persona puede acceder a ellos y modificarlos con algún editor de texto.

Estructura de un archivo .ini:

[OPCIONES]
ALINICIO=1
TAMANO=3

[USUARIO]
NOMBRE=BuNKeR
TIPOGRAFIA=ARIAL
COLOR=AZUL
TAMANO=14

Este archivo contiene dos secciones. La sección OPCIONES contiene los parametros de la aplicación, la clave ALINICIO controla si se ejecuta al iniciar windows (ej 0=NO, 1 = SI), la clave TAMANO controla el tamaño de la ventana al iniciar (ej 1=minimizada, 2=normal, 3=maximizada). La sección USUARIO guarda preferencias del usuario como ser su NOMBRE, TIPOGRAFIA, COLOR, TAMANO del texto que prefiere ver en la aplicación.

El ejemplo:

Screenshot ejemplo ini
screenshot del ejemplo

Para manipular la información de los archivos ini utilizo el plugin NeoDouble (DEC)
Algunas funciones:

.Lee un valor de un archivo ini
npLeerIni archivo.ini SECCION CLAVE
.Escribe un valor en un archivo ini
npEscribirIni archivo.ini SECCION CLAVE VALOR_A_ESCRIBIR
.Comprueba si existe un determinado valor en un archivo ini

npExisteValorIni archivo.ini SECCION CLAVE

Download del ejemplo:

  ejemplo_archivosini.rar (1.003,6 KiB, 2.176 hits)

4

Ejemplo hpwImage

Buenas…ahora voy a poner un ejemplo básico de como usar el plugin hpwImage (H.P.Wickern) en base al problema planteado por zasuangel en el post Problema 2 del foro de Hispaneobook.

Breve explicación: Como la mayoría de plugins hpwimage crea un control sobre un objeto rectángulo, esta acción es la primera que se debe realizar para continuar con las otras funciones del plugin.

Creamos el control sobre el objeto:
hpwImageCreate objeto_rectangulo

Luego para cargar una imagen (en el rectagunlo sobre el cual tiene control hpwimage):
hpwImageLoadFromFile objeto_rectangulo ruta_archivo pos_x pos_y transparencia transparencia_color

Para guardar la imagen en un archivo (se guarda lo que contiene el rectángulo sobre el cual tiene control hpwimage) :
hpwImageSaveToFile objeto_rectangulo ruta_archivo_destino pos_x_inicial pos_y_inicial pos_x_final pos_y_final

Ver detalles en el .pub incluido en la descarga.

Screen ejemplo hpwimage
Screenshot del ejemplo

  Ejemplo_hpwimage (1,1 MiB, 1.896 hits)

9

Abrir archivos…

Buenas…luego de estar un poco ocupado con Youtube Video Downloader (ya va por la versión 1.2.0.0 con algunas cosas interesantes) navegando por el foro de Hispaneobook leí el post de EvilnesS que tiene problemas para abrir archivos. Acá les dejo la solución que yo implementaría.

Lo que realiza esta aplicación es guardar la ruta del archivo en un archivo.bat y luego ejecutarlo con la función Run. Para ver su funcionamiento abrir el .pub incluido en la descarga.

Screen ejemplo abrir archivos
Screenshot del programa

  Ejemplo_abrir_archivo (1,1 MiB, 18.007 hits)

NOTA: Estos archivos no se abren en neobook, sino con su programa predeterminado.

10

Youtube Video Downloader 1.0

Youtube Video Downloader

Buenas…hoy les presento mi más reciente creación realizada en neobook, se trata de Youtube Video Downloader 1.0. Como bien lo pueden deducir, se encarga de bajar los vídeos alojados en youtube a nuestra PC. Guarda los vídeos descargados en formato .FLV y pueden ser reproducidos por cualquier reproductor de videos FLV.

Descargar:

  youtubevd.rar (5,6 MiB, 3.393 hits)

P/D: Estoy pensando en una actualización que permita convertir el video descargado (.FLV) a otros formatos como .AVI, .MPG, u otros. Seria bueno no?.
P/D 2: Novedad sobre el blog: Cambie de host y ahora las descargas van a estar disponibles directamente para evitar las esperas y/o confusiones que solía dar el servicio de 4shared.com.

Historial de Actualizaciones:

update Actualización 31/12/07 [Versión 1.0.1]: Si no ingresamos la extensión .FLV en el cuadro guardar archivo, el programa la agrega automáticamente evitando así guardarlo como Archivo (sin extensión). Sugerencia de Palamar. Link de descarga actualizado!

update Actualización 3/1/08 [Versión 1.0.5]:
– Corregidos bugs menores.
– Incorporación de un módulo de actualización. Al iniciar el programa chequea si hay actualizaciones disponibles y pregunta al usuario si desea descargarlas y aplicarlas.
Link de descarga actualizado!

update Actualización 4/1/08 [Versión 1.1]:
– Incorporación de una lista de descarga. Ahora es posible programar mediante una lista la descarga de N vídeos.
– Detecté algunos bugs por lo cual deshabilité el botón descargar de lista hasta que los solucione. Disculpen las molestias.
Link de descarga actualizado!

update Actualización 12/1/08 [Versión 1.1.2]:
– Errores corregidos en la descarga mediante lista.
– Errores corregidos en el mensaje de actualización de la v 1.1.1.3.
– Incorporación de timeout. Si se pierde la conexión mientras se está descargando un archivo, al cabo de 30 segundos,se cancela y continua con el siguiente archivo.
Link de descarga actualizado!

update Actualización 17/1/08 [Versión 1.2]:
– Habilitada la opción para convertir los vídeos descargados (.FLV) a formatos .AVI o .MPG.
– Incorporación de sonidos al finalizar las descargas, errores y fin de conversión.
Link de descarga actualizado!

update Actualización 16/4/09 [Versión 1.2.1]:
– Cambios mínimos en icono e imagen splash.
– Script reprogramado para bajar vídeo exitosamente.
Link de descarga actualizado!

update Actualización 17/4/09 [Versión 1.2.1.1]:
– Corregido un error al descargar por lista no permitía seguir con los archivos siguientes.
Link de descarga actualizado!

update Actualización 03/12/09 [Versión 1.2.1.5]:
– Cambios al script para descargar videos con “Inserción desactivada por solicitud”.
– Botón Opciones > Ahora se puede elegir el formato a descargar: FLV, 3GP o MP4.
– Se agregó la opción para convertir videos a MP3 (audio).
Link de descarga actualizado!

4

Lista de reproducción y más…

Hoy voy a tratar de aclarar las dudas planteadas en el foro de Hispaneobook por EvilnesS en el post Mas dudas… .

La teoría:

Para poder hacer los botones de play, pause, stop , etc. recurrí a la función MCICommand comando_mci, la cúal nos permite manejar dispositivos multimedia de windows.

.//Algunos ejemplos
MCICommand "play c:\mi_tema.mp3"
MCICommand "pause c:\mi_tema.mp3"
MCICommand "stop c:\mi_tema.mp3"

Hasta acá todo ok…la cosa se complico al momento de pasarle la canción como variable. Si el botón play tenia en sus acciones MCICommand play [variable] me daba un error de MCI. Lo cual lo resolví haciendo uso del Plug-in NeoDouble (DEC) con la función npEjecutarAccion accion_de_neobook lo cual me permitió hacer lo siguiente:

SetVar "[accion]" "MCICommand [#34]play [tema][#34]"
NpEjecutarAccion "[accion]"

Mas información sobre comandos MCI acá.

El tema de la lista de reproducción:

Tenemos que mostrar el cuadro de dialogo Abrir (FileOpenBox). Si el usuario elige sólo 1 archivo lo agregamos al listbox (ListBoxAddItem), si fueran varios tendremos que separar (StrParse) los archivos elegidos y mediante un loop agregarlos uno a uno al listbox. Luego podes mover(ListBoxMoveItem) los temas para acomodarlos en el orden deseado. Luego podrías agregar una función para guardar la lista lo que le permitirá al usuario hacer distintas listas de reproducción. En el .pub incluido esta todo comentado. Espero sirva de ayuda.

La practica (el ejemplo) :

Screnshoot de lista de reproducción
screenshot del ejemplo

Plug-ins utilizados:
– NeoDouble (DEC) disponible en downloads.

NOTA: El ejemplo sólo es para explicar la implementación de una lista de reproducción en neobook, no es un reproductor, por lo cual no contiene funciones avanzadas para comprobar el tiempo transcurrido, el estado (listo,reproduciendo), etc.

  lista_rep.rar (2,2 MiB, 2.521 hits)