[ franjo_tahi2 @ 31.01.2014. 13:13 ] @
Koristim tPanel koji bojam procedurom (dolje) 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; Poziv procedure za bojanje panela: Code: 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; |