德尔福。删除PageControl的TabSheet边框

时间:2011-06-08 05:38:48

标签: delphi tabs border

需要你的帮助。

是否可以删除TabSheet(~4px)的边框?我使用PageControl作为开关面板而不是框架,窗户等。我希望一切都会笔直。

非常感谢您的帮助!

4 个答案:

答案 0 :(得分:20)

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.

答案 1 :(得分:6)

如果您不介意使用第三方工具,那么最简单的解决方案可能是使用来自JVCL的TjvPageControl。它具有您正在寻找的ClientBorderWidth属性。

答案 2 :(得分:1)

如今,这就是答案。不需要任何代码破解
也许您使用了主题,如果没有,则应该使用该技术:

  • 项目选项>应用程序>外观

  • 将其中一项作为默认样式选中)

    比:

  • 工具>位图样式设计器>打开样式
  • 导航您的vsf样式文件
    (可能就在这里 “ C:\ Users \ Public \ Documents \ Embarcadero \ Studio [VERSION] \ Styles

  • 现在在位图样式设计器中。.导航至:
    对象>标签>框架>位图

  • 在检查器中单击[...]位图的三个点按钮
  • 放大至800%
  • 平移/滚动并专注于位图矩形范围。
  • 鼠标右键单击以更改左上,鼠标左键单击以更改右下 地区。
    (因此选择内部矩形以消除边框位图 现在您有了无边界的页面控件)

答案 3 :(得分:0)

另一种方法是将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;