1

我将 TPageControl 样式设置为平面按钮 ( tsFlatButtons),并使用事件更改选项卡的按钮颜色OnDrawTab

它可以工作,但未激活的按钮有灰色(btnFace 颜色)边框! 在此处输入图像描述

知道如何解决这个问题吗?

procedure TForm1.PageControlDrawTab(Control: TCustomTabControl;
          TabIndex: Integer; const Rect: TRect; Active: Boolean);

var
  AText: string;
  ARect: TRect;

begin
  with (Control as TPageControl).Canvas do
  begin
    ARect := Rect;
    OffsetRect(ARect, 0, 4);

    Brush.Color := COLOR1;
    FillRect(Rect);

    AText := TPageControl(Control).Pages[TabIndex].Caption;

    with Control.Canvas do   
      DrawText(Control.Canvas.Handle, PChar(AText), -1,ARect, DT_CENTER or DT_SINGLELINE);

  end;
end;
4

3 回答 3

1

作为一种解决方法,如果设计适合您 在此处输入图像描述 ,您可以隐藏当前选项卡:

  for I := 0 to Pred(PageControl1.PageCount) do
    PageControl1.Pages[I].TabVisible := False;

并添加 具有以下属性的TTabSet :

BackgroundColor := clGradientActiveCaption;
SelectedColor := clGradientActiveCaption;
Style := tsModernTabs
于 2011-08-30T14:37:21.100 回答
1

我知道这是一个非常古老的帖子,但由于它没有完整的答案,而且我遇到了同样的问题,最后找到了解决方法,我想我应该让你知道......

此外,如果某些选项卡的 tabvisible 设置为 False,您的代码也无法正常工作这是我认为解决此问题的最佳方法,使用整数 i 循环选项卡:

for I := 0 to TPageControl(Control).PageCount-1 do
  if TPageControl(Control).Pages[I].TabIndex = TabIndex then
begin
  FillRect(Control.Canvas.Handle,aRect,Control.Canvas.Brush.Handle);
  // Do your text drawing here
  break;
end;
于 2012-08-09T09:03:04.400 回答
0

请参阅下面的此单元,以修复 Win64 位上的绘图问题

https://forums.embarcadero.com/thread.jspa?messageID=292598

于 2014-01-27T19:52:58.643 回答