2012-10-03 203 views
1

我一直試圖繪製一個圓角的矩形與邊界的間距,但我似乎無法找到一種方法來使用Canvas.RoundRect函數來做到這一點,而且我不擅長數學繪圖我自己的邊緣,我可以使用Canvas.MoveTo和Canvas.LineTo函數繪製具有間距的矩形,但我不知道如何使邊緣變圓。目前我正在做的是我在我想要在邊界的地方做黃色矩形,但問題是當我打印時,我不得不直接在打印機畫布上畫畫,而且我必須在透明畫布上畫畫,所以背景顏色會導致問題。任何能夠幫助我構建自定義繪圖例程的人,或者告訴我如何擦除該區域並仍然在沒有任何背景色的透明紙上打印。黃色的背景顏色僅用於預覽,當我繪製到打印機畫布時,背景是透明的。圓角矩形在德爾福

請參閱圖像以瞭解我的意思是通過在邊框線中間隔。

enter image description here

感謝

+1

你試過'Canvas.Brush:= bsClear'? –

+0

我不明白你最初的問題。 Canvas.RoundRect不繪製?它沒有繪製你想要的地方?或者是其他東西? –

+3

@SertacAkyuz問題是在透明背景的矩形的底部畫「空格」 – teran

回答

6

您可以通過操作當前設備上下文的剪切區域來排除間隙。假設L,R,T和B是你的黃色矩形的座標,以使間隙,使用以下代碼:

ExcludeClipRect(Canvas.Handle, L, T, R, B); // exclude the gap 
Canvas.RoundRect(<whatever you already do here>); 
SelectClipRgn(Canvas.Handle, 0); // reset the clipping region 
+0

謝謝很多男人:),作品像一個魅力男人:)。 –

4

你可以自己繪製的部分圓角矩形。對於直線部分使用MoveToLineTo,對角部使用Arc

Arc函數繪製一個橢圓的一部分。函數的前兩對座標表示橢圓的邊界。如果你想讓你的矩形的邊角爲圓形,那麼這個橢圓是一個圓,並且X2 - X1將等於Y2 - Y1。後兩對座標表示圓上的起點和終點;對於直線部分,他們將與您傳遞給MoveToLineTo的點相同。電弧逆時針方向畫出。

+0

瞭解電弧是逆時針還是順時針方向繪製很重要。這是因爲GDI約定是繪製一條線的第一個點,但不繪製線的最後一個點。文檔提到了LineTo,但不是Arc。對於LineTo它說:「LineTo函數從當前位置直到但不包括指定點繪製一條線。」據推測,同樣的慣例適用於弧。所有這一切意味着你應該以同樣的逆時針方向畫出你的直線部分。 –

+0

在API級別,您可以使用['SetArcDirection'](http://msdn.microsoft.com/zh-cn/library/windows/desktop/dd162961.aspx)控制繪製哪個方向的弧線。我不認爲'TCanvas'暴露了這個設置,但是我懷疑你可以使用這個API,並且'TCanvas'會尊重它。 –

+0

事實上,你鏈接到的Emba文檔表明,如果你想扭轉這種感覺,你完全可以做到這一點。就我個人而言,我只是將感覺保持在默認設置,並遵循逆時針慣例。 –