0

Win 7 Volume Control

Buenas hoy voy a compartir con ustedes una solución a un tema que lei en el foro oficial. Chromebandit informa que las funciones para manipular el volumen no funcionan correctamente windows 7.

Se me ocurrió probar con AutoIt y funcionó. Entonces gracias a RACAutoIt3X podemos hacerlo en neobook. Para esto utilizamos la función RAC_SendKeys con {VOLUME_MUTE}, {VOLUME_UP} o {VOLUME_DOWN} según necesitemos.

Para facilitar las cosas he creado 4 funciones de neobook:

RacAutoItVol0 > Pone el volumen en 0

RacAutoItVol100 > Pone el volumen en 100

RacAutoItVolUp > Aumenta el volumen según el parámetro pasado

RacAutoItVolDown > Baja el volumen según el parámetro pasado

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

Captura

Descarga

  ejwin7vol.rar (1,3 MiB, 2.277 hits)

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

NOTA: El ej puede modificarse para optimizarlo.

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

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.870 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.097 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

13

Ejemplo paint con flash y neobook

Hace algunos días recibí un mail en el cual me preguntaban si se podía hacer una aplicación similar al paint de windows con neobook. De poder se puede, esto depende de nuestra imaginación, destreza y bolsillo 😆 .

Sin dudas el mejor plugin para este caso es rtImageFX (RonMarie). Dado que no todos pueden o quieren comprar dicho plugin podemos programarlo con flash y luego incluirla en nuestra aplicación.

Toda la interfaz de dibujo esta realizada en flash, existe un solo botón en neobook que guarda la imagen en formato jpg donde el usuario lo desee.
No voy a explicar el código de flash, pues no es mi especialización pero basta con decirles que programé el ejemplo leyendo la ayuda.

Cabe destacar que este es un ejemplo básico se pueden agregar mas colores, herramientas, etc. ustedes pueden modificarlo libremente para adaptarlo a sus necesidades.

Screenshots del ejemplo

Interfaz del programa

Imagen luego de guardar

Plugins utilizados:

tmCanvas (TechMedia Software)
hpwImage (H.P.Wickern)

Descarga (incluye los códigos fuente)

  ejemplo_paint.rar (1,9 MiB, 3.619 hits)

NOTA: El .fla del ejemplo esta en formato Flash CS3.

.Fla Versión Flash MX 2004 (decompilada): ➡ http://www.neobookeros.com.ar/wp-content/files/paint_flash_mx2004.fla

.Fla Versión Flash 8 (guardada desde original): ➡ http://www.neobookeros.com.ar/wp-content/files/paint_flash_8.fla

7

La variable [CommandLine]

Hola, hoy voy a comentar un poco sobre la variable [CommandLine], ésta nos permite obtener los parámetros que fueron pasados a nuestra aplicación para poder utilizarlos luego.

Por ejemplo podríamos hacer una aplicación que al ser llamada desde la linea de comandos mi_calc.exe 2 6 muestre la suma de los parámetros, en este caso el primer parámetro (nuestro) seria el 2 y el segundo parámetro (nuestro) seria el 6 dando como resultado 8.

¿Porque aclaro nuestro parámetro entre paréntesis? Porque siempre el primer parámetro para nuestra aplicación será el nombre del ejecutable (con ruta).

En el ejemplo anterior la lista seria la siguiente:

Parámetro 1: c:\mi_calc.exe

Parámetro 2: 2

Parámetro 3:6

Como hago para obtener la lista de parámetros en neobook?

StrParse "[CommandLine]" "[#13]" "[Parametro]" "[Parametro_cantidad]"
Loop "1" "[Parametro_cantidad]" "[i]"
	AlertBox "Ejemplo Commandline" "El parametro [i] es [Parametro[i]]"
EndLoop

Screenshot del ejemplo:

Descarga:

  ejemplo_commandline.rar (835,5 KiB, 2.326 hits)

NOTA: Para ver el ejemplo ejecuten el archivo ejemplo_commandline_lanzador.exe

Espero les sirva.

3

1 Botón Varias Acciones

Hoy después de mucho tiempo inactivo voy a postear una entrada que si bien la tenia pensada no me daba tiempo hacerla.

En la entrada anterior (Usando Botones Invisibles) mostraba como ejecutar acciones de distintos botones con la misma tecla de acceso directo. Pues bien esto es algo parecido, pero utilizando 1 solo botón.

Para esto utilizo la variable [FocusedObject] que contiene el nombre del objeto que tiene foco en ese momento, luego en las acciones del botón con un If logro realizar las acciones que yo quiera para ese objeto al presionar el acceso directo a ese botón (que yo lo puse oculto).

Ejemplo código acciones del botón:

if "[accion]" "=" "ListBox1"
   ListBoxGetItem "[FocusedObject]" "[ListBox1]" "[texto]"
   AlertBox "Prueba" "[texto]"
endif

if "[accion]" "=" "ListBox2"
   ListBoxGetItem "[FocusedObject]" "[ListBox2]" "[texto]"
   MessageBox "Prueba" "[texto]" "Aceptar" "[resultado]"
endif

if "[accion]" "=" "TextEntry1"
   StickyNote "-1" "-1" "[TextEntry1]" "0"
endif

Miren el ejemplo y cualquier cosa preguntan.

Saludos

Screenshot del ejemplo

Prueba el ejemplo: Da foco a los distintos objetos y presiona Enter para ver que pasa.

Descargar:

  ejemplo_boton_varias_acciones.rar (656,8 KiB, 2.036 hits)

P/D: Tambien dejo disponible la descarga del ejemplo (con las correcciones) enviado por apoleo para la entrada anterior. Recomendable de ver.

  formularios.rar (2,9 KiB, 1.779 hits)

0

Ejemplo acople de ventanas

Esta entrada sería la secuela de la anterior 😛 . Si así es porque es muy parecido (99% igual). Con la entrada anterior podías mover la ventana desde una zona definida por nosotros, con este vemos como podemos “acoplar las ventanas (customwindow)” y moverlas todas al mover la principal.

Que mejor inspiración que el programa winamp que lo hace perfectamente. Explicación?…pues si entendiste el ejemplo anterior lo entenderás perfectamente a este.

Screenshot del ejemplo:

Plugins utilizados:

Descarga del ejemplo:

  Ejemplo_acople_ventanas.rar (1,5 MiB, 2.641 hits)

18

Ejemplo Mover Ventana (forma personalizada)

Neobook nos permite darle una forma personalizada (ventana) a nuestras aplicaciones, pero que hacemos si queremos hacer que se mueva haciendo click en determinado lugar?. Pues bien eso es lo que intento solucionar con este ejemplo.

Plugins utilizados:

Si queremos que el area para mover la ventana sea una imagen utilizaremos un objeto polygon, al cual le pondremos las siguientes acciones:

Mouse Enter (mouse entra sobre el objeto):

tmDragDropCreate
Setvar "[tmDragCursor]" "0"
Setvar "[tmDragPosition]" "2"
Setvar "[tmDragEnableEvents]" "1"
SetVar "[tmLBDAction]" "npEjecutarAccion [#34][#91]acc_b[#93][#34]"
SetVar "[tmLBUAction]" "npEjecutarAccion [#34][#91]acc_a[#93][#34]"

Con esto logramos que el plugin tmDragDropObj realice unas acciones al presionar el boton izquierdo del mouse (BotonIzqBajo) y cuando lo soltemos (BotonIzqArriba) (ambos eventos no nativos de neobook) completando así el click, pero éste no realiza acción alguna.

A su vez cada acción llamara a la función npEjecutarAccion del plugin NeoDouble, la cual realiza una acción de neobook cargada desde una variable (entre otras opciones de carga). En este caso, llamo a las acciones desde dos variables llamadas [acc_b] (acciones btizqbajo) y [acc_a] (acciones btizqarriba) que a su vez están dentro de unos texentrys.

Mouse Exit (mouse sale del objeto):

tmDragDropDestroy

Con esto eliminamos las acciones del plugin.

Contenido de la variable [acc_b] (en un textentry):

GetMousePos "[x_pos]" "[y_pos]"
Setvar "[x_m]" "[x_pos]"
Setvar "[y_m]" "[y_pos]"
TimerStart "TMueve" "1"

Con estas líneas obtenemos la posición del mouse al bajar el boton izq, y luego le da start al timer TMueve con intervalo de 1 milisegundo.

Contenido de la variable [acc_a] (en un textentry):

TimerStop "TMueve"

Esto solo para el timer.

Contenido del timer TMueve:

GetMousePos "[x_pos]" "[y_pos]"
Setvar "[x_pos_p]" "[x_pos]+[WindowLeft]"
Setvar "[y_pos_p]" "[y_pos]+[WindowTop]"
Setvar "[WindowLeft]" "[x_pos_p]-[x_m]"
Setvar "[WindowTop]" "[y_pos_P]-[y_m]"

Esto es nada más y nada menos lo que capta los datos del mouse (cada 1 milisegundo) y realiza el movimiento de la ventana.

Bueno, espero que se entienda 😛

Descarga del ejemplo:

  ejemplo_mover_ventana.rar (1,2 MiB, 1.958 hits)