Mudar a cor do Edit ao receber o foco no Delphi
Alguns programas mostram o Edit que está com o foco em uma cor diferente dos demais. Como fazer isto em Delphi? Na seção private do form declare o procedimento abaixo: private procedure MudancaDeFoco(Sender: TObject); public end; Na seção implementation, escreva o código do procedimento: { Esta rotina será chamada através do evento OnExit (perda do foco) de todos os componentes do tipo TEdit que existirem no form. } procedure TForm1.MudancaDeFoco(Sender: TObject); var I: integer; Ed: TEdit; begin { Percorre a matriz de componentes do form } for I := 0 to ComponentCount - 1 do { Se o componente é do tipo TEdit... } if Components[I] is TEdit then begin { Faz um type-casting pata o tipo TEdit } Ed := Components[I] as TEdit; { Se o Edit está com o foco... } if Ed.Focused then Ed.Color := clYellow { Amarelo } else Ed.Color := clWhite; { Branco } end; end; No evento OnCreate do Form, coloque o código abaixo: procedure TForm1.FormCreate(Sender: TObject); var I: integer; begin { Percorre a lista de componentes do form (matriz de componentes) e verifica cada componente para saber se é um TEdit. Se for, associa o evento OnExit do componente com a procedure "MudancaDeFoco". } for I := 0 to ComponentCount - 1 do if Components[I] is TEdit then (Components[I] as TEdit).OnExit := MudancaDeFoco; end; No evento OnActivate coloque: procedure TForm1.FormActivate(Sender: TObject); begin { Esta chamada é necessária para que o estado inicial seja controlado. } MudancaDeFoco(nil); end;
Existem outras técnicas mais profissionais para resolver o problema proposto. Uma alternativa excelente é a criação de um novo componente herdado da classe TEdit (ou TCustomEdit) que implemente a mudança de cor no método DoEnter e DoExit.