关于覆盖父类属性的问题?? (50分)

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

wab

Unregistered / Unconfirmed
GUEST, unregistred user!
我从TPanel 继承一个子类,因我要改变Panel的位置, <<-- 是Captin的位置
所有要覆盖父类的属性Caption.
这要怎么做呢??
急!!!在线等待~~~~~~~~~~~~
 
你为什么要 Override TPanel.caption?
 
因我要改变Panel的Caption的位置
 
你可以让:Caption :='';
然后:TPanel.TextOut(...);
 
你可以让:Caption :='';
然后:TPanel.TextOut(...);

那这一段要写在哪,才能让用户在更改了Caption后能执行呢?
 
其实你要更改位置,只要覆盖画的方法阿
 
对啊,你找找PANEL的CAPTION在那里被写的,然后继承PANEL,修改他的CAPTION属性
的写方法就可以了!(不好意思,好象说了等于没说)
 
To varphone:
TPanel 类有 TextOut 方法吗???
To wab:
Alignment 属性就可以改变 Caption 的位置,不知你要怎么改?
shenloqi说的得对,只要覆盖 Paint 方法就行了。
 
覆盖TPanel的Paint方法就可以了,如下:
procedure TCustomPanel.Paint;
const
Alignments: array[TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER);
var
Rect: TRect;
TopColor, BottomColor: TColor;
FontHeight: Integer;
Flags: Longint;

procedure AdjustColors(Bevel: TPanelBevel);
begin
TopColor := clBtnHighlight;
if Bevel = bvLowered then TopColor := clBtnShadow;
BottomColor := clBtnShadow;
if Bevel = bvLowered then BottomColor := clBtnHighlight;
end;

begin
Rect := GetClientRect;
if BevelOuter <> bvNone then
begin
AdjustColors(BevelOuter);
Frame3D(Canvas, Rect, TopColor, BottomColor, BevelWidth);
end;
Frame3D(Canvas, Rect, Color, Color, BorderWidth);
if BevelInner <> bvNone then
begin
AdjustColors(BevelInner);
Frame3D(Canvas, Rect, TopColor, BottomColor, BevelWidth);
end;
with Canvas do
begin
if not ThemeServices.ThemesEnabled or not ParentBackground then
begin
Brush.Color := Color;
FillRect(Rect);
end;
Brush.Style := bsClear;
Font := Self.Font;
FontHeight := TextHeight('W');
with Rect do
begin
Top := ((Bottom + Top) - FontHeight) div 2;
Bottom := Top + FontHeight;
end;
Flags := DT_EXPANDTABS or DT_VCENTER or Alignments[FAlignment];
Flags := DrawTextBiDiModeFlags(Flags);
DrawText(Handle, PChar(Caption), -1, Rect, Flags); //修改此处,把Caption改变到你想要的位置就可以了
end;
end;
 
后退
顶部