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

bunker

18 Comments

  1. Muy bueno el codigo yo le he hecho una pequeña modificación porque cuando lo compilaba no me movia la ventana en cambio desde el debugger de Neobook si funcionaba, suelo pego el codigo.

  2. No, a mi no se me mueve ni en Xp ni en Vista, no se el porque… he tenido q poner un boton invisible y que la ventana se mueve y cuando vuelven a pulsar el boton suelta la pantalla en ese punto, pero la solución no me gusta mucho.

    En cambio he probado el ejemplo que hay aqui compilado y si que funciona… osea que ahora mismo estoy hecho un lio… una solución please 🙄

  3. Efectivamente no anda en Vista y tampoco en Windows 7.

    Creo que son los plugins que están programados para versiones anteriores a estos.

    Comprobaste que estén instalados los plugins necesarios?

    Saludos

  4. Quizás no pusiste el btextra que es para que se incluya el plugin NeoDouble.

    Podrías verificar eso? Para comprobar que este método si funciona para XP.

    Saludos

  5. Hi there,
    I’m realy interesting about this. But the plugins link does not work for me.
    Can you fix it? and is it free plugins?

    Thank You :mrgreen:

  6. Acabo de probar y trabaja normal en windows 7, lo que si, podrian poner los plugins mensionados para descarga porque no encuentro donde descargar el plugin tmDragDropObj, el otro de casualidad ya lo tenia, pero si pueden poner un enlace de descarga directa de cada plugin seria mucho mejor para los que no lo tengan.

    Saludos ^^

  7. Ah por sierto, trabaja el .exe proporcionado en el ejemplo, ahora si he de compilar primero y probar si sigue funcionando, eso no lo he hecho porque me falta instalar uno de los 2 plugins, asi que talvez no funcione adecuadamente una version que compile sin tener instalados todos los plugins mensionados

    Salu2…

  8. Pos si, aunque me referia a incluirlos en el mensaje inicial, talvez editandolos, porque cuando estan en los mensajes de usuarios es facil que pasen desapercibidos, como a mi, que ni cuenta me di, usualmente no se suelen leer todos los mensajes del hilo a menos que se este buscando algo que se sabe este especificamente ahi.

    Pero igual, gracias 😛

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *