Alterar a cor DBEdit

Delphi

11/04/2004

Para alterar a cor do DBEdit quando recebe e perde o foco, utilizo a seguinte rotina.
private
{ Private declarations }
ComponAnt : TDBEdit;

procedure TF_Animal.ControlChange(Sender : TObject);
begin
if Assigned(ComponAnt) then ComponAnt.color := clMenu;

if ActiveControl is TDBEdit then begin
TDBEdit(ActiveControl).color := clInfoBk;
ComponAnt := TDBEdit(ActiveControl);
end
else
ComponAnt := nil;
end;

Funciona super bem, mais quero incluir outros componente, ex. DBLookComboBox, TDBDateEdit, TRxDBCalcEdit

Por favor, me ajudem


Mardegan

Mardegan

Curtidas 0

Respostas

Carlosmielke

Carlosmielke

11/04/2004

caro colega,

vc pode fazer o mesmo de uma maneira bem estruturada, utilizando o seguinte código no show de todos os forms de sua aplicação;

procedure TForm1.FormShow(Sender: TObject);
begin
AlteraCorCampos(Self);
end;

////////////
procedure TForm1.AlteraCorCampos(Sender: TForm);
var
x:integer;
begin
for x:= 0 to Sender.Componentcount-1 do
begin
if Sender.Components[x] is TDbEdit then
begin
TDbEdit(Sender.Components[x]).OnChange:=MudaCorChange;
TDbEdit(Sender.Components[x]).Color:=CorInicial
end;

if Sender.Components[x] is TDBComboBox then
begin
TDBComboBox(Sender.Componentsx]).OnChange:=MudaCorChange;
TDBComboBox(Sender.Components[x]).Color:=CorInicial
end;

(* coloque aqui o resto de seus componentes que possuam o evento on change *)
.
.
.
end;
end;


procedure TForm1.MudaCorChange(Sender: TObject);
begin
if Sender is TDbEdit then
TDbEdit(Sender).Color:=CorFinal
else if Sender is TDBComboBox then
TDBComboBox(Sender).Color:=CorFinal;
end;

Abraços

Carlos Mielke
Desenvolvedor/Analista


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

11/04/2004

tente assim:
altere a classe da variável ComponentAnt de modo a ser TComponent.

private
    { Private declarations }
    ComponAnt: TComponent; // ao invés de TDBEdit


procedure TF_Animal.ControlChange(Sender: TObject);
begin
    if Assigned(ComponAnt) then ComponAnt.Color := clMenu;

    if (ActiveControl is TDBEdit) or
          (ActiveControl is TDBComboBox) or
          (ActiveControl is DBLookupComboBox) or
          (ActiveControl is TDBDateEdit) or
          (ActiveControl is TRxDBCalcEdit ) then
    begin
          // pode ser usada a classe TDBEdit de modo genérico,
          // pois ela contém a propriedade Color
          TDBEdit(ActiveControl).Color := clInfoBk;
          ComponAnt := ActiveControl;
    end;
end;


uma outra coisa: talvez seja melhor ativar/desativar essa função nos eventos OnActivate e OnDeactivate, ao invés de OnCreate/OnDestroy


GOSTEI 0
POSTAR