2012-09-28 18 views
5

Ho un modulo FireMonkey con il seguente codice sull'evento OnPaint del modulo. Mi aspettavo una palla con un gradiente radiale, ma ho solo una palla rossa, nessuna sfumatura. La domanda è cosa sto sbagliando? Eseguendolo su XE3. Se cambio lo stile gradiente in gsLinear, ottengo un gradiente lineare. C'è qualcos'altro che devo specificare per mostrare il gradiente radiale?Come creare il gradiente radiale in Firemonkey

procedure TForm2.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); 
var MyRect : TRectF; 
begin 
    MyRect.Create (85, 85, 115, 115); 

    Canvas.Fill.Gradient.Style := TGradientStyle.gsRadial; 
    Canvas.Fill.Gradient.Color := claRed; 
    Canvas.Fill.Gradient.Color1 := claBlue; 
    Canvas.Fill.Kind := TBrushKind.bkGradient; 
    Canvas.FillEllipse (MyRect, 100); 
end; 

risposta

3

Sembra che ci sia un bug in FireMonkey. Se si disegna l'ellisse su 0,0, il gradiente radiale è visibile. Quando l'ellisse viene disegnata altrove, l'origine del gradiente non viene spostata ma rimane all'origine (anche se ora è invisibile). Il bug è apparentemente stato riportato ad oggi, quando verrà risolto è un'altra questione. Il modo per aggirare è quello di applicare patch al codice sorgente FMX (ma non ho la patch) o utilizzare il componente TEllipse.