Mudar o foco do campo ao gravar um registro?

Delphi

12/02/2015

Amigos,

Tenho um formulário genérico com uma função para saltar de campo nos TDBEdit, para cada salto eu altero a cor do campo de acordo com o foco, o problema é que se eu altera o conteúdo do campo TDBEdit, mais não sair dele, a alteração não é gravada, já fiz vários testes, já jóquei o foco em outro campo no momento da gravação é nada deu certo.
Agradeço a ajuda

procedure TfrmGenerico.SaltaCampo(Sender: TObject; var Key: Char);
begin
//comando para saltar campos com o enter
if Key = chr(13) then
begin
Key := #0;
Perform(wm_NextDlgCtl,0,0);
end;
end;

{aplica a cor no componente}
procedure TfrmGenerico.AplicaCor(Sender: TObject);
begin

TDBEdit(Sender).Color := clGradientInactiveCaption;
TDBEdit(Sender).Font.Style := [fsBold];
TDBLookupComboBox(Sender).Color := clGradientInactiveCaption;
TDBComboBox(Sender).Color := clGradientInactiveCaption;
TDBRadioGroup(Sender).Font.Style := [fsBold];
TDBCheckBox(Sender).Font.Style := [fsBold];
end;

{retira a cor no componente}

procedure TfrmGenerico.TiraCor(Sender: TObject);
begin
TDBEdit(Sender).Color := clWindow;
TDBEdit(Sender).Font.Style := [];
TDBLookupComboBox(Sender).Color := clWindow;
TDBComboBox(Sender).Color := clWindow;
TDBRadioGroup(Sender).Font.Style := [];
TDBCheckBox(Sender).Font.Style := [];
end;
Itamar Souza

Itamar Souza

Curtidas 0

Respostas

Douglas

Douglas

12/02/2015

Olá Itamar, eu aconselho que você debugue o seu código no momento da ação gravar, pode ser que um de seus procedimentos esteja dando problema.

Qualquer dúvida estou à disposição!
GOSTEI 0
Itamar Souza

Itamar Souza

12/02/2015

Douglas,
Agradeço a ajuda, fiz o debugue, no onShow estou usando a função para trocar a cor dos componentes , mais até o momento eu não descobri o porque que só grava quando
eu saio do campo.


{troca a cor dos componentes na tela de acordo com a seleção}
procedure TfrmGenerico.FormShow(Sender: TObject);
var
I : Integer;
begin

for I := 0 to ComponentCount - 1 do
//tratando dtbedit
if Components[I]is TDBEdit then
begin
TDBEdit(Components[I]).OnEnter := AplicaCor;
TDBEdit(Components[I]).OnExit := TiraCor;
end
else
// tratando TDBLookupComboBox
if Components[I]is TDBLookupComboBox then
begin
TDBLookupComboBox(Components[I]).OnEnter := AplicaCor;
TDBLookupComboBox(Components[I]).OnExit := TiraCor;
end
else
// tratando TDBComboBox
if Components[I]is TDBComboBox then
begin
TDBComboBox(Components[I]).OnEnter := AplicaCor;
TDBComboBox(Components[I]).OnExit := TiraCor;
end
else
// tratando TDBRadioGroup
if Components[I]is TDBRadioGroup then
begin
TDBRadioGroup(Components[I]).OnEnter := AplicaCor;
TDBRadioGroup(Components[I]).OnExit := TiraCor;
end
else
// tratando TDBCheckBox
if Components[I]is TDBCheckBox then
begin
TDBCheckBox(Components[I]).OnEnter := AplicaCor;
TDBCheckBox(Components[I]).OnExit := TiraCor;
end;

end;
GOSTEI 0
Itamar Souza

Itamar Souza

12/02/2015

O problema está na validação dos campos

usando o ActiveControl := nil; antes de gravar o registro resolveu.

agradeço
GOSTEI 0
Eduardo Saute

Eduardo Saute

12/02/2015

Poderia ser mais claro na explanação do problema ? você quer mudar as cores de acordo com o que seleção ??
GOSTEI 0
Eduardo Saute

Eduardo Saute

12/02/2015

ok...
GOSTEI 0
Douglas

Douglas

12/02/2015

O problema está na validação dos campos

usando o ActiveControl := nil; antes de gravar o registro resolveu.

agradeço



Show Itamar, é sempre bom debugar, pois assim você consegue entender o que está acontecendo no código. Precisando de algo é só falar!
GOSTEI 0
POSTAR