Page 1 of 1

Como cargar cursor desde archivo ( RESUELTO )

PostPosted: Mon Mar 14, 2022 3:02 am
by cuatecatl82
Saludos a toda la comunidad:

He estado fuera de actividades por un tiempo pero no dejo de hacer practicas con pequeños proyectos, y por supuesto revisando las novedades en el foro.

Esta vez les solicito su ayuda ya que estoy intentando cambiar recursos en un dialogo, en especial el cursor del dialogo pero no doy como hacerlo ya que tengo lo siguiente:

Code: Select all  Expand view

Function Prueba()

local oDlg, oCur, oBtn, cFile, nHCur

define cursor oCur resource "00"
define dialog oDlg title "Probando Cursor"
@ 10, 10 BTNBMP oBtn PROMPT "&Cursor"  RESOURCE "BTN_CUR"   SIZE 32, 32 Pixel OF oDlg 2007

oDlg:oCursor:= oCur
oBtn:bAction:= { ||  cFile:= cGetFile( "Cursor (*.cur) | *.cur", "Seleccionar Recurso", 0, HB_CurDrive() + ":\" + CurDir(), .F., .T. ), nHCur:= loadcursor(, cFile ), oCur:hCursor:= nHCur, oDlg:oCursor:= oCur }

activate dialog oDlg center

return nil



Al arrancar el ejemplo el dialogo toma el cursor desde el archivo recurso dentro del .exe, pero al buscar un cursor como archivo externo, y cargarlo el Handle siempre regresa el valor 0, por lo que intuyo que loadicon() no lee desde archivos externos.

Hay alguna función o forma de cambiar los cursores desde archivos .cur externos, no vale que esten dentro de un archivo res, ya que el usuario elige a voluntad. trate de hacer una funcion loadcursorfromfile( cfile ) sin exito.

saludos y gracias por las ideas que puedan aportar la solucion. :lol: :D

Re: Como cargar cursor desde archivo

PostPosted: Mon Mar 14, 2022 10:06 am
by Antonio Linares
Estimado Victor,

la función a usar sería ReadCursor() pero parece que aún no está implementada :-)

Basándonos en el código en cursors.c habria que leer el fichero .cur, localizar los grupos de bytes como hacemos en cursors.c y crearlo del mismo modo que se hace en cursors.c

Re: Como cargar cursor desde archivo

PostPosted: Mon Mar 14, 2022 10:59 am
by Antonio Linares
https://docs.microsoft.com/en-us/window ... rfromfilea

Enviado desde mi SM-M325FV mediante Tapatalk

Re: Como cargar cursor desde archivo

PostPosted: Mon Mar 14, 2022 1:41 pm
by cuatecatl82
Maestro Antonio Linares:

En efecto, ya había leído sobre el tema pero no di con el resultado, el Handle siempre retorno 0, intente también con gdi y tampoco, pensé que la función loadcursor() soportaba leer cursores desde archivo.

Re: Como cargar cursor desde archivo

PostPosted: Tue Mar 15, 2022 5:27 am
by cuatecatl82
Lo he logrado de esta forma, investigando y haciendo pruebas:

Code: Select all  Expand view
Local hCursor:=  LoadCursorFromFile( "Z:\FWH\cursors\Clock,cur" )
             
MSGStop(hCursor)  // Handle
SETCURSOR( hCursor )

DLL32 FUNCTION LoadCursorFromFile( lpFileName AS LPSTR ) AS LONG PASCAL FROM "LoadCursorFromFileA" LIB "user32.dll"


Asi he podido cambiar el icono, ya sea en .cur o en formato animado .ani, funcional !!!

Ojala sirva a alguien y que mejor, que sea incorporado a versiones futuras de Fivewin para que sea más fácil interactuar con cursores..

Saludos y abrazos a distancia a toda la comujnidad..

Re: Como cargar cursor desde archivo

PostPosted: Tue Mar 15, 2022 12:46 pm
by nageswaragunupudi
cuatecatl82 wrote:Lo he logrado de esta forma, investigando y haciendo pruebas:

Code: Select all  Expand view
Local hCursor:=  LoadCursorFromFile( "Z:\FWH\cursors\Clock,cur" )
             
MSGStop(hCursor)  // Handle
SETCURSOR( hCursor )

DLL32 FUNCTION LoadCursorFromFile( lpFileName AS LPSTR ) AS LONG PASCAL FROM "LoadCursorFromFileA" LIB "user32.dll"


Asi he podido cambiar el icono, ya sea en .cur o en formato animado .ani, funcional !!!

Ojala sirva a alguien y que mejor, que sea incorporado a versiones futuras de Fivewin para que sea más fácil interactuar con cursores..

Saludos y abrazos a distancia a toda la comujnidad..


Thanks

Re: Como cargar cursor desde archivo ( RESUELTO )

PostPosted: Sun Mar 20, 2022 4:44 am
by cuatecatl82
Maestro Antonio:
nageswaragunupudi:
Daniel Garcia-Gil:

Propongo agregar a la clase Cursor.prg unas lineas más para poder cargar cursores desde archivo recurso como siempre o desde archivos .cur o .ani externos de forma nativa sin hacer modificaciones en los fuentes de los programas ya hechos, solo se cambiaría el llamado al cursor y la clase se encargaría de saber si es en recurso o en archivo externo.

DEFINE CURSOR oCur RESOURCE "c:\cursor.cur" // "FLECHA"

Code: Select all  Expand view

IF FILE( cResName )
      ::hCursor = LoadCursorFromFile( cResName )
    ELSE
      ::hCursor = LoadCursor( GetResources(), cResName )
      ::lPredef = .F.
 ENDIF

DLL32 FUNCTION LoadCursorFromFile( lpFileName AS LPSTR ) AS LONG PASCAL FROM "LoadCursorFromFileA" LIB "user32.dll"  
 


Saludos. :D :D :mrgreen: