procedure TPageControlEx.CloseBtnClick(Sender: TObject);
begin
if Self.ActivePage <> nil then
Self.ActivePage.Free;
if Self.ActivePage = nil then
FCloseBtn.Hide;
end;
destructor TPageControlEx.Destroy;
begin
FCloseBtn.Free;
inherited;
end;
procedure TPageControlEx.DrawTab(TabIndex: Integer; const Rect: TRect;
Active: Boolean);
var
NewTabWidth: Integer;
R: TRect;
begin
inherited;
NewTabWidth := Canvas.TextWidth(Tabs[TabIndex]) + 24;
if (Rect.Right - Rect.Left) < NewTabWidth then
TabWidth := NewTabWidth;
TabCtrl_GetItemRect(Handle, TabIndex, R);
if Active then
begin
FCloseBtn.Parent := Self;
FCloseBtn.Left := Rect.Left + 2;
FCloseBtn.Top := Rect.Top + 2;
FCloseBtn.Show;
Canvas.TextOut(R.Left + 20, R.Top + 2, Tabs[TabIndex]);
end
else begin
Canvas.TextOut(R.Left + 2, R.Top + 2, 'X');
Canvas.TextOut(R.Left + 16, R.Top + 2, Tabs[TabIndex]);
end;
end;
procedure TForm1.btnAddBtnClick(Sender: TObject);
begin
with TTabSheet.Create(PC) do
begin
PageControl := PC;
Caption := 'hello world';
end;
with TTabSheet.Create(PC) do
begin
PageControl := PC;
Caption := '你好,世界';
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
PC := TPageControlEx.Create(Self);
PC.Parent := Self;
end;