Delphi.Удалить границу TabSheet из PageControl - PullRequest
12 голосов
/ 08 июня 2011

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

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

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

Ответы [ 3 ]

20 голосов
/ 08 июня 2011
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.
6 голосов
/ 08 июня 2011

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

0 голосов
/ 15 мая 2019

Альтернативой является использование 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;
...