GARANTIR DESCONTO

Fórum pintar edit com canvas #312494

09/02/2006

0

olá amigos tudo bem com vcs?espero que sim
eu estou com um problema aqui e espero que vcs me ajudem...é o seguinte...eu tenho um programa em que eu entro com 4 valores inteiros e obviamente somando esses 4 valores cada um deles terá um percentual da soma deles...e estes percentuais são representados por cores que são pintados numa edit...por exemplo a edit1 tem um Width de 100 e eu entro com quatro valores 10,40,20 e 30 e portanto a edit será pintada com 4 cores
da posição 0 até 10 com a cor vermelha de 11 até 40 com a cor azul de 41 a 70 com a cor preta e de 71 a 100 com a cor verde....issso não é problema pois com este código já consegui pitar a edit corretamente

procedure TForm1.Pinta_Edit(p1 : integer;p2 : integer ; p3: integer; p4: integer);
var fCanvas: TControlCanvas;
    iLin, iCol: integer;
    tot1,tot,a1,a2,a3,a4,b1,b2,b3,b4 : integer;
begin
 tot1:=p1+p2+p3+p4;
 tot:=edit1.Width;

 if p1 > 0 then b1:=strtoint(Format(´¬6.0f´,[(p1*100)/tot1])) else b1:=0;
 if p2 > 0 then b2:=strtoint(Format(´¬6.0f´,[(p2*100)/tot1])) else b2:=0;
 if p3 > 0 then b3:=strtoint(Format(´¬6.0f´,[(p3*100)/tot1])) else b3:=0;
 if p4 > 0 then b4:=strtoint(Format(´¬6.0f´,[(p4*100)/tot1])) else b4:=0;

 if b1 > 0 then a1:=strtoint(Format(´¬6.0f´,[(b1*tot)/100])) else a1:=0;
 if b2 > 0 then a2:=strtoint(Format(´¬6.0f´,[(b2*tot)/100])) else a2:=0;
 if b3 > 0 then a3:=strtoint(Format(´¬6.0f´,[(b3*tot)/100])) else a3:=0;
 if b4 > 0 then a4:=strtoint(Format(´¬6.0f´,[(b4*tot)/100])) else a4:=0;


 fCanvas:= TControlCanvas.Create;
 try
   fCanvas.Control:= edit1;
//   fCanvas.Brush.Color:= clRed;
//   fCanvas.Pen.Color:= clgreen;
   for iLin:=0 to edit1.Height do begin
       if a1 > 0 then
          for iCol:=0 to a1 do
              if fCanvas.Pixels[iCol,iLin] = clWhite then
              fCanvas.Pixels[iCol,iLin]:= clred;
       if a2 > 0 then
          for iCol:=a1 to a1 + a2 do
              if fCanvas.Pixels[iCol,iLin] = clWhite then
                 fCanvas.Pixels[iCol,iLin]:= clblue;

       if a3 > 0 then
          for iCol:=a2 to a1 + a2 + a3 do
              if fCanvas.Pixels[iCol,iLin] = clWhite then
                 fCanvas.Pixels[iCol,iLin]:= clblack;

       if a4 > 0 then
          for iCol:=a3 to a1 + a2 + a3 +a4 do
               if fCanvas.Pixels[iCol,iLin] = clWhite then
                  fCanvas.Pixels[iCol,iLin]:= clgreen;

   end;
 finally
 Canvas.Free;
 end;
end;


o grande problema é o seguinte....qdo o programa perde o foco....por exemplo eu abro o bloco de notas e este fica por cima do edit o edit volta à cor padrão...eu gostaria de saber se existe alguma forma de manter as cores pintadas com este procedimento
Desde já agradeço a atenção
Luciano


Lucianoiron

Lucianoiron

Responder

Posts

10/02/2006

Edilcimar

por que vc não usa
Edit1.Color := clRed ou Edit1.Font.Color := clRed?, assim ele não perde a cor


Responder

Gostei + 0

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

Aceitar