- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过创建派生自该组件的自己的组件来扩展 TActionMainMenuBar。
我想做的一件事是允许沿着菜单栏绘制渐变。我已经设法做到了这一点,但当分配的 TActionManager 设置为 XPStyle 时,菜单项出现问题。
查看这些具有不同 TActionManager 样式集的图像:
平台默认(鼠标悬停并按下):
当 TActionManager 设置为 Platform Default 时,背景会正确显示,您可以看到渐变效果很好。
但是,当 TActionManager 设置为 XPStyle 时,某些项目的渐变绘制不正确,只需查看第一项:
XP 样式(鼠标悬停并按下):
如您所见,外观不太好。
我已经在“画图”中编辑了图像,以粗略地了解我希望它的外观:
鼠标悬停并选择
我认为这将允许创建一些有趣的菜单样式。
这是我到目前为止的代码:
unit uMyMenu;
interface
uses
Classes,
Types,
Graphics,
GraphUtil,
ActnMan,
ActnCtrls,
ActnMenus,
PlatformDefaultStyleActnCtrls,
XPActnCtrls,
XPStyleActnCtrls;
type
TMyActionMenu = class(TActionMainMenuBar)
private
FColorStart: TColor;
FColorEnd: TColor;
procedure SetColorStart(AValue: TColor);
procedure SetColorEnd(AValue: TColor);
protected
procedure Paint(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property ColorStart: TColor read FColorStart write SetColorStart default clSkyBlue;
property ColorEnd: TColor read FColorEnd write SetColorEnd default clHighlight;
end;
procedure Register;
implementation
{ TMyActionMenu }
constructor TMyActionMenu.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
SetColorStart(clSkyBlue);
SetColorEnd(clHighlight);
ParentBackground := True;
ParentColor := False;
OnPaint := Paint;
end;
destructor TMyActionMenu.Destroy;
begin
inherited;
end;
procedure TMyActionMenu.SetColorStart(AValue: TColor);
begin
if FColorStart <> AValue then
begin
FColorStart := AValue;
Invalidate;
end;
end;
procedure TMyActionMenu.SetColorEnd(AValue: TColor);
begin
if FColorEnd <> AValue then
begin
FColorEnd := AValue;
Invalidate;
end;
end;
procedure TMyActionMenu.Paint(Sender: TObject);
var
Rect: TRect;
begin
Rect := GetClientRect;
GradientFillCanvas(TMyActionMenu(Sender).Canvas, FColorStart,
FColorEnd, Rect, gdVertical);
end;
procedure Register;
begin
RegisterComponents('Standard', [TMyActionMenu]);
end;
end.
我不知道从哪里开始或要更改什么,因此我期待看到您的评论和答案。
更新
例如,将 TActionMainMenuBar 放置在渐变面板内,并将 ParentBackground 设置为 True 更合适。所以我应该考虑使用 SetSubComponent 并将我的 TMyActionMenu 放入类似的面板容器中,然后以这种方式将渐变绘制到面板上。
与此同时,我将保留这个问题以供进一步的评论和建议。
最佳答案
有一个俄罗斯组件也可以进行渐变绘画。我没有测试它,我什至不知道它是否满足您的要求,但也许您可以通过查看他们的源代码得到一些想法。这是链接(我使用谷歌翻译将网站翻译成英文): http://translate.google.com/translate?langpair=ru|en&u=http%3A%2F%2Fwww.roschinspb.narod.ru%2Fdevelop.html
关于delphi - TActionMainMenuBar 渐变绘画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12017787/
我正在尝试通过创建派生自该组件的自己的组件来扩展 TActionMainMenuBar。 我想做的一件事是允许沿着菜单栏绘制渐变。我已经设法做到了这一点,但当分配的 TActionManager 设置
使用TActionMainMenuBar时,有没有办法将Actions组件和子菜单从右向左对齐? 改变比迪烟似乎没有改变 将 Bidiparent 设置为 false 没有帮助 将 Align 更改为
我希望从我的应用程序中可以选择切换主菜单的显示。 仍然可以通过工具栏等使用功能,因此隐藏菜单不会带走任何内容。隐藏菜单实际上是用户的一个 GUI 选择。 无论如何,我的主菜单是使用 TActionMe
我一直在开发一个 VCL 程序,并且正在添加用于放置列出一组文件的“最近文件”下拉子菜单的代码。对于这个程序,我填充了 tActionManager 和 tActionMainMenuBar。在标准
我使用 TActionMainMenuBar 来显示基于 TActions 的菜单。我通过设置相同的 GroupIndex 对操作进行分组。因此它们可以像 RadioGroup 一样操作,但问题是绘制
我有一个带有主表单的应用程序。在此表单中,我放置了三个 TActionMainMenuBar,因为应用程序本质上以三种不同的模式运行。 菜单栏都是由主窗体上的 TActionManager 中存储(代
TActionMainMenuBar 在绘制没有子项的根元素时存在错误。 使用Delphi XE2/w7-32位** 如何重现: 使用 TActionMainMenuBar 构建菜单,向其中添加一些操
我最近偶然发现了一种非常奇怪的行为。当我在程序中使用 TActionMainMenuBar(或 TActionToolBar)、编译并运行,然后启动 Photoshop CS5 或 Internet
我需要帮助尝试让 & 字符显示在 Delphi XE6 VCL TActionMainMenuBar 中。我在 Stack Overflow 上遇到过类似的请求,但没有一个能直接解决我遇到的问题。 在
通常可以像这样更改 TActionMainMenuBar 或 TMainMenu 的字体: Screen.MenuFont.Name := 'Calibri'; 当使用 Vcl 样式时,如果为组件注册
我正在努力尝试在 TActionMainMenuBar 中显示提示。德尔福XE2。 我正在运行时创建菜单。我添加类别、子项目,清除菜单,一切都很好。单击菜单项可以正常工作(目前它只是使用操作项标记
TActionMainMenuBar没有此功能。 TActionToolBar 会自动添加 Chevron,但此菜单有一些自定义命令。 如何将此功能添加到 TActionMainMenuBar 并隐藏
我正在尝试使 TActionMainMenuBar 像 TMainMenu 一样显示样式化的 MDI 按钮。 有什么建议吗?我无法停止在这个项目中使用 MDI。 最佳答案 好的,首先这不是一个 Vcl
我是一名优秀的程序员,十分优秀!