2012-05-18 11 views
12

Estoy trabajando con un dibujo en tiempo real en una forma considerable. Cuando el usuario cambia el tamaño del formulario, no deseo aplicar el cambio de tamaño a mi representación gráfica hasta que el usuario haya soltado el botón del mouse, por lo que el cambio de tamaño habrá finalizado. ¿Cómo puedo detectar esto y solo cambiar el tamaño de mi representación una vez que el usuario ha terminado de cambiar el tamaño del formulario? Porque ahora, si utilizo el evento OnResize de mi formulario, se volverá a procesar constantemente todo por cada píxel que haya movido el mouse.¿Cómo detectar cuando el cambio de tamaño de la forma comienza y se detiene?

He intentado con los eventos de ratón hacia arriba/abajo y el seguimiento de esto, pero estos eventos no se invocan cuando se cambia el tamaño del formulario.

Respuesta

20

Para detectar el movimiento o el tamaño ha comenzado, tome el mensaje WM_ENTERSIZEMOVE. Se envía a una ventana una vez que el usuario hace clic en la barra de título de la ventana o en el borde de tamaño (lo que hace que la ventana ingrese el ciclo de movimiento o de tamaño).

Para detectar el movimiento o el tamaño ha finalizado, tome el mensaje WM_EXITSIZEMOVE. Se envía a una ventana una vez que el usuario suelta la barra de título de la ventana o el borde de tamaño (lo que hace que la ventana salga del ciclo de desplazamiento o de tamaño).

Se puede tomar cualquiera de ellos declarando (e implementar) ellos a nivel del formulario:

procedure WMEnterSizeMove(var Message: TMessage); message WM_ENTERSIZEMOVE; 
procedure WMExitSizeMove(var Message: TMessage); message WM_EXITSIZEMOVE; 
+6

+1. Espero que no te importe un poco de ayuda. :) –

+0

TLama: ¿Hay alguna manera equivalente de hacer esto en FMX? – RobertFrank

Cuestiones relacionadas