Ver Mensaje Individual
  #3  
Antiguo 03-07-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Reputación: 22
ArdiIIa Va por buen camino
Hola raquel:

Te propongo un método adaptando una rutina de Zarko Gajic en la que podrás ver a modo de ejemplo, como es posible el cambio de colores entre diferentes TEdit, que supongo que en tu caso serán TDBedit.

Adaptando este procedimiento podrías realizar el control que pretendes, sin embargo, he de comentarte, que a mi juicio esto coarta el modo de comportamiento de un programa, dado que si el objetivo es que el usuario vaya a un control específico, sin pasar por otro, o tras haber pasado por otro... ¿Que ocurre si desea volver al anterior ? En fin es tu programa el que ha de discernir cual es el control correcto en un momento determinado, aunque tal como comenta Lepe, creo que lo mejor es usar unas reglas de validación en cada control, y dejar el usuario que determine en que parte de la ventana quiere estar....

El código:


Código Delphi [-]

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ScreenActiveControlChange(Sender: TObject) ;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  lastFocused : TWinControl;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Screen.OnActiveControlChange := ScreenActiveControlChange;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
Edit1.SetFocus;
Application.ProcessMessages;
TEdit(Screen.ActiveControl).Color := clBlue;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Screen.OnActiveControlChange := Nil;
end;

procedure TForm1.ScreenActiveControlChange(Sender: TObject) ;
var
   previousActiveControl : TWinControl;
Begin
if (Screen.ActiveControl = nil) and (Screen.ActiveControl is TEdit)  then
   begin
     lastFocused := nil;
     Exit;
   end;

   if lastFocused <> NIL then
   Begin
    previousActiveControl := lastFocused;
    TEdit(Screen.ActiveControl).Color := clBlue;
    TEdit(previousActiveControl).Color := clWindow;
   End;

   lastFocused := Screen.ActiveControl;

End;

Espero que te resulte útil.
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita