Delphi. Удалить границу TabSheet of PageControl

Ваша помощь нужна.

Можно ли удалить границу TabSheet (~ 4px)? Я использую PageControl как панель управления вместо фреймов, окон и т.д. Я хочу, чтобы все было прямо.

Большое спасибо за помощь!

Ответ 1

unit Unit1;

interface

uses
  ...,
  CommCtrl;

type
  TPageControl = class(ComCtrls.TPageControl)
  private
    procedure TCMAdjustRect(var Msg: TMessage); message TCM_ADJUSTRECT;
  end;

  TForm1 = class(TForm)
    ...
  end;

...

procedure TPageControl.TCMAdjustRect(var Msg: TMessage);
begin
  inherited;
  if Msg.WParam = 0 then
    InflateRect(PRect(Msg.LParam)^, 4, 4)
  else
    InflateRect(PRect(Msg.LParam)^, -4, -4);
end;

...

end.

Ответ 2

Если вы не возражаете против использования сторонних инструментов, самым простым решением, вероятно, будет использование TjvPageControl из JVCL. Он имеет свойство ClientBorderWidth, которое вы ищете.

Ответ 3

Альтернативой является использование TTabSet с TPageControl: в событии onCreate формы поместите этот код, чтобы скрыть вкладку.

procedure TMainForm.FormCreate(Sender: TObject);
var
    I : Integer;
begin
   for I := 0 to Pred(PageControl1.PageCount) do
       PageControl1.Pages[I].TabVisible := False;
   PageControl1.Style := tsFlatButtons;
   PageControl1.ActivePageIndex := 0;

   TabSet1.Style := tsModernPopout;
   TabSet1.SelectedColor := clMoneyGreen;
   TabSet1.UnselectedColor := clGradientActiveCaption;
   TabSet1.SelectedColor := clGradientActiveCaption;
end;


procedure TMainForm.TabSet1Change(Sender: TObject; NewTab: Integer;
  var AllowChange: Boolean);
begin
   PageControl1.ActivePageIndex := NewTab;
end;