- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,我已经知道,当你实现一个TSpeedButton
时,当你分配它的Glyph
时,如果你没有多个字形,那么NumGlyphs
应为 1
,禁用时为 it will automatically use the same image自动生成字形的禁用版本。
但是,在我的情况下,我正在为此速度按钮分配一个操作。 TActionManager
的 Images
和 DisabledImages
都指向同一个 TImageList
。我还测试了根本没有分配任何 DisabledImages
的情况,以及使用全黑蒙版创建图像的副本,并通过 DisabledImages
分配该副本。
启用后,字形显示得很好(基于操作上设置的图像)。但当它被禁用时,仅图像中的纯黑色将用于禁用图像。任何具有除纯黑色之外的任何颜色的颜色,甚至稍微偏黑的颜色,都将被完全忽略,并且在渲染禁用图像时不包括在内。
这是测试启用的图像和自动生成的禁用图像之间的比较。该图像只是带有一些垂直线的 16x16 位图。从最右边开始,有一条全黑的线,然后是左边稍浅的线。
如您所见,禁用时,它只考虑全黑线。下一条线仅比全黑稍浅。
我无法自己分配Glyph
属性,因为它会被分配给它的操作覆盖。我也无法在图像列表上设置两个字形宽的图像,因为这些图像广泛用于许多其他没有多个字形概念的地方。我也不想为我的图像使用全黑。
如何让禁用的 TSpeedButton
(由于禁用 TAction
的结果)在分配有操作时显示禁用(灰显)图像?
注意:TBitBtn
或任何依赖于 Glyph
的控件也会发生同样的情况。
u44169002.pas
unit u44169002;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Buttons, System.ImageList,
Vcl.ImgList, System.Actions, Vcl.ActnList, Vcl.PlatformDefaultStyleActnCtrls, Vcl.ActnMan, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Actions: TActionManager;
actTest: TAction;
ImageList: TImageList;
SpeedButton1: TSpeedButton;
BitBtn1: TBitBtn;
procedure actTestExecute(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.actTestExecute(Sender: TObject);
begin
Self.actTest.Enabled:= False;
end;
end.
u44169002.dfm
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 231
ClientWidth = 405
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object SpeedButton1: TSpeedButton
Left = 24
Top = 24
Width = 105
Height = 33
Action = actTest
Flat = True
end
object BitBtn1: TBitBtn
Left = 160
Top = 24
Width = 105
Height = 33
Action = actTest
Caption = 'Test Action'
TabOrder = 0
end
object Actions: TActionManager
DisabledImages = ImageList
Images = ImageList
Left = 24
Top = 128
StyleName = 'Platform Default'
object actTest: TAction
Caption = 'Test Action'
Hint = 'This is just a test action'
ImageIndex = 0
OnExecute = actTestExecute
end
end
object ImageList: TImageList
Left = 24
Top = 72
Bitmap = {
494C010101000800440010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000400000001000000001002000000000000010
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000082828200000000006B6B6B000000
0000555555000000000041414100000000002D2D2D00000000001D1D1D000000
00000C0C0C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000082828200000000006B6B6B000000
0000555555000000000041414100000000002D2D2D00000000001D1D1D000000
00000C0C0C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000082828200000000006B6B6B000000
0000555555000000000041414100000000002D2D2D00000000001D1D1D000000
00000C0C0C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000082828200000000006B6B6B000000
0000555555000000000041414100000000002D2D2D00000000001D1D1D000000
00000C0C0C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000082828200000000006B6B6B000000
0000555555000000000041414100000000002D2D2D00000000001D1D1D000000
00000C0C0C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000082828200000000006B6B6B000000
0000555555000000000041414100000000002D2D2D00000000001D1D1D000000
00000C0C0C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000082828200000000006B6B6B000000
0000555555000000000041414100000000002D2D2D00000000001D1D1D000000
00000C0C0C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000082828200000000006B6B6B000000
0000555555000000000041414100000000002D2D2D00000000001D1D1D000000
00000C0C0C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000082828200000000006B6B6B000000
0000555555000000000041414100000000002D2D2D00000000001D1D1D000000
00000C0C0C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000082828200000000006B6B6B000000
0000555555000000000041414100000000002D2D2D00000000001D1D1D000000
00000C0C0C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000082828200000000006B6B6B000000
0000555555000000000041414100000000002D2D2D00000000001D1D1D000000
00000C0C0C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000082828200000000006B6B6B000000
0000555555000000000041414100000000002D2D2D00000000001D1D1D000000
00000C0C0C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000082828200000000006B6B6B000000
0000555555000000000041414100000000002D2D2D00000000001D1D1D000000
00000C0C0C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000082828200000000006B6B6B000000
0000555555000000000041414100000000002D2D2D00000000001D1D1D000000
00000C0C0C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000424D3E000000000000003E000000
2800000040000000100000000100010000000000800000000000000000000000
000000000000000000000000FFFFFF00FFFF0000000000005555000000000000
5555000000000000555500000000000055550000000000005555000000000000
5555000000000000555500000000000055550000000000005555000000000000
5555000000000000555500000000000055550000000000005555000000000000
5555000000000000FFFF00000000000000000000000000000000000000000000
000000000000}
end
end
为了举例,这是我使用的测试位图:
<小时/>事实上,在Vcl.Buttons
单元中,在函数TButtonGlyph.CreateButtonGlyph
中,以下代码似乎明确只考虑黑色区域:
{ Create a disabled version }
with MonoBmp do
begin
Assign(FOriginal);
HandleType := bmDDB;
Canvas.Brush.Color := clBlack;
Width := IWidth;
if Monochrome then
begin
Canvas.Font.Color := clWhite;
Monochrome := False;
Canvas.Brush.Color := clWhite;
end;
Monochrome := True;
end;
with TmpImage.Canvas do
begin
Brush.Color := clBtnFace;
FillRect(IRect);
Brush.Color := clBtnHighlight;
SetTextColor(Handle, clBlack);
SetBkColor(Handle, clWhite);
BitBlt(Handle, 1, 1, IWidth, IHeight,
MonoBmp.Canvas.Handle, 0, 0, ROP_DSPDxax);
Brush.Color := clBtnShadow;
SetTextColor(Handle, clBlack);
SetBkColor(Handle, clWhite);
BitBlt(Handle, 0, 0, IWidth, IHeight,
MonoBmp.Canvas.Handle, 0, 0, ROP_DSPDxax);
end;
最佳答案
将速度按钮放在组框上并禁用组框,您不需要禁用字形,但仍然只有 1 个图像图像将在那里,但按钮仍然明显被禁用
关于delphi - 带 TAction 的 TSpeedButton - 自动生成的禁用图像仅考虑黑色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44169002/
在Delphi XE5中:我的窗体上有一个TActionManager(称为ActionManager)和一个TRibbon(称为Ribbon)。我正在添加这样的自定义操作: ActionBar :=
我发现(在 Delphi 2010 中)快捷方式总是以具有该操作的第一个窗体(由主窗体拥有)结束,而不是当前聚焦的窗体。我的 TMainFrm 拥有多个 TViewFrm。每个都有一个 TAction
用户可以通过多种方式触发操作(TAction)执行:快捷键、工具栏按钮、弹出菜单按钮等。是否可以获取该操作如何被触发的信息? 我只是在考虑事件日志的实现,以找出在 GUI 中使用不同功能的最流行的方法
我在 Form2 上有一个 Action 列表 (actlst11),它被放置在运行时 TTabSheet 上来自主窗体的页面控件(如 here )。 我添加了一个快捷方式 Num +对于 actZo
我想稍微简化将表单状态保存到磁盘的过程。我使用我自己的从 TIniFile 派生的 INI 文件类来读取表单中“所有”控件的状态。像这样的东西: procedure TMyIniFile.Read(C
我正在使用 Delphi TActionList,带有用于某些操作的快捷键。 我想防止某些操作被键盘自动重复多次触发,但我不想全局影响自动重复操作。最好的方法是什么? 澄清:我仍然需要处理多个快速按键
我有 2 个表单,我想共享一个 TActionManager 并分配了 TAction-s。 第一个表单是主表单 - 它包含 TActionManager、TAction 以及标题“Action”。
我有一些菜单项,其操作如下: procedure TMISMainFrm.ActiSalesInvoiceExecute(Sender: TObject); begin if CheckMdiLi
在Delphi XE7中,我使用这个技巧根据ListView中的项目是否被选择来自动启用或禁用工具栏按钮(“编辑ListView项目”),以防止用户单击该按钮(如果有)没有选择 ListView 项目
我为带有 TAction 列表的 TActionClientItem 创建了一个下拉菜单。我想知道如何 Hook 菜单或其中每个 TAction 的绘图事件以以不同的方式显示这些 TAction 的标
在我的自定义组件中,我创建了一些 TAction-s 作为子组件。它们都已发布,但我无法在设计时分配它们,因为它们无法通过对象检查器获得。 如何让对象检查器“可迭代”它们?我尝试将操作的所有者设置为自
我刚刚使用了Delphi TAction 的SecondaryShortCuts-Feature。但快捷键是由字符串定义的,例如“F5”或“Shift+F5”。现在的问题是:在我的德语 Windows
我有一个 TAction,可用于菜单项和 TButton。我希望菜单项显示标签,并且 TButton 仅显示图标。但是,当分配一个 Action 时,Vcl 会自动设置 TButton 的 Capti
我有一个带有面板的表单。 我在运行时创建框架,并通过将框架的父属性设置为面板来将它们显示在面板上。 创建面板时,我不设置所有者属性,因为我自己管理框架的生命周期。 到目前为止我没有遇到任何问题。接下来
首先,我已经知道,当你实现一个TSpeedButton时,当你分配它的Glyph时,如果你没有多个字形,那么NumGlyphs 应为 1,禁用时为 it will automatically use
我正在开发一个Word插件,不知何故,TAction.ShortCut中定义的快捷方式总是被触发多次,这对我来说很棘手,很难解决,所以我求助于TForm.OnKeyDown事件并清除了所有TActio
我已经尝试过这个: actZoomReset.ShortCut := TextToShortCut('Ctrl+Num 0'); 但这没有任何作用(ShortCut = 0)。 编辑: 如果我尝试在
我已经尝试过这个: actZoomReset.ShortCut := TextToShortCut('Ctrl+Num 0'); 但这没有任何作用(ShortCut = 0)。 编辑: 如果我尝试在
如果 TAction 链接到对象,例如 TToolButton(TToolBar 的项目)或 TActionClientItem( TActionToolBar 的项目)并且该对象在运行时可见,那么每
我是一名优秀的程序员,十分优秀!