Ver Mensaje Individual
  #3  
Antiguo 15-04-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Reputación: 22
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Supongo que deberás poner algo para que refresque la parte gráfica antes de ejecutar Out32:

Código Delphi [-]
Procedure TPrincipal.LuzRojaOn;
begin
  AdvShape1.Appearance.Color:= clWhite;
  AdvShape1.Appearance.ColorTo:=clGray;
  AdvShape2.Appearance.Color:= clWhite;
  AdvShape2.Appearance.ColorTo:=clGray;
  AdvShape3.Appearance.Color:=$00D5D5FF;
  AdvShape3.Appearance.ColorTo:=$000000D9;
  Application.ProcessMessages; // Procesa los mensajes pendientes del sistema
  Out32($378,4); // direccion de LPT1
End

Para ahorrar tiempo en procesos que "no son los importantes" Delphi los deja para "después".
En este caso es el redibujado del formulario.
Para forzar esto, se suele utilizar Application.ProcessMessages, que ejecuta todos los mensajes pendientes antes de seguir con la ejecución del programa (redibijado, eventos de teclado, eventos de raton, etc.).

Si no quieres que el programa procese todos los eventos (puede ser lento si estás dentro de un bucle grande) puedes tratar de enviar la instruccion Repaint o Refresh.
Código Delphi [-]
  ...
  AdvShape1.Refresh;
  AdvShape2.Refresh;
  AdvShape3.Refresh;
  Out32($378,4); // direccion de LPT1
End
o
Código Delphi [-]
  ...
  AdvShape1.Repaint;
  AdvShape2.Repaint;
  AdvShape3.Repaint;
  Out32($378,4); // direccion de LPT1
End

PD. Cuando escribas código ponlo entre tags [ delphi] ... [/ delphi]

Última edición por duilioisola fecha: 15-04-2011 a las 22:45:02.
Responder Con Cita