控件制作初学者的困扰,请帮忙看看。(100分)

  • 主题发起人 主题发起人 叮叮当当
  • 开始时间 开始时间

叮叮当当

Unregistered / Unconfirmed
GUEST, unregistred user!
我想以 TPageControl 为父类派生一个新控件,使 Tab 的标题文字可以改变颜色并具有闪烁功能。
但我找遍了 ComCtrls 单元,都看不到 TPageControl 和 TCustomTabControl 是怎样绘制控件的,这是怎么回事?
 
绘制控件:
PageControl1.Canvas.draw
PageControl1.Canvas.textout
等等
 
我是说在ComCtrls单元里找不到任何关于 TPageControl 甚至它的父类 TCustomTabControl 是怎样具体绘制出来的代码,而如果能看得到的话我就可以决定重载哪些过程或是属性。
 
再往上一層找
 
TPageControl类里面的页是TTabSheet类组成的,你试试看修改TTabSheet类如何。
我没有试过,不知道能不能行!
 
To: 宁柯
我要改的是TPageControl的Tab(标签)字体颜色并使其具有闪烁功能(黑色<->红色),不是TPageControl的页面。而且TTabSheet也在ComCtrls单元里,整个ComCtrls单元里我都找不到任何实际绘制控件界面的代码。。。
 
试试看,按住Ctrl点击你需要的父类,会给你好多东西。

不要老往comctrl里面找。要继承就找根源。
 
試試TCustomTabControl.DrawTab
 
TPageControl 的父类是 TCustomTabControl,TCustomTabControl 的父类就是 TWinControl 了(到顶了)。

所以在 TCustomTabControl 里看不到具体绘制控件的代码我就绝望了。[:(]
看看下面 TCustomTabControl 仅有的一点点与控件绘制相关的代码吧:

procedure TCustomTabControl.CNDrawItem(var Message: TWMDrawItem);
var
SaveIndex: Integer;
begin
with Message.DrawItemStruct^ do
begin
SaveIndex := SaveDC(hDC);
FCanvas.Lock;
try
FCanvas.Handle := hDC;
FCanvas.Font := Font;
FCanvas.Brush := Brush;
DrawTab(itemID, rcItem, itemState and ODS_SELECTED <> 0);
finally
FCanvas.Handle := 0;
FCanvas.Unlock;
RestoreDC(hDC, SaveIndex);
end;
end;
Message.Result := 1;
end;

就一句 DrawTab(itemID, rcItem, itemState and ODS_SELECTED <> 0); 就完成了 TabControl 的界面绘制?来看看 DrawTab 做了点什么:

procedure TCustomTabControl.DrawTab(TabIndex: Integer; const Rect: TRect;
Active: Boolean);
begin
if Assigned(FOnDrawTab) then
FOnDrawTab(Self, TabIndex, Rect, Active) // 这里是交给OwnerDraw=True时用户的代码去画Tab。
else
FCanvas.FillRect(Rect); // 这里仅仅在 Rect 框里用单色涂了一层而已。
end;
 
没错, 因为tab的draw是由windows完成的。
 
我有做,联系我我给你源码!
 
给我一份
huaxiangji163@163.com
谢谢
 
晓风月:老大,给我一份,我想学
hgl54321@etang.com
 
我也找了很久,也没有找到,我认为是windows画的标准控件
 
我也要一份:
delphi21@163.com
 
lyc@hec-china.com
我也要
 
后退
顶部