PDA

Ver la Versión Completa : Cambiar la forma del apuntador del mouse


sierraja
20-04-2005, 16:37:19
:confused: Hola a todos, necesi cambiar el apuntador del mouse de una flecha para un reloj de arena, es decir, quiero hacer una busqueda en ur archivo y mientras hace la busqueda quiero cambiar el apuntador del mouse al reloj de arena. He intentado con screen.cursor y me parece que lo cambia pero muy rapido, es decir,


screen.cursor:=-11;
proceso_de_busqueda;
screen.cursor:=-2;

Aparentemente esto hace:

cambia el apuntador al reloj
va a hacer el proceso
imediatamente cambia de nuevo

Explico: se cambia el apuntador llama al proceso de busqueda e inmediatamente cambia el apuntador a la flecha, es decir deja haciendo el proceso de busqueda o cualquier trabajo con las bases de datos y vuelve. De antemano gracias.

marcoszorrilla
20-04-2005, 16:57:43
Si lo hace muy rápido es porque el proceso de búsqueda también es muy rápido.

Un Saludo.

jachguate
20-04-2005, 17:01:38
En primer lugar te recomiendo el uso de las constantes definidas en la unidad Controls:

crHourGlass -> Reloj de arena
crArrow -> Flecha (normal)
crDefault -> Vuelve al que sea default para la clase de ventana, normalmente crArrow

Para mas constantes, buscá en la ayuda "TCursor type".

Otro punto es que debes preocuparte porque aunque algo falle, el cursor vuelva a la normalidad. Yo lo hago encerrando la llamada al proceso en un try/finally:


Screen.Cursor := crHourGlass;
try
Proceso;
finally
Screen.Cursor := crDefault;
end;


Por último, en tu caso parece que el proceso_de_busqueda retorna sin haber realizado todo el proceso... quizas lo deja corriendo en otro hilo. Si queres que funcione, este procedimiento no debe retornar el control hasta que haya terminado de realizarse la busqueda.

Hasta luego.

;)

sierraja
20-04-2005, 17:13:11
Juan Antonio, gracias por tu atención.

En tu primera observación, también he utilizado las constantes que mencionas, pero me llama la atención tu última observación: evidentemente el programa sigue ejecutando el proceso_de_busqueda y retorna, pero tu sugerencia me indica que tome el control hasta que termine el proceso de busqueda y luego vuelva a donde fue inicialmente llamado, es decir, hasta que no se ejecute el hilo de busqueda no retorne (creo). Entonces teniendo esto en mente ¿cómo mantengo el control en el proceso de busqueda? o ¿de qué manera lo hago?. Gracias

Ing_Fajardo
20-04-2005, 17:18:58
Creo que lo que quiere decir es que debes asegurar que el cursor regrese a su estado normal aun si el proceso de busquea falla

Creo que se soluciona con tu un try..except.... no ?

sierraja
20-04-2005, 17:21:43
La búsqueda no falla, pero el cursor se devuelve al default aún cuando el proceso de búsqueda no ha terminado.

jachguate
20-04-2005, 18:28:42
evidentemente el programa sigue ejecutando el proceso_de_busqueda y retorna, pero tu sugerencia me indica que tome el control hasta que termine el proceso de busqueda y luego vuelva a donde fue inicialmente llamado, es decir, hasta que no se ejecute el hilo de busqueda no retorne (creo). Entonces teniendo esto en mente ¿cómo mantengo el control en el proceso de busqueda? o ¿de qué manera lo hago?. Gracias

Viendolo ya desde esta perspectiva... ¿que sentido tiene ejecutar el proceso de busqueda en otro hilo si te vas a quedar esperando a que termine de ejecutarse? En ese caso me parece lo mas lógico ejecutar el proceso de búsqueda en el hilo principal de la ejecución... quizas añadiendo llamadas a Application.ProcessMessages si lo único que se pretende es que la aplicación no aparezca como inactiva.

Solo estoy suponiendo escenarios, claro... por tanto creo que es buena idea que nos aclares un poco las ideas si realmente te interesa la ayuda que pueda venir.

Hasta luego.

;)

sierraja
20-04-2005, 18:54:19
Bueno, la idea es la siguiente: tengo un procedimiento de busqueda de información que es invocada en cualquier parte de la aplicación, dicho procedimiento de busqueda tiene un tiempo de ejecución (tiempo que sea). La necesidad parte de que mientras el procedimiento de busqueda se ejecute, quiero cambiar la apariencia del apuntador del mouse a reloj de arena, luego de que el procedimiento de busqueda termine, vuelva la apariencia del apuntador del mouse a la normalidad. Pido disculpas por la falta de explicación. Gracias

jachguate
20-04-2005, 19:08:44
Bueno, la idea es la siguiente: tengo un procedimiento de busqueda de información que es invocada en cualquier parte de la aplicación, dicho procedimiento de busqueda tiene un tiempo de ejecución (tiempo que sea). La necesidad parte de que mientras el procedimiento de busqueda se ejecute, quiero cambiar la apariencia del apuntador del mouse a reloj de arena, luego de que el procedimiento de busqueda termine, vuelva la apariencia del apuntador del mouse a la normalidad. Pido disculpas por la falta de explicación. Gracias

:confused:

Bueno, esta parte ya me la sabia... o la suponia al menos.

El punto es determinar si este otro proceso de está ejecutando en un hilo distinto, y si es asi porque, y que tan facil seria trasladarlo al hilo principal, o alguna idea de que hace...

¿lanza un query contra una bd? ¿con que componentes?

¿busca en el sistema de archivos mediante un bucle?

¿lanza una consulta a un servidor de aplicaciones? ¿MIDAS acaso? ¿INDY?

Hasta luego.

;)

jesusferan
17-10-2006, 01:12:19
En primer lugar te recomiendo el uso de las constantes definidas en la unidad Controls:

crHourGlass -> Reloj de arena
crArrow -> Flecha (normal)
crDefault -> Vuelve al que sea default para la clase de ventana, normalmente crArrow

Para mas constantes, buscá en la ayuda "TCursor type".

Otro punto es que debes preocuparte porque aunque algo falle, el cursor vuelva a la normalidad. Yo lo hago encerrando la llamada al proceso en un try/finally:

Código Delphi [-] (http://www.clubdelphi.com/foros/#)Screen.Cursor := crHourGlass; try Proceso; finally Screen.Cursor := crDefault; end;


Por último, en tu caso parece que el proceso_de_busqueda retorna sin haber realizado todo el proceso... quizas lo deja corriendo en otro hilo. Si queres que funcione, este procedimiento no debe retornar el control hasta que haya terminado de realizarse la busqueda.

Hasta luego.

;)

Gracias, tu respuesta funciona a la perfeccion