그럼 빠른 답변을 드리겠습니다.
type
TEllipticPanel = class(Vcl.ExtCtrls.TPanel)
procedure CreateWnd; override;
procedure Paint; override;
procedure Resize; override;
procedure RecreateHRGN;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
panl: TEllipticPanel;
public
{ Public declarations }
end;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
panl := TEllipticPanel.Create(self);
panl.Left := 10;
panl.Top := 10;
panl.Width := 100;
panl.Height := 50;
panl.ParentBackground := False;
panl.ParentColor := False;
panl.Color := clYellow;
panl.Parent := self;
end;
{ TEllipticPanel }
procedure TEllipticPanel.RecreateHRGN;
var
hr: hRgn;
begin
inherited;
hr := CreateEllipticRgn(0,0,Width,Height);
SetWindowRgn(Handle, hr, True);
end;
procedure TEllipticPanel.CreateWnd;
begin
inherited;
RecreateHRGN;
end;
procedure TEllipticPanel.Paint;
begin
inherited;
Canvas.Brush.Style := bsClear;
Canvas.Pen.Style := TPenStyle(psSolid);
Canvas.Pen.Width := 1;
Canvas.Pen.Color := clGray;
Canvas.Ellipse(1,1,Width-2,Height-2);
end;
procedure TEllipticPanel.Resize;
begin
inherited;
RecreateHRGN;
end;
키는 Windows CreateEllipticRgn 및 GDI SetWindowRgn 기능입니다.
Windows 영역에 대한 자세한 내용은 Regions을 참조하십시오.
예를 들어 ExtCtrls.TShape를 사용해 보셨습니까? (TGraphicControl이 적절한 경우) – MBo
TGraphicControl은 부모의 캔버스에 페인트하므로 단추 나 패널과 같은 창 컨트롤을 그릴 수 없습니다. TWinControl 하위 항목은 투명 할 수 없지만 원을 그리기 전에 그 아래에있는 항목을 페인팅하여 위조 할 수 있습니다. WM_ERASEBACKGROUND도 처리해야합니다. 아니면 결코 사용하지 못했지만 상속받을 수있는 클래스가 있습니다. 트릭을 수행하는 것처럼 보입니다 : TCustomTransparentControl. 그것을 사용하는 방법에 대한 자세한 내용은 http://stackoverflow.com/questions/6682396/transparent-tcustomcontrol을 참조하십시오. –