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
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
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
Curtir tópico
+ 0
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
Edit1.Color := clRed ou Edit1.Font.Color := clRed?, assim ele não perde a cor
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)