0

Ejemplo 2 mouses

Viendo el foro de neosoftware me encuentro con esta pregunta de smartmedia donde pregunta como puede obtener dos punteros moviéndose en paralelo.

Manos a la obra.

Para lograr el efecto vamos a necesitar un png con transparencia con el puntero que deseamos clonar. Tenemos que insertarla como un objeto polígono.

En este caso hay 2 imágenes por las cuales el mouse deberá pasar, con lo cual deberemos de crear 2 timers.

En el timer que controla la imagen izquierda (TMI).

GetMousePos "[x_pos]" "[y_pos]"
Setvar "[x_pos_p]" "[x_pos]+300"
Setvar "[y_pos_p]" "[y_pos]"
MoveObject "Polygon1" "[x_pos_p]" "[y_pos_p]"

En el timer que controla la imagen derecha (TMD).

GetMousePos "[x_pos]" "[y_pos]"
Setvar "[x_pos_p]" "[x_pos]-300"
Setvar "[y_pos_p]" "[y_pos]"
MoveObject "Polygon1" "[x_pos_p]" "[y_pos_p]"

Con ese código lo que hacemos es obtener la posición del mouse y sumarle la distancia a la que queremos que se muestre el otro mouse. En este caso es 300 (280 que es el ancho de la imagen + 20 que es la separación entre las imágenes).

Luego en la imagen izquierda:

Acciones > Entrada de mouse:

TimerStart "TMI" "1"

Acciones > Salida de mouse:

TimerStop "TMI"
MoveObject "Polygon1" "645" "-1"

En la imagen derecha:

Acciones > Entrada de mouse:

TimerStart "TMD" "1"

Acciones > Salida de mouse:

TimerStop  "TMD"
MoveObject "Polygon1" "645" "-1"

Captura

Descarga

  ej_two_mouses.rar (1,1 MiB, 2.069 hits)

NOTA: El ej puede modificarse para optimizarlo.

3

Obtener Vendor ID y Product ID

Esta es mi forma de resolver la consulta que samfourie hizo en el foro de neosoftware, en la cual pregunta como obtener el Vendor ID de un dispositivo USB. Con esto podría restringir el uso de su aplicación a dispositivos que él decida.

Al momento de escribir esta entrada (me demoré en publicarla por cuestiones de trabajo), sam ya encontró una forma de hacerlo, pero siempre es bueno tener alternativas. Por mi parte encuentro dicha solución como insegura, pues manipula un archivo de texto que puede ser alterado, y no comprueba si la aplicación esta siendo ejecutada desde el dispositivo (solo comprueba su presencia, que como dije antes puede ser alterado).

Pues esta es mi manera:

Plugins necesarios:

hpwControl

Funciones necesarias:

EsRemovible (incluida en el rar)

LeerValorBinarioReg (incluida en el rar)

Para llegar a la solución, lo separé en 3 pasos.

1 – Comprobar si la unidad es removible

2- Si es removible obtiene del registro informacion de la unidad (si no es removible cierra la aplicación)

3- Una vez obtenida la informacion busca en las unidades usb el VID y PID con el SN del dispositivo.

En el ejemplo esta todo comentado, por lo cual no pondré todo el código.

Captura

Descarga

  ejVID.rar (1,2 MiB, 2.651 hits)

NOTA: Las funciones listadas arriba deben ser copiadas a la carpeta Functions de NeoBook.

NOTA 2: El ejemplo puede ser modificado para restringir el uso segun el VID obtenido.

5

Ejemplo mouse inactivo

Este ejemplo es para responder al comentario de Zeus que hizo en la entrada Info Mouse donde pregunta como puede hacer para realizar una aplicación que ejecute acciones después de cierto tiempo de inactividad del mouse.

Pues la forma que pensé de hacerlo es con un timer que compruebe la posición del mouse y pasado determinado tiempo si la posición no ha cambiado ejecute las acciones deseadas.

El ejemplo se encuentra comentado. Cualquier duda me consultan.

Captura:

Descarga del ejemplo:

  ejmouseinactivo.rar (1,0 MiB, 1.824 hits)

1

Ejemplo copiar ultimos 10 archivos modificados

Esta entrada es para responder a worf que hizo su pregunta en el foro de harko http://specialapps.software-zone.com/forum/viewtopic.php?t=847.

Quiero copiar unos archivos que son imagenes, que se van actualizando constantemente, o sea se agregan en una carpeta pero los archivos anteriores no se borran, lo que no se como hacer es un boton que me copie a otra carpeta los ultimos 10 archivos que se agregaron

gracias claudio

Para resolver esto necesitamos del plugin NeoDouble (DEC) más precisamente la acción npFechaModificacionArchivo la cual nos devolverá (como su nombre lo indica) la fecha en que fue modificado, dato que luego pasaremos a TimeStamp (función incluida en el .rar).

Una vez tengamos los timestamps de los archivos en un vector, los ordenaremos con el método burbuja (función incluida en el .rar). Ahora que tenemos ordenados los vectores nombres y timestamps podremos extraer los últimos 10.

No explico todo el código, pues esta comentado en el ejemplo. Cualquier duda me consultan.

NOTA1: El ej puede modificarse para optimizarlo.

NOTA2: Los archivos Burbuja y FechaATimestamp deben ser copiados a la carpeta Functions de NeoBook.

Captura:

Descarga del ejemplo:

  ejcopiarultimosarchs.rar (1,4 MiB, 2.053 hits)

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?.

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.041 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)