首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TPageControl DrawTab的麻烦

TPageControl DrawTab的麻烦
EN

Stack Overflow用户
提问于 2011-08-30 17:42:09
回答 3查看 5.1K关注 0票数 1

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

它可以工作,但未激活的按钮有灰色(btnFace颜色)边框!

你知道怎么解决这个问题吗?

代码语言:javascript
复制
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;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-30 22:37:21

作为一种变通办法,如果设计适合您

,您可以隐藏当前选项卡:

代码语言:javascript
复制
  for I := 0 to Pred(PageControl1.PageCount) do
    PageControl1.Pages[I].TabVisible := False;

并添加具有以下属性的TTabSet

代码语言:javascript
复制
BackgroundColor := clGradientActiveCaption;
SelectedColor := clGradientActiveCaption;
Style := tsModernTabs
票数 1
EN

Stack Overflow用户

发布于 2012-08-09 17:03:04

我知道这是一个非常古老的帖子,但由于它没有一个完整的答案,我也有同样的问题,并最终找到了如何做,我想我应该让你知道…

此外,如果某些选项卡将tabvisible设置为False,您的代码也不能很好地工作。我认为解决这个问题的最好方法是使用整数i来循环这些选项卡:

代码语言:javascript
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2014-01-28 03:52:59

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7241313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档