Los mensajes no pueden ser procesadas hasta que su solicitud vuelve a entrar en un bucle de mensajes, por lo que cualquier intento de modificar el estado/control de actualización que se basa en el procesamiento de mensajes no va a funcionar dentro de una única secuencia de código que no lo hace mensajes de "bomba".
Afortunadamente, el VCL controla típicamente proporcionan un medio para volver a pintar vigor sin esperar a que los mensajes a procesar, a través del método de actualización:
Button1.Enabled := False;
Button2.Enabled := False;
Button1.Update;
Button2.Update;
Esto funciona independientemente de tener que desactivar forma repintado. El formulario no se volverá a pintar hasta que su aplicación entre en un bucle de mensajes de todos modos, por lo que deshabilitar la pintura de formulario y volver a habilitarlo en un solo procedimiento que no causa el procesamiento de mensajes es una pérdida de tiempo.
Esto puede no ser exactamente el repintado simultáneo de los dos botones, pero la pintura verdaderamente simultánea de dos controles separados es imposible sin entrar en el código de pintura GUI multiproceso que creo que está más allá del alcance de este problema. Sin embargo, la actualización de dos botones de esta manera tendrá el efecto casi simultáneo que necesites.
Claramente no probado (no funciona y ni siquiera compilar) – Deltics
utilizo WM_SETREDRAW en varios proyectos, que trabaja muy bien. Además, los componentes VCL que sí tienen los métodos Begin/EndUpdate() usan WM_SETREDRAW internamente. –
No funcionó en este caso ... * 1) * FALSE y TRUE no son parámetros válidos para SendMessage() [Integer required] * 2) * Después de cambiar los parámetros FALSE y TRUE a 0 y 1 respectivamente para que compila y trabaja según lo previsto, la forma no se vuelve a pintar al final - los botones permanecen visiblemente "activados" a menos que/hasta que se oscurezcan y por lo tanto forzados a volver a pintar * 3) * incluso si hubiera funcionado, intente/finalmente sería de rigor * 4) * incluso si hubiera funcionado, aún no habría tenido sentido debido a la dependencia del procesamiento de mensajes para que ocurra la pintura – Deltics