【发布时间】:2012-01-19 13:13:50
【问题描述】:
我正在尝试从使用 Toolbar2000 切换到常规工具栏,因为似乎没有 Delphi XE2 版本,而且看起来它使用了一些程序集,如果我真的不想处理它不必。 (我真的很喜欢 Delphi 工具栏的淡入效果)
但是,我不喜欢按钮的背景得到常规的蓝色按钮处理。我知道如何更改颜色,但我可以不更改颜色并且在按钮周围不画边框吗?
我已经实现了“OnAdvancedCustomDrawButton”,但可用的标志似乎不能正常工作,我不确定它们如何与渐变颜色和热轨道颜色交互,我最终会出现一些奇怪的闪烁或奇怪的现象黑色背景。
这是我创建工具栏的方式
ToolBar1 := TToolBar.Create(Self);
ToolBar1.DoubleBuffered := true;
ToolBar1.OnAdvancedCustomDrawButton := Toolbar1CustomDrawButton;
ToolBar1.Transparent := false;
ToolBar1.Parent := Self;
ToolBar1.GradientEndColor := $7ca0c2; //RGB(194, 160, 124);
ToolBar1.GradientStartColor := $edeeed; //RGB(237, 238, 124);
ToolBar1.Indent := 5;
ToolBar1.Images := Normal;
ToolBar1.DrawingStyle := dsGradient;
ToolBar1.HotImages := Over;
ToolBar1.AutoSize := True;
ToolBar1.Visible := False;
这是我创建按钮的方式(循环):
ToolButton := TToolButton.Create(ToolBar1);
ToolButton.Parent := ToolBar1;
ToolButton.ImageIndex := ToolButtonImages[Index].ImageIndex;
ToolButton.OnClick := ToolButtonClick;
这是我的 AdvancedCustomDrawButton 函数
procedure TMyForm.Toolbar1CustomDrawButton(Sender: TToolBar; Button: TToolButton;
State: TCustomDrawState; Stage: TCustomDrawStage;
var Flags: TTBCustomDrawFlags; var DefaultDraw: Boolean);
begin
Flags := [tbNoEdges, tbNoOffset];
DefaultDraw := True;
end;
【问题讨论】:
-
因为它是delphi,您可以从父对象继承,并且在initialize() 之后,您可以通过在其中覆盖它来设置值,如果您愿意的话,您是否有对象声明的代码示例或您如何实例化对象...?
-
好的,我添加了我的代码,我认为它不一定有帮助,但是你覆盖了什么?我不认为制作我自己的 TToolButton 会有所帮助,因为现有的绘画功能甚至没有完成我想要摆脱的东西。也许我只需要设置
defaultdraw := false并自己做所有事情。 -
你在哪里有这个 ToolBar1 := TToolBar.Create(Self);我想你会想要改变那个实例。我也看不到所有者是谁,我看到了 Parent .. 所以基本上你想创建对象,分配父对象,所有者将是控件所在的表单或面板,然后设置你的属性/创建它Initialize() 你想要一个 Inherited 行。我在这台笔记本电脑上没有 delphi,它在我的另一台笔记本电脑上。
标签: delphi colors toolbar highlighting