colorindo errado

30/01/2016

0

estou com o seguinte codigo e tá colorindo errado

begin
with TDBGrid(Sender) do
begin
if DataSource.DataSet.FieldByName('margem').AsString <= EDtnivel.text then
begin
if (gdSelected in State) then
Canvas.Brush.Color := clhighlight
else
begin
Canvas.Font.Style := [fsBold];
Canvas.Font.Color := clhighlight;
end
end;
Canvas.FillRect(Rect);
DefaultDrawColumnCell(Rect,DataCol,Column,State);

begin
if DataSource.DataSet.FieldByName('margem').AsString > EDtnivel.text then
begin
if (gdSelected in State) then
Canvas.Brush.Color := clteal
else
begin
Canvas.Font.Style := [fsBold];
Canvas.Font.Color := clteal;
end;
Canvas.FillRect(Rect);
DefaultDrawColumnCell(Rect,DataCol,Column,State);
end
end;
end;

o resultado é esse

[IMG]http://i64.tinypic.com/w7oms2.jpg[/IMG]
Valmir Inacio

Valmir Inacio

Responder

Posts

01/02/2016

Natanael Ferreira

A comparação não está funcionando porque você está comparando texto (strings).

Altere seu código para que compare Float.

Troque isto:

if DataSource.DataSet.FieldByName('margem').AsString <= EDtnivel.text then


Por isto:

if DataSource.DataSet.FieldByName('margem').AsFloat <= StrToFloat(EDtnivel.text) then
Responder

01/02/2016

Valmir Inacio

resolveu o problema e apareceu outro, que é o seguinte se o Edit tiver valor não dá erro e roda normal, mas se ele não tiver valor acontece esse erro:

---------------------------
Project1
---------------------------
'' is not a valid floating point value.
---------------------------
OK
---------------------------
Responder

01/02/2016

Raimundo Pereira

Format o campo edit para float ou use um componente próprio para valores
Responder

01/02/2016

Valmir Inacio

ele já com o codigo, o problema agora é que se não tiver valor nenhum ele dá esse erro, se tiver valor ele funciona. eu poderia ja deixar algum valor fixo , porem se o usuario apagar o valor e executar vai dar o erro.
Responder

01/02/2016

Raimundo Pereira

Primeira linha do executar

if (EDtnivel.text='') then
begin
ShowMessage('Acesso negado, informar a margem');
EDtnivel.SetFocus;
exit;
end;

if ( StrToFloat(EDtnivel.text)<=0)then
begin
ShowMessage('Acesso negado, informar a margem maior que 0,00');
EDtnivel.SetFocus;
exit;
end;

ShowMessage('Prossegue com a rotina');
end;
Responder

01/02/2016

Natanael Ferreira

Troque StrToFloat para StrToFloatDef.

A diferença entre eles é que o StrToFloatDef atribui um valor padrão quando a conversão não é feita com sucesso.

Troque:

if DataSource.DataSet.FieldByName('margem').AsFloat <= StrToFloat(EDtnivel.text) then


Por:

if DataSource.DataSet.FieldByName('margem').AsFloat <= StrToFloatDef(EDtnivel.text, 0) then


Neste caso, será atribuído zero se o edit estiver vazio e o erro não ocorrerá.
Responder

01/02/2016

Valmir Inacio

Obrigado Natanael resolveu e tá funcionando e P2 sua dica foi implementada em outro código que estava faltando conforme foi citado no exemplo e obrigado também
Responder

13/02/2016

Firstzillan

??????????????
Responder

13/02/2016

Asadsdggfhfh

?????????????
Responder

13/02/2016

Asadsdggfhfh

?????????????
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar