TPageControl DrawTab有问题

时间:2011-08-30 09:42:09

标签: delphi ownerdrawn tpagecontrol

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

它可以工作,但是不活动的按钮有灰色(btnFace颜色)边框! enter image description here

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

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;

3 个答案:

答案 0 :(得分:1)

作为解决方法,如果设计适合您 enter image description here ,您可以隐藏当前标签:

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

并添加 TTabSet 具有以下属性:

BackgroundColor := clGradientActiveCaption;
SelectedColor := clGradientActiveCaption;
Style := tsModernTabs

答案 1 :(得分: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;

答案 2 :(得分:0)

请参阅下面的单元,修复Win64bits上的Draw问题

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