2013-08-18 64 views
0

只需創建簡單FireMokey HD的應用程序,把TImage中使用ALIGN = alclient在表格上,並試圖繪製簡單的黑色矩形:德爾福FireMonkey應用程序不能得出簡單的黑色矩形

procedure TForm8.FormCreate(Sender: TObject); 
var 
    c: TCanvas; 
begin 
    Image.Bitmap := TBitmap.Create(ClientWidth, ClientHeight); 
    c := Image.Bitmap.Canvas; 
    c.BeginScene; 
    try 
    c.Clear(claWhite); 
    c.Stroke.Color := claBlack; 
    c.Stroke.Kind := TBrushKind.bkSolid; 
    c.DrawRect(
     TRectF.Create(7,7,ClientWidth-7,ClientHeight-7), 
     0,0, 
     [], 
     1 
    ); 
    finally 
    c.EndScene; 
    end; 
end; 

而且這是行不通的。矩形的顏色不是黑色,它是一種灰色。角落裏的顏色有一些變化。我是否需要設置其他屬性或這裏有什麼問題? 我嘗試了不同的不透明度值(1,100,255,65535),圖片根本沒有改變,幫助中沒有任何信息,這個選項到底意味着什麼。 已縮放左上角:

enter image description here

還試圖,因爲它實施例中所述使用多邊形。同樣的問題 - 圓角和灰色而不是黑色(不透明度圖像的屬性是1,所有屬性爲默認):

procedure TForm8.Button2Click(Sender: TObject); 
var 
    p1, p2, p3, p4, p5: TPointF; 
    MyPolygon: TPolygon; 
begin 
    // sets the points that define the polygon 
    p1.Create(100, 100); 
    p2.Create(200, 100); 
    p3.Create(200, 200); 
    p4.Create(100, 200); 
    p5.Create(100, 100); 
    // creates the polygon 
    SetLength(MyPolygon, 5); 
    MyPolygon[0] := p1; 
    MyPolygon[1] := p2; 
    MyPolygon[2] := p3; 
    MyPolygon[3] := p4; 
    MyPolygon[4] := p5; 
    Image.Bitmap.Canvas.BeginScene; 
    // draws the polygon on the canvas 
    Image.Bitmap.Canvas.DrawPolygon(MyPolygon, 50); 
    Image.Bitmap.Canvas.EndScene; 
    // updates the bitmap 
// Image.Bitmap.BitmapChanged; 
end; 
+0

你能添加一個標籤用Delphi版本放哪兒你遇到過這個問題嗎?順便說一句。您是否嘗試過關注['這個例子'](http://docwiki.embarcadero.com/CodeExamples/XE2/en/FMXTCanvasDrawFunctions_(德爾福))?我不知道FMX,但是不是'BeginScene'和'EndScene'重要嗎? [自毀評論;請不要回復] – TLama

+0

@TLama:您鏈接中的這些示例已過時。方法BitmapChanged不再可用,它現在處於受保護的部分(這是個好消息,因爲使用EndScene和其他東西都很奇怪)。在這種情況下,BeginScene和EndScene不起作用。這是基本的功能,它很難找到FM的工作,因爲它應該... –

+0

我不知道你說'BeginScene'和'EndScene'沒有幫助的原因,但至少你應該調用這個函數對(並且你現在在你的代碼中忽略它)。請參閱['BeginScene'](http://docwiki.embarcadero.com/Libraries/XE3/en/FMX.Types.TCanvas.BeginScene)參考。有明確的寫法,*在TCanvas上繪製之前調用BeginScene。 要結束繪圖會話,請調用EndScene。* – TLama

回答

1

http://roman.yankovsky.me/?p=1018

if Canvas.BeginScene then 
try 
    Canvas.Stroke.Thickness := 1.5; 
    Canvas.Stroke.Kind := TBrushKind.bkSolid; 
    Canvas.Fill.Color := TAlphaColorRec.Black; 
    Canvas.Fill.Kind := TBrushKind.bkSolid; 

    for I := 1 to 9 do 
    begin 
    Canvas.DrawLine(PointF(50 + I * 25 - (Canvas.Stroke.Thickness/2), 0), 
     PointF(50 + I * 25 - (Canvas.Stroke.Thickness/2), ClientHeight), 1); 
    end; 
finally 
    Canvas.EndScene; 
end;