선택한 영역을 색상으로 채우려면 어떻게해야합니까?색상으로 맞춤 영역 채우기
var Rect: TRect;
Color: TColor;
begin
//fill area with color
end;
선택한 영역을 색상으로 채우려면 어떻게해야합니까?색상으로 맞춤 영역 채우기
var Rect: TRect;
Color: TColor;
begin
//fill area with color
end;
당신은 당신이 사용자 정의 영역 무엇을 의미하는 언급하지 않은 당신은 "선택 영역"에 대해 이야기. 무슨 뜻인지 모르겠다.
간단한 직사각형의 경우 일반적으로 TCanvas.FillRect
으로 직사각형을 채 웁니다. R
Canvas.Brush.Style := bsSolid;
Canvas.Brush.Color := Color;
Canvas.FillRect(R);
사각형을 지정하는 TRect
이다.
더 복잡한 영역의 경우 Windows GDI 기능 FillRgn
으로 되돌아 가야합니다. 이 함수는 TCanvas
으로 래핑되지 않지만 단순히 TCanvas.Handle
을 HDC
으로 전달하면됩니다.
당신은 훨씬 더 구체적으로 필요하지만, 이것은 당신이 올바른 방향으로 가야한다 :
procedure DoMyDrawing(Canvas: TCanvas; L, T, R, B: Integer; Color: TColor);
var
Rec: TRect;
begin
Rec.Left:= L;
Rec.Top:= T;
Rec.Right:= R;
Rec.Bottom:= B;
//SAME AS Rec:= Rect(L, T, R, B);
Canvas.Brush.Color:= Color;
Canvas.Brush.Style:= bsSolid;
Canvas.Pen.Style:= psClear;
Canvas.FillRect(Rec);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DoMyDrawing(Self.Canvas, 10, 10, 50, 50, clNavy);
end;
편집 :
좀 더-그래서를 사용하는 것이 좋습니다 것입니다 TRect에는 이미 4 개가 모두 포함되어 있기 때문에 4 개 좌표 (왼쪽, 위쪽, 오른쪽 및 아래쪽) 대신 TRect를 사용합니다. TopLeft TPoint와 BottomRight TPoint를 사용하여 TRect를 읽을 수도 있습니다.
procedure DoMyDrawing(Canvas: TCanvas; const R: TRect; const Color: TColor);
begin
Canvas.Brush.Color:= Color;
Canvas.Brush.Style:= bsSolid;
Canvas.Pen.Style:= psClear;
Canvas.FillRect(R);
end;
훨씬 쉽게, 그것은되지 않습니다 :
다음의 동일한 절차의 또 다른 버전 -
은 (Canvas.FillRect(R);
Canvas.FillRect(Rec);
있어야했다 또한 위의 오타가 수정)?
ANOTHER 편집 :
이 또한 내가 Rect(Left, Top, Right, Bottom)
을 사용하고 기능을 주 -이 너무 간단한 일을합니다. 불행히도 Rect: TRect;
이라는 매개 변수를 사용하는 이벤트가있는 표준 VCL 컨트롤을 보았습니다.이 컨트롤은 classes
유닛에서 원래 함수를 사용할 수있는 기능을 망칩니다. 따라서 Rect
이라는 이름의 변수를 사용하지 마십시오. Rect
함수를 사용할 수 없으므로 (4 줄의 코드 만 1로 바꾸기 때문에) 사용하지 마십시오.
네 개의 숫자 (Left, Top, Right, Bottom)를 사용하지 말고 TRect를 사용하십시오.이 4 개가 모두 함께 결합되어 있습니다. –
자신의 답변에 댓글을 쓰는 대신 편집 할 수 있습니다. 그것은 위키입니다. 사실 누구든지 당신의 답을 편집 할 수 있습니다. –
네, 저도 알다시피, 나는 그 의견을 남겼을 때 상당히 서두 릅니다. –
그냥 직사각형이 아닌 영역에 대해 'ExtFloodFill' 함수를 제안합니다. –
@Magicmaster 저는 그렇게 생각하지 않았습니다. 그래도 좋은 제안입니다. Flood 채우기는 FillRect/FillRgn과 약간 다르지만 여기에 적합 할 수 있습니다. –