Fórum Alterar a cor DBEdit #225253
11/04/2004
0
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
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
Curtir tópico
+ 0
Responder
Posts
11/04/2004
Carlosmielke
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
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
Responder
Gostei + 0
11/04/2004
Emerson Nascimento
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
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
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)