Procedura lijepo oboji (gradient), ali se događa nešto čudno:
Na formi imam tEdit kontrole. Ako nakon bojanja uđem u tEdit i upisujem tekst - OK, ali ako pritisnem: strelice (gore, dolje, lijevo ili desno) ili TAB, boja se vrati na postavljenu, boju prije poziva funkcije.
Ako nakon toga pono obojim panel, više ne gubi boju.
Ako pritisnem strelicu u edit kontroli, a ankon toga obojim panel - ne gubi se boja
Znači: samo u slučaju:
1. Obojim panel
2. u edit kontroli pritisnem neku od tipki: strelice (svi smjerovi), tab
definicije:
Code:
type
tmp = class(TPanel);
...
po1: TPanel;
type
tmp = class(TPanel);
...
po1: TPanel;
Poziv procedure za bojanje panela:
Code:
GradVertical(tmp(po1).Canvas, po1.ClientRect, $00FEF1B8, clBlue) ;
GradVertical(tmp(po1).Canvas, po1.ClientRect, $00FEF1B8, clBlue) ;
Code:
procedure TForm3.GradVertical(Canvas:TCanvas; Rect:TRect; FromColor, ToColor:TColor) ;
var
Y, x:integer;
dr,dg,db:Extended;
C1,C2:TColor;
r1,r2,g1,g2,b1,b2:Byte;
R,G,B:Byte;
cnt:Integer;
mi: integer;
begin
C1 := FromColor;
R1 := GetRValue(C1) ;
G1 := GetGValue(C1) ;
B1 := GetBValue(C1) ;
C2 := ToColor;
R2 := GetRValue(C2) ;
G2 := GetGValue(C2) ;
B2 := GetBValue(C2) ;
dr := ((R2-R1) / Rect.Bottom-Rect.Top);
dg := ((G2-G1) / Rect.Bottom-Rect.Top);
db := ((B2-B1) / Rect.Bottom-Rect.Top);
cnt := 0;
mi := rect.Bottom div 2;
for Y := Rect.Top to mi do
begin
R := R1+Ceil(dr*cnt) ;
G := G1+Ceil(dg*cnt);
B := B1+Ceil(db*cnt) ;
Canvas.Pen.Color := RGB(R,G,B) ;
Canvas.MoveTo(Rect.Left,Y) ;
Canvas.LineTo(Rect.Right,Y) ;
Inc(cnt) ;
end;
cnt := 0;
for Y := Rect.Bottom - 1 downto mi do
begin
R := R1 - Ceil(dr*cnt) ;
G := G1 - Ceil(dg*cnt) ;
B := B1 - Ceil(db*cnt) ;
Canvas.Pen.Color := RGB(R,G,B) ;
Canvas.MoveTo(Rect.Left,Y) ;
Canvas.LineTo(Rect.Right,Y) ;
Dec(cnt) ;
end;
end;
procedure TForm3.GradVertical(Canvas:TCanvas; Rect:TRect; FromColor, ToColor:TColor) ;
var
Y, x:integer;
dr,dg,db:Extended;
C1,C2:TColor;
r1,r2,g1,g2,b1,b2:Byte;
R,G,B:Byte;
cnt:Integer;
mi: integer;
begin
C1 := FromColor;
R1 := GetRValue(C1) ;
G1 := GetGValue(C1) ;
B1 := GetBValue(C1) ;
C2 := ToColor;
R2 := GetRValue(C2) ;
G2 := GetGValue(C2) ;
B2 := GetBValue(C2) ;
dr := ((R2-R1) / Rect.Bottom-Rect.Top);
dg := ((G2-G1) / Rect.Bottom-Rect.Top);
db := ((B2-B1) / Rect.Bottom-Rect.Top);
cnt := 0;
mi := rect.Bottom div 2;
for Y := Rect.Top to mi do
begin
R := R1+Ceil(dr*cnt) ;
G := G1+Ceil(dg*cnt);
B := B1+Ceil(db*cnt) ;
Canvas.Pen.Color := RGB(R,G,B) ;
Canvas.MoveTo(Rect.Left,Y) ;
Canvas.LineTo(Rect.Right,Y) ;
Inc(cnt) ;
end;
cnt := 0;
for Y := Rect.Bottom - 1 downto mi do
begin
R := R1 - Ceil(dr*cnt) ;
G := G1 - Ceil(dg*cnt) ;
B := B1 - Ceil(db*cnt) ;
Canvas.Pen.Color := RGB(R,G,B) ;
Canvas.MoveTo(Rect.Left,Y) ;
Canvas.LineTo(Rect.Right,Y) ;
Dec(cnt) ;
end;
end;