Alterar a cor do DbEdit conforme o texto contido nele

Delphi

23/10/2015

Boa tarde a todos, gostaria de ajuda dos amigos no seguinte sentido:
Em um form tenho um DbEdit e preciso que ele se ele estiver sem preenchimento a cor de fundo seja a normal branco, se ele for preenchido com a palavra "SIM" a cor de fundo seja vermelha e se for "Não" fique na cor amarela. Uso o Delphi 7 e banco de dados em access.
Osvaldo Pinto

Osvaldo Pinto

Curtidas 0

Respostas

Marco Salles

Marco Salles

23/10/2015

Bem no evento onChange do Seu Field ( Campo)

Faça

procedure TSeuForm.SeuDataSet1ValorChange(Sender: TField);
begin
case AnsiIndexStr(UpperCase(Sender.AsString), ['', 'SIM','NÃO']) of
0:DBEdit1.Color:=clWindow;
1:DBEdit1.Color:=clRed;
2:DBEdit1.Color:=clYellow;
else
DBEdit1.Color:=clWindow;
end;
GOSTEI 0
Osvaldo Pinto

Osvaldo Pinto

23/10/2015

Deu o seguinte erro:

[img]http://arquivo.devmedia.com.br/forum/imagem/457297-20151023-161538.jpg[/img]
GOSTEI 0
Marco Salles

Marco Salles

23/10/2015

Declare abaixo da secção Implementation

implementation

{$R *.dfm}

uses StrUtils;
GOSTEI 0
Osvaldo Pinto

Osvaldo Pinto

23/10/2015

Marco Antonio diminuiu a quantidade de erros mas continua dando erro:
[img]http://arquivo.devmedia.com.br/forum/imagem/457297-20151023-174322.jpg[/img]
GOSTEI 0
Marco Salles

Marco Salles

23/10/2015

Bem no evento onChange do Seu Field ( Campo)



Vc esta colocando Change do Edit .. Tb poderia dar mais é outro código
GOSTEI 0
Osvaldo Pinto

Osvaldo Pinto

23/10/2015

Marcos Antonio vamos ver se eu entendi direito, fui no meu DataModule (Dados), na minha tabela TblCrim abri o field editor no campo desejado no evento onChange coloquei o código que vc me forneceu, incrementei o uso da unit StrUtils, e também do meu formulário que contém a o DbEdit10, ao digitar o código apenas acrescentei no nome do Form que tem o DbEdit para indicar o caminho, porém ao compilar ele deu erro conforme abaixo:

[img]http://arquivo.devmedia.com.br/forum/imagem/457297-20151023-192450.jpg[/img]

segue cópia da unit UDados:

unit UDados;

interface

uses
SysUtils, Classes, DB, ADODB;

type
TDados = class(TDataModule)
ConId: TADOConnection;
TblCrim: TADODataSet;
TblCrimApelido: TWideStringField;
TblCrimData_Nascimento: TDateTimeField;
TblCrimDataCadastro: TDateTimeField;
TblCrimIdCrim: TAutoIncField;
TblCrimLinkFotoCrim: TWideStringField;
TblCrimMae: TWideStringField;
TblCrimNacionalidade: TWideStringField;
TblCrimNaturalidade: TWideStringField;
TblCrimNome: TWideStringField;
TblCrimPai: TWideStringField;
TblCrimProcurado: TWideStringField;
TblCrimRG: TWideStringField;
TblCrimUF: TWideStringField;
DsCrim: TDataSource;
TblAnt: TADODataSet;
TblAntBOPC: TWideStringField;
TblAntBOPM: TWideStringField;
TblAntCrime: TWideStringField;
TblAntData: TDateTimeField;
TblAntFaccao: TWideStringField;
TblAntIdAntec: TAutoIncField;
TblAntIdCrim: TIntegerField;
TblAntInquerito: TWideStringField;
TblAntProcesso: TWideStringField;
TblAntQualFaccao: TWideStringField;
DsAnt: TDataSource;
TblDbPr: TADODataSet;
TblDbPrBairroDbPrisao: TWideStringField;
TblDbPrBOPCDbPrisao: TWideStringField;
TblDbPrBOPMDbPriso: TWideStringField;
TblDbPrDataDbPrisao: TDateTimeField;
TblDbPrEndDbPrisao: TWideStringField;
TblDbPrFlagrante: TWideStringField;
TblDbPrHistDbPrisao: TMemoField;
TblDbPrHoraDbPrisao: TDateTimeField;
TblDbPrIdCrim: TIntegerField;
TblDbPrIdDbPrisao: TAutoIncField;
TblDbPrLogDbPrisao: TWideStringField;
TblDbPrMotivoDbPrisao: TWideStringField;
TblDbPrMunDbPrisao: TWideStringField;
TblDbPrNumDbPrisao: TIntegerField;
TblDbPrPoliciaisDbPrisao: TWideStringField;
TblDbPrUFDbPrisao: TWideStringField;
TblDbPrVitDbPrisao: TWideStringField;
DsDbPr: TDataSource;
TblCp: TADODataSet;
TblCpDataCadParsa: TDateTimeField;
TblCpIdComparsa: TAutoIncField;
TblCpIdCrim: TIntegerField;
TblCpLinkFotoParsa: TWideStringField;
TblCpNomeParsa: TWideStringField;
TblCpRGParsa: TWideStringField;
TblCpVulgoParsa: TWideStringField;
DsCp: TDataSource;
TblEnd: TADODataSet;
TblEndBairroEndCrim: TWideStringField;
TblEndDataCadEndCrim: TDateTimeField;
TblEndEndEndCrim: TWideStringField;
TblEndIdCrim: TIntegerField;
TblEndidEndCrim: TAutoIncField;
TblEndLogEndCrim: TWideStringField;
TblEndMunicEndCrim: TWideStringField;
TblEndNumEndCrim: TWideStringField;
TblEndObsEnd: TMemoField;
TblEndUFEndCrim: TWideStringField;
DsEnd: TDataSource;
TblMod: TADODataSet;
DsMod: TDataSource;
TblModIdCrim: TIntegerField;
TblModIdModus: TAutoIncField;
TblModModus: TMemoField;
TblSp: TADODataSet;
TblSpDataFotoTatu: TDateTimeField;
TblSpDescricaoTatu: TWideStringField;
TblSpIdCrim: TIntegerField;
TblSpIdTatu: TAutoIncField;
TblSpLinkFotoTatu: TWideStringField;
TblSpLocalTatu: TWideStringField;
DsSp: TDataSource;
procedure TblCrimProcuradoChange(Sender: TField);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Dados: TDados;

implementation

uses UCad, StrUtils;

{$R *.dfm}

procedure TDados.TblCrimProcuradoChange(Sender: TField);
begin
case AnsiIndexStr(UpperCase(Sender.AsString), ['', 'SIM','NÃO']) of
0:FrmCad.DBEdit10.Color:=clWindow;
1:FrmCad.DBEdit10.Color:=clRed;
2:FrmCad.DBEdit10.Color:=clYellow;
else
FrmCad.DBEdit10.Color:=clWindow;
end;
end;


end.
GOSTEI 0
Marco Salles

Marco Salles

23/10/2015

Calma o evento é este mesmo

O que vc esta fazendo não é certo .. Mas vai funcionar

O Correto é vc deixar o DataSouce cuidar disse no Formulário que esta o Dbedit e não
dar uses no Formulário no DataModulo que tem o DataSet ...

Mas como eu disse , vai funcionar porém não é correto

No caso ele esta reclamando que as cores não estão definidas

Tem que dar uses

 Vcl.Graphics;


porém se vc quiser fazer o correto tem que fazer o seguinte
mais trabalhoso , porém mais correto

No Private do Form

  private
    { Private declarations }
    procedure OnValorChange(sender:TField);


implemente

procedure TForm1.OnValorChange(sender: TField);
begin
 case AnsiIndexStr(UpperCase(Sender.AsString), ['', 'SIM','NÃO']) of
0:DBEdit1.Color:=clWindow;
1:DBEdit1.Color:=clRed;
2:DBEdit1.Color:=clYellow;
else
DBEdit1.Color:=clWindow;
end;
end;


No Oncreate do form defina

procedure TForm1.FormCreate(Sender: TObject);
begin
DataSource1.DataSet.FieldByName('Valor').OnChange:=Self.OnValorChange;
end;


Agora vai né ??
GOSTEI 0
Marco Salles

Marco Salles

23/10/2015

Desculpe .. O Nome do campo Valor tem que substituir pelo Campo que vc quer ..
GOSTEI 0
POSTAR