2012-12-27 4 views

답변

4
function GetRoundedFixedRectanglePoints(const Rect: TFloatRect; dx, dy: single): TArrayOfFixedPoint; 
var 
    i, j, k, arcLen: integer; 
    arcs: array [0 .. 3] of TArrayOfFixedPoint; 
begin 
    //nb: it's simpler to construct the rounded rect in an anti-clockwise 
    //direction because that's the direction in which the arc points are returned. 

    with Rect do 
    begin 
    arcs[0] := GetArcPointsEccentric(
     FloatRect(Left, Bottom -dy*2, Left+dx*2, Bottom), rad180, rad270); 
    arcs[1] := GetArcPointsEccentric(
     FloatRect(Right-dx*2, Bottom -dy*2, Right, Bottom), rad270, 0); 
    arcs[2] := GetArcPointsEccentric(
     FloatRect(Right - dx*2, Top, Right, Top + dy*2), 0, rad90); 
    arcs[3] := GetArcPointsEccentric(
     FloatRect(Left, top, Left+dx*2, Top+dy*2), rad90, rad180); 

    //close the rectangle 
    SetLength(arcs[3], Length(arcs[3])+1); 
    arcs[3][Length(arcs[3])-1] := arcs[0][0]; 
    end; 

    //calculate the final number of points to return 
    j := 0; 
    for i := 0 to 3 do 
    Inc(j, Length(arcs[i])); 
    SetLength(Result, j); 

    j := 0; 
    for i := 0 to 3 do 
    begin 
    arcLen := Length(arcs[i]); 
    for k := 0 to arcLen -1 do 
     Result[j+k] := arcs[i][k]; 
    Inc(j, arcLen); 
    end; 
end; 

사용법 :

var 
    pts: TArrayOfFixedPoint; 
begin  
    pts := GetRoundedFixedRectanglePoints(FloatRect(Left+2, Top+2, Left + Width-2, Top + Height-2), 5, 5); 

    SimpleFill(ABitmap32, pts, 0, Color32(clBlack)); 
+0

곳에서 모든 발동은? 그것은 GR32의 일부가 아닌 것 같습니다. – hikari

+0

그래픽 32 용 GR32_Lines 라이브러리 (GR32_Misc 장치). http://www.angusj.com/delphi/gr32_lines.php – pani

+0

에서 다운로드 할 수 있습니다. 고마워요. 이것에 약간의 시간이 필요합니다. Extension은 TPibergon32를 제거하고 모든 코드와 충돌하는 공식 1.91보다는 최신 SVN 파일이 필요합니다 .- 오늘 나중에 확인하고 다시 얻을 것입니다. – hikari

관련 문제