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;
Observações
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.
Vlw pelo código, funcionou como esperado !!
ResponderExcluir