Cursor Pointer
Previous topic  First topic  Next topic


Mediante Marinas-GUI es posible cambiar dinamicamente el dibujo del cursor del mouse.

Marinas-GUI maneja una serie de cursores predefinido:




Estos cursores se pueden usar a nivel Aplicacion, Ventana o Control. Es decir, si lo aplicamos a nivel Control, solo se mostrará el nuevo cursor cuando el puntero del mouse se encuentre posicionado o se deslice por encima del control.

Si en cambio lo aplicamos a nivel Ventana, estará disponible en toda el área de la ventana en la cual lo aplicamos pero no en otras ventanas de nuestra aplicación. Para esto último es necesario aplicarlo a nivel aplicación.

A nivel Ventana o Control se lo aplica mediante la propiedad "cursor"

EJ:

mg_Set( "Window" , "cursor" , Qt_WaitCursor )

or

mg_Set( "Window" , "button_1" , "cursor" , Qt_WaitCursor )


Para obtener el valor del cursor actual usamos:

nCursor := mg_Get( "Window" , "cursor" )

or

nCursor := mg_Get( "Window" , "button_1" , "cursor" )


Para volver al cursor default del control o ventana (Qt_ArrowCursor) se usa el método "unSetCursor"

Ej:

mg_Do( "Window" , "unSetCursor" )

or

mg_Do( "Window" , "button_1" , "unSetCursor" )


o tambien se podría lograr el mismo resultado aplicando nuevamente el cursor default:

mg_Set( "Window" , "cursor" , Qt_ArrowCursor )

or

mg_Set( "Window" , "button_1" , "cursor" , Qt_ArrowCursor )


Si en cambio queremos aplicar el cursor a toda la aplicación deberemos utilizar las siguientes funciones:

mg_SetApplicationCursor( Qt_WaitCursor )

and

mg_UnSetApplicationCursor()


Tambien existe la siguiente funcion para obtener el cursor actual:

nCursor := mg_GetApplicationCursor()


Un ejemplo real de uso sería cuando se necesita realizar un proceso que demora algún tiempo y queremos que el usuario vea un cursor que indica que el programa esta trabajando y que debe esperar.

A continuación se muestra un ejemplo que ejecuta un proceso "pesado", y durante la ejecución del mismo se cambia algunas veces el cursor:

Nota: en el siguiente ejemplo es muy útil la propiedad "ENABLED" de la ventana utilizada en el proceso my_HeavyProcessForWindow() y del mismo modo, las dos funciones que simulan el mismo comportamiento pero a nivel aplicacion en el proceso my_HeavyProcessForApplication():

mg_DisableAllActivatedWindow()

and

mg_EnableAllActivatedWindow()



File: d_cursor.prg

#include "marinas-gui.ch"

FUNCTION Main()

   CREATE WINDOW Sample
      ROW 0
      COL 0
      WIDTH 400
      HEIGHT 200
      CAPTION "Marinas-GUI Sample"
      MAIN .T.

      CREATE LABEL Label1
         ROW 30
         COL 140
         WIDTH 200
         VALUE "Basic Cursor Sample"
      END LABEL

      CREATE BUTTON Button1
         ROW 80
         COL 100
         WIDTH 200
         CAPTION "Cursor by Window or Control"
         ONCLICK my_HeavyProcessForWindow()
      END BUTTON

      CREATE BUTTON Button2
         ROW 120
         COL 100
         WIDTH 200
         CAPTION "Cursor by Application"
         ONCLICK my_HeavyProcessForApplication()
      END BUTTON

   END WINDOW

   mg_Do( "Sample" , "center" )
   mg_Do( "Sample" , "activate" )

RETURN .T.

FUNCTION my_HeavyProcessForWindow()
   LOCAL nCursor
   mg_Set( "Sample" , "enabled" , .F. )
   mg_Set( "Sample" , "cursor" , Qt_WaitCursor )
   nCursor := mg_Get( "Sample" , "cursor" )
   mg_Wait(3)
   mg_Set( "Sample" , "cursor" , Qt_ForbiddenCursor )
   mg_Wait(3)
   mg_Set( "Sample" , "cursor" , nCursor )
   mg_Wait(3)
   mg_Do( "Sample" , "unSetCursor" )
   mg_Set( "Sample" , "enabled" , .T. )
RETURN NIL

FUNCTION my_HeavyProcessForApplication()
   LOCAL nCursor
   mg_DisableAllActivatedWindow()
   mg_SetApplicationCursor( Qt_WaitCursor )
   nCursor := mg_GetApplicationCursor()
   mg_Wait(3)
   mg_SetApplicationCursor( Qt_ForbiddenCursor )
   mg_Wait(3)
   mg_SetApplicationCursor( nCursor )
   mg_Wait(3)
   mg_UnSetApplicationCursor()
   mg_EnableAllActivatedWindow()
RETURN NIL



Marinas-GUI Version 03.06 and
Marinas-IDE Version 05.06 and
LEX Files Version 02.06


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
last update: April 27
2017
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------




A Harbour/QT framework to make multiplatform programs

(©) Copyright 2009-2017 by Fernando Santolin (aka CarozoDeQuilmes)
CarozoDeQuilmes@gmail.com

2009-2017 Beta tester and full English translator: Bruno Luciani
Bruno.Luciani@gmail.com

2014-2015 Final English corrector: David Worboys
DavidWorboys@hotmail.com

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

www.marinas-gui.org


www.marinas-gui.org  

Previous topic  First topic  Next topic