11

NeoPHP mi intento de plugin

NeoPHP es un plugin que te permitirá ejecutar código php en tus publicaciones de neobook. Si bien yo utilizaba php en mis proyectos, la idea de un plugin nace cuando leí una pregunta en el foro oficial de neobook http://www.neosoftware.com/forum/viewtopic.php?t=18022 en la cual se quiere transformar una fecha (17/08/2010) en (Seventeenth August Two Thousand Ten), inmediatamente pensé en php (solución en el pub de ejemplo).

NeoPHP v1.0 trabaja con Php v4.4.4 las funciones mysql funcionan con Mysql v5.0.24a.

NeoPHP v1.0 incluye las siguientes librerías:

Turck MMCache
bcmath
calendarcom
ctype
ftp
GD
mysql
odbc
pcre
win32std
xml
zlib

——————————————————————————————————–

Actualizacion: NeoPHP v1.1

– Ahora NeoPHP trabaja con PHP v5.3.1.

– Las extensiones pueden ser agregadas manualmente.

Debido a que NeoPHP utiliza el compilador phc-win para que funcione deberás distribuir los siguientes archivos con tu aplicación.

  • neophp.exe
  • php5ts.dll
  • php_win32std.dll
  • php_bcompiler.dll
  • php-embed.ini

Usuarios de XP necesitan tener instalado Microsoft Visual C++ 2008 Redistributable Package (x86) (incluido en el .rar del plugin).

Como agrego una extensión para utilizarla con NeoPHP?

Agrega una linea al archivo php-embed.ini con lo siguiente extension=nombre_de_la_extension.dll

Ej si quiero agregar la librería GD el archivo quedaría así:

[PHP]
extension_dir='./'
extension=php_win32std.dll
extension=php_bcompiler.dll

;Pon tus extensiones abajo ejemplo: extension=php_curl.dll
;Put extensions down here example: extension=php_curl.dll
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV

extension=php_gd2.dll

Luego deberás distribuir el dll de las extensiones junto a los archivos necesarios.

Donde consigo extensiones para php 5.3.1?

Puedes encontrarlas en la carpeta ext de la distribución 5.3.1 disponible en:

http://windows.php.net/downloads/releases/archives/php-5.3.1-Win32-VC9-x86.zip

——————————————————————————————————–

Como utilizo NeoPHP?

En las acciones de entrada de la publicación escribe:

SetVar "[NeoPHP_password]" "neobookeros.com.ar"

Simplemente escribe tu código en una variable.

Luego:

NeoPHPEjecutar [PubDir] [codigo]

NeoPHPEjecutar es la única función del plugin y requiere 2 parametros.

El primero es el directorio en el cual se encuentra neophp.exe

El segundo es la variable que contiene el código.

El resultado del código se guardará en la variable [NeoPHPResultado]. Los errores del plugin se guardarán en [NeoPHPError]. Los errores de código se mostraran en [NeoPHPResultado] y son manejados por el usuario en su código.

Como le paso una variable a NeoPHP?

Se pone $NeoPhp antes del nombre de la variable ej.: [$NeoPhpTextEntry1].

<?php
echo '[$NeoPhpTextEntry1]';
?>

Captura

Descarga v1.0

  neophp10.rar (1,3 MiB, 2.216 hits)

Descarga v1.1

  neophp1.1.rar (4,7 MiB, 5.315 hits)

Archivo Pub actualizado con ejemplo de XML y HTML.

Licencia

NeoPHP se distribuye con licencia Beerware 😛

NeoPHP es un plugin que te permitirá ejecutar código php en tus publicaciones de neobook. Si bien yo utilizaba php en mis proyectos, la idea de un plugin nace cuando leí una pregunta en el foro oficial de neobook http://www.neosoftware.com/forum/viewtopic.php?t=18022 en la cual se quiere transformar una fecha (17/08/2010) en (Seventeenth August Two Thousand Ten), inmediatamente pensé en php (solución en el pub de ejemplo).

NeoPHP trabaja con Php v4.4.4 las funciones mysql funcionan con Mysql v5.0.24a.

NeoPHP incluye las siguientes librerías:

Turck MMCache
bcmath
calendarcom
ctype
ftp
GD
mysql
odbc
pcre
win32std
xml
zlib

Como utilizo NeoPHP?

En las acciones de entrada de la publicación escribe:

SetVar "[NeoPHP_password]" "neobookeros.com.ar"

Simplemente escribe tu código en una variable.

Luego:

NeoPHPEjecutar [PubDir] [codigo]

NeoPHPEjecutar es la única función del plugin y requiere 2 parametros.

El primero es el directorio en el cual se encuentra neophp.exe

El segundo es la variable que contiene el código.

El resultado del código se guardará en la variable [NeoPHPResultado]. Los errores del plugin se guardarán en [NeoPHPError]. Los errores de código se mostraran en [NeoPHPResultado] y son manejados por el usuario en su código.

Como le paso una variable a NeoPHP?

Se pone $NeoPhp antes del nombre de la variable ej.: [$NeoPhpTextEntry1].

<?php
echo '[$NeoPhpTextEntry1]';
?>

Captura

Descarga

  neophp10.rar (1,3 MiB, 2.216 hits)

Licencia

NeoPHP se distribuye con licencia Beerware 😛

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.

6

Instale plugins fácil y rápido con NeoPlugin Installer

Seguramente te pasó que formateaste la pc y tuviste que instalar uno por uno tus “cientos” de plugins. Tedioso ¿no? Ahora NeoPlugin Installer (NPI en adelante) te ayudara a la hora de instalar tus plugins.

Sólo deberás seleccionar la carpeta donde tienes tus plugins, seleccionar cuales quieres instalar y NPI hará el resto. Lo mismo a la hora de desinstalar, seleccionar y NPI se encargará.

Características de NPI:

Multilenguaje (Inglés y Español).
Interfaz totalmente intuitiva.
Permite Instalar y Desinstalar plugins.
Instala cientos de plugins en cuestión de minutos.
Desinstala aún más rápido.

Capturas


Plugins seleccionados para instalar


Listado de plugins para desinstalar

Descarga

  neonpugininstaller.rar (3,7 MiB, 5.471 hits)

NOTA/NOTE:
-Por favor al instalar plugins selecciona desde arriba hacia abajo, ésto lo hará mas rápido.
Neobook debe estar cerrado.
-To install plugins please select from top to bottom, this will make faster.
-Neobook must be closed.

Historial de Actualizaciones:

update Actualización 1/03/10 [Versión 1.0.0.1]:

  • – Añadida la posibilidad de guardar y restaurar datos de plugins registrados
  • – Corrección de pequeños detalles
  • – Link de descarga actualizado!

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.052 hits)

12

GPNeo: Plugins gratuitos para Neobook

gpneo

Hace un par de días Mariano Chiaverano (DAMANEO) me mando un mail el cual transcribo a continuación:

Me comunico con ustedes para hacerles llegar una Website que he creado recientemente y que intentaré completar a la brevedad. La Website intentará reunir todos los plugins gratuitos que existen para Neobook, desde los más antiguos a los más nuevos. En todos los casos se respetará el autor de los mismos, pero los archivos (en zip y/o cab) estarán en el sitio GPNeo disponibles para todo aquel que quiera hacerse de ellos. Igualmente existiran casos, como los plugins de HPW, los cuales no incluiré en la website debido a que todos son gratuitos y todos estan actualmente disponibles en la website oficial de HPW. Solo se hara mensión y se incluirá el enlace de ellos en GPNeo.
Estoy trabajando para traducir todas las descripciones al inglés (En breve).

Personalmente me parece una gran contribución a la comunidad, pues los que nos iniciamos recientemente en el mundo de neobook no pudimos ver algunos plugins.

Con esta web podremos tener (si contribuimos todos) la base de plugins gratuitos a nuestro alcance.

Desde neobookeros.com.ar el mejor de los deseos para GPNeo.

Link: http://gpneo.eshost.com.ar/

8

NeoIndent

[raw]

[/raw]

neoindent_screen1

Buenas…hoy les voy a presentar una pequeña utilidad para todos los neobookeros. NeoIndent surge de la necesidad de ordenar el código que escribo en los objetos de neobook. Hay veces que tengo que insertar bloques de código dentro otros bloques, lo cual desordena todo el código y lo hace poco legible. Ahí es donde NeoIndent interviene y dejará tu código ordenado y legible. Pues puedes escribir un bloque de código  o abrir una publicación y realizar el indent a todas las acciones de todos los objetos Veamos un ejemplo practico: Código que escribimos:

SetVar "[accion]" "MCICommand [#34]STATUS [tema] mode[#34]"
npEjecutarAccion "[accion]"
if "[MCIResponse]" "&lt;&gt;" "playing"
if "[random]" "=" "3"
setvar "[random]" "1"
else
if "[random]" "&lt;" "3"
setvar "[random]" "[random]+1"
endif
Endif
npRutaCortaArchivo "[tema[random]]"
setvar "[tema]" "[npResultadoAccion]"
SetVar "[accion]" "MCICommand [#34]play [tema][#34]"
npEjecutarAccion "[accion]"
Endif

NeoIndent los transforma a:

SetVar "[accion]" "MCICommand [#34]STATUS [tema] mode[#34]"
npEjecutarAccion "[accion]"
if "[MCIResponse]" "&lt;&gt;" "playing"
    if "[random]" "=" "3"
        setvar "[random]" "1"
    else
        if "[random]" "&lt;" "3"
            setvar "[random]" "[random]+1"
        endif
    Endif
    npRutaCortaArchivo "[tema[random]]"
    setvar "[tema]" "[npResultadoAccion]"
    SetVar "[accion]" "MCICommand [#34]play [tema][#34]"
    npEjecutarAccion "[accion]"
Endif

Descargar:

  NeoIndent.rar (2,4 MiB, 4.890 hits)

Por bugs y/o sugerencias [email protected] Historial de Actualizaciones: update Actualización 19/06/09 [Versión 1.0.0.1]: -Al ingresar un código extenso manualmente al realizar el indent no mostraba información al usuario de que se estaba analizando el texto. Corregido. Gracias a Quili por comunicar. -Al realizar indent a archivos y éste en su codigo tenía acciones que contenian el caracter “| ” al escribir en el archivo se escribia como una linea nueva. Corregido. Gracias a Quili por comunicar. Link de descarga actualizado! update Actualización 20/12/10 [Versión 1.0.0.4]: -Ahora se puede seleccionar el idioma (Español-Ingles). -Agregada opción de redimensionar la aplicación. El programa recuerda el tamaño y posición de la ventana. -Ahora la comprobación de actualizaciones es opcional (ver botón opciones). Link de descarga actualizado!

19

Música de fondo en publicaciones

Hola hoy voy a compartir con ustedes un ejemplo (contestando a Jackie en su comentario) de como reproducir música de fondo en sus publicaciones y poder navegar entre las paginas sin que la música se pare.

Las opciones para solucionar esto eran:

Objeto MediaPlayer (al cambiar de página se para)
Objeto Flash (al cambiar de página se vuelve a ejecutar)
Comandos MCI (ésta es la solución)

Pues bien ya antes había tenido un pequeño encuentro con los comandos MCI en la entrada Lista de reproducción y más… la cual recomiendo que le den un vistazo antes, pero en este caso era distinto, pues yo debía investigar como saber si ya se esta reproduciendo un archivo antes de reproducir otro.

Luego de mucho google 😀 di con la solución. Pero vamos por pasos.

Primero le diremos a nuestra publicación (en acciones al cargar la aplicación ) cuales y cuantos archivos queremos reproducir y le diremos que todavía no estamos reproduciendo.

setvar "[temas]" "3"
setvar "[tema1]" "[PubDir]tema1.mp3"
setvar "[tema2]" "[PubDir]tema2.mp3"
setvar "[tema3]" "[PubDir]tema3.mp3"
setvar "[play]" "NO"

Luego en las acciones de la primera página (o la que necesitemos que se inicie la reproducción) pondremos el siguiente código.

If "[play]" "=" "NO"
    :ran
    Random "[temas]" "[random]"
    if "[random]" "=" "0"
        GotoLine "ran"
    endif
    npRutaCortaArchivo "[tema[random]]"
    setvar "[tema]" "[npResultadoAccion]"
    SetVar "[accion]" "MCICommand [#34]play [tema][#34]"
    npEjecutarAccion "[accion]"
    SetVar "[play]" "SI"
EndIf
TimerStart "Timer1" "1000"

Lo que hace el código anterior es generar un numero aleatorio para empezar a reproducir ese archivo, esto para evitar siempre reproduzca el mismo sonido siempre. Todo ésto lo hace solamente una vez al entrar a la página pues si navegamos a otra y volvemos a ésta empezaría a reproducir otro archivo haciendo que se mezclen los sonidos.

En las acciones del Timer

SetVar "[accion]" "MCICommand [#34]STATUS [tema] mode[#34]"
npEjecutarAccion "[accion]"
if "[MCIResponse]" "<>" "playing"
    if "[random]" "=" "3"
        setvar "[random]" "1"
    else
        if "[random]" "<" "3"
            setvar "[random]" "[random]+1"
        endif
    Endif
    npRutaCortaArchivo "[tema[random]]"
    setvar "[tema]" "[npResultadoAccion]"
    SetVar "[accion]" "MCICommand [#34]play [tema][#34]"
    npEjecutarAccion "[accion]"
Endif

El código anterior obtiene el estado del dispositivo MCI y si éste no esta reproduciendo pasa al siguiente tema.

Espero que sea claro, pues me cuesta explicarlo en detalle, cualquier cosa comenten y responderé su consulta.

Plugins Utilizados:

  • NeoDouble (DEC)

Screenshot del ejemplo:

ejemplo_musica_fondo

Descarga:

  ejemplo_musica_fondo.rar (6,9 MiB, 3.859 hits)


Saludos

7

Evitar que se cierre la aplicación desde el botón cerrar de la barra de títulos

Buenas, mediante un mail me consultaron como se pude hacer para hacer una pregunta al estilo “Realmente desea Salir?”, esto es fácil si usamos un boton personalizado con la función Exit, pero esta persona se refería precisamente al botón cerrar de la barra de titulo (X).

Pues bien, para esto necesitamos de la variable [ShutdownSource]. Ésta variable contiene la causa del cierre de nuestra aplicación.

Puede contener:

NeoBook > La petición se generó por la acción Exit de neobook.

Windows > La petición se generó por Windows.

CloseButton > La petición se generó a través del botón Cerrar de la aplicación (alt+f4, etc).

Cambien necesitaremos de la variable [ShutdownStatus] para cancelar el cierre mediante la siguiente acción:

SetVar "[ShutdownStatus]" "False"

Sabiendo, finalmente procedemos a programar lo que evitara el cierre, para esto vamos a Libro>Propiedades>Acciones>Cierre y luego escribimos:

If "[ShutdownSource]" "=" "CloseButton"
	MessageBox "Salir" "Realmente desea salir?" "Si|No" "[op_salir]"
	If "[op_salir]" "=" "2"
		SetVar "[ShutdownStatus]" "False"
	Endif
EndIf

El código anterior comprueba si la petición de cierre fue del botón cerrar, si fue así pregunta si desea salir y guarda la opción elegida en la variable [op_salir], si ésta es igual a 2 (Respuesta No) cancelamos el cierre como vimos arriba, eso es todo, pues si se elige la Respuesta Si se guarda 1 en [op_salir] con lo que no hacemos nada pues la aplicación se cerrará cumpliendo su cometido el botón cerrar.
Screenshot del ejemplo:

ejemplo_salir

Descarga:

  ejemplo_salir.rar (651,1 KiB, 2.092 hits)

Nota: El ejemplo muestra que ocasiona la petición de cierre y tal cual lo explica el ejemplo muestra como evitar que se cierre si la petición es del botón cerrar. Prueben el ejemplo cerrando desde el botón salir, del botón cerrar (x) y haciendo click derecho>cerrar de la barra de tareas.


Eso es todo espero que les sea útil.

BuNKeR