如何修改pagecontrol上标签的底色(50分)

  • 主题发起人 主题发起人 Watson_99
  • 开始时间 开始时间
W

Watson_99

Unregistered / Unconfirmed
GUEST, unregistred user!
如何修改pagecontrol上标签标题的底色?
 
我也想知道,搞定了摆脱通知一声。谢了
 
修改PageControl的源代码就可以做到!
 
自己继承PageControl再写一个控件.
 
还有,用OwnerDraw也可以,不过效果不是很好看!
你还是用Panel和SpeedButton + PageControl来作罢。
我就是这么做的,效果很不错哦。
用一个Panel,里面放置SpeedButton,Flat:=True;
然后放一个PageControl,重要的是,必须把PageControl中的TableSheet的TabVisaible:=False
然后自己手动切换TabSheet就可以了。
 
to Kingron,
你的想法很好(用一组SpeedButton代替PageControl的标签),但并不能从根本上解决我的问题。
另外,想问你一个问题:修改PageControl的源代码怎么做?用什么工具?
热切期盼回音
 
我也想知道,解决了的话,烦请通知一声,不胜感激。
yumq@163.com
 
我是OwnerDraw,效果也还可以吧
 
我试了OwnerDraw,但标题上的文字均消失了。
不知是我的属性设置不对,还是OwnerDraw的效果就是如此?
望众位高手们赐教。万分感谢。
 
设了OwnerDraw之后,你就要在OnDrawTab事件里将文字写上去
 
哎,还是用SpeedButton吧。用OwnerDraw和修改源代码的方式,效果都不是很好!
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;
type
TTabsheet = class(ComCtrls.TTabSheet)
private
FColor: TColor;
procedure SetColor(value: TColor);
procedure WMEraseBkGnd(var msg: TWMEraseBkGnd);
message WM_ERASEBKGND;
public
constructor Create(aOwner: TComponent); override;
property Color: TColor read FColor write SetColor;
end;

type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
procedure FormCreate(Sender: TObject);
procedure PageControl1DrawTab(Control: TCustomTabControl;
TabIndex: Integer; const Rect: TRect; Active: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;


implementation

{$R *.dfm}

constructor TTabsheet.Create(aOwner: TComponent);
begin
inherited;
FColor := clBtnFace;
end;

procedure TTabsheet.SetColor(value: TColor);
begin
if FColor <> value then begin
FColor := value;
Invalidate;
end;
end;

procedure TTabsheet.WMEraseBkGnd(var msg: TWMEraseBkGnd);
begin
if FColor = clBtnFace then
inherited
else begin
Brush.Color := FColor;
Windows.FillRect(msg.dc, Clientrect, Brush.handle);
msg.result := 1;
end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Tabsheet1.color := clWhite;
TabSheet2.color := clLime
end;

// PageControl1.OwnerDraw := true !


procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
AText: string;
APoint: TPoint;
begin

with (Control as TPageControl).Canvas do
begin
Brush.Color := clred;
FillRect(Rect);
AText := TPageControl(Control).Pages[TabIndex].Caption;
with Control.Canvas do
begin
APoint.x := (Rect.Right - Rect.Left) div 2 - TextWidth(AText) div 2;
APoint.y := (Rect.Bottom - Rect.Top) div 2 - TextHeight(AText) div 2;
TextRect(Rect, Rect.Left + APoint.x, Rect.Top + APoint.y, AText);
end;
end

end;

end.

 
多人接受答案了。
 
后退
顶部