如何改变statusbar的颜色,在form的几个事件里改动,但是都没有成功(50分)

  • 主题发起人 nickname
  • 开始时间
N

nickname

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么改动后又自己变回来了,可是它自己又没有什么事件可以写.
 
没有人看看吗
 
是吗?我都改成功了.
除非您在Onpaint event中改动了颜色,这样看起来才不变化
 
我在form.onactive中写了:
statusbar1.Canvas.Brush.color:=clred;
statusbar1.Canvas.FillRect(statusbar1.clientrect);
可是只是一闪,就又变成原来的.
 
应该在什么事件中写,我好象都试了.
是不是根本写的内容不对
 
说话呀,救命啊
 
我是想改里面的字,也想改外面的框,都改
 
1.写的内容可能不对,我用的:
if a then
statusbar1.Color := clRed
else
statusbar1.color := clblue;
在什么时候都是对的.

2.改外面的框我还没试,等一等.
 
好像没有我说的这么简单.............
 
实在不行只能用OwnerDraw来实现了....
 
为什么不直接赋statusbar1.Color属性呢?

如果要自己画子Panel,

Statusbar1.Panels[0].style:=psOwnerDraw;

然后在Statusbar1的OnDrawPanel事件中写:

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
statusbar.Canvas.Brush.color:=clred;
statusbar.Canvas.FillRect(statusbar1.clientrect);
end;
 
我也同意Seakey的后边的意见,可在OnDrawPanel事件中写,只是如果
你想对多个具有自绘方式的StatusBar Panel进行颜色控制,则必须进行
一定的判断,而在其DrawPanel事件中并没有简单在给出,你可使用每一
Panel的Text属性作区分,因在自绘Panel中可以有Text但却不会自己显示
出来。
 
同志们,statusbar.color:=......,这能对吗?
我现在是想把背景(底色)和字的颜色都改了,可能吗?
 
>同志们,statusbar.color:=......,这能对吗?
这是改背景色呀,改字的颜色还要用Paint吧?

ps: 改不了边框。
 
麻烦茶兄再试试statusbar.color:=...,是不是status.canvas.color:=...;
我是想改背景和字.
 
canvas也不对,是brush.color.
其实我改了brush.color,canvas.pen.color,canvas.brush.color
 
下面是TStatusBar的一段源程序,请看:
procedure TStatusBar.CNDrawItem(var Message: TWMDrawItem);
var
SaveIndex: Integer;
begin
with Message.DrawItemStruct^ do
begin
SaveIndex := SaveDC(hDC);
FCanvas.Handle := hDC;
FCanvas.Font := Font;
FCanvas.Brush.Color := clBtnFace;
~~~~~~~~~~~~ 注意这里
FCanvas.Brush.Style := bsSolid;
DrawPanel(Panels[itemID], rcItem);
FCanvas.Handle := 0;
RestoreDC(hDC, SaveIndex);
end;
Message.Result := 1;
end;

因此,要达到你的目的看来如果不用OwnerDraw就只有直接改VCL源程序了.
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
832
DelphiTeacher的专栏
D
D
回复
0
查看
802
DelphiTeacher的专栏
D
D
回复
0
查看
878
DelphiTeacher的专栏
D
D
回复
0
查看
722
DelphiTeacher的专栏
D
顶部