In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

TCursor como usarlo

Foro público de Xailer en español
Responder
carloskds
Mensajes: 18
Registrado: Mié Abr 05, 2023 2:53 am

TCursor como usarlo

Mensaje por carloskds »

Hola, deseo durante un proceso cambiar el cursor del raton
con un archivo .cur, para tal efecto he agregado dicho archivo al gestor de recursos, pero ahora no cuentro como usarlo.
de momento uso los tipicos wait y arrow propios, pero deseo usar uno propio. he buscado en los ejemplos y no encontre nada relativo a esto

me pueden indicar como hacerlo

Código: Seleccionar todo

   ::oWaitCursor := TCursor():LoadFromResource("waitTest") //en el gestor de recuros asi esta nombrado

   Application:lBusy := .t.
   //proceso que lleva su tiempo
   Application:lBusy := .f.
carloskds
Mensajes: 18
Registrado: Mié Abr 05, 2023 2:53 am

Re: TCursor como usarlo

Mensaje por carloskds »

de momento he solucionado con esta funcion, usando directamente el archivo.

Código: Seleccionar todo

procedure ShowCursor(cFile)
   if hb_IsString( cFile ) .and. File( cFile )
      ShowCursorApi(cFile)
   endif
return

#pragma BEGINDUMP

#include "windows.h"
#include "xailer.h"

HB_FUNC( SHOWCURSORAPI )  //  cCursorName or nCursorId
{
   hb_retl( ( BOOL ) SetCursor( LoadCursorFromFileA( hb_parc(1) ) ) );
}

#pragma ENDDUMP
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: TCursor como usarlo

Mensaje por jfgimenez »

Carlos,

lo que estás haciendo está correcto. El problema es que windows envía continuamente mensajes WM_SETCURSOR a todos los controles para que seleccionen qué cursor hay que mostrar. Es decir, que aunque cambies el cursor con SetCursor(), en cuanto se recibe un mensaje WM_SETCURSOR se vuelve a cambiar, y ni siquiera llegas a ver tu cursor.

Por otro lado, Application:lBusy := .T. funciona porque Xailer se encarga de responder con CursorWait() en todos los controles cuando se recibe un mensaje WM_SETCURSOR. En tu caso, lo que puedes hacer es sobrecargar el método WMSetCursor de TControl y devolver ahí el cursor que tú quieras. P.ej.:

Código: Seleccionar todo

CLASS TControl FROM XControl
   METHOD WMSetCursor( nWParam, nLParam )
ENDCLASS

METHOD WMSetCursor( nWParam, nLParam ) CLASS TControl
   IF nWParam == ::Handle .AND. Application:lBusy
      ShowCursorApi(...)
      RETURN .T.
   ENDIF
RETURN ::Super:WMSetCursor( nWParam, nLParam )
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: TCursor como usarlo

Mensaje por jfgimenez »

Por cierto, tienes más información sobre cómo sobrecargar las clases de Xailer aquí:
https://info.xailer.com/es/?p=21
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
carloskds
Mensajes: 18
Registrado: Mié Abr 05, 2023 2:53 am

Re: TCursor como usarlo

Mensaje por carloskds »

copiado..., gracias
Responder