Página 1 de 1

TCursor como usarlo

Publicado: Sab Jul 15, 2023 10:16 pm
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.

Re: TCursor como usarlo

Publicado: Sab Jul 15, 2023 10:36 pm
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

Re: TCursor como usarlo

Publicado: Dom Jul 16, 2023 12:38 pm
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 )

Re: TCursor como usarlo

Publicado: Dom Jul 16, 2023 12:40 pm
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

Re: TCursor como usarlo

Publicado: Mar Jul 18, 2023 5:59 pm
por carloskds
copiado..., gracias