TSpeedButton with TAction - 自动生成的禁用图像仅考虑黑色

时间:2017-05-24 21:46:59

标签: delphi delphi-10.1-berlin tactionmanager

首先,我已经知道,当您实施TSpeedButton时,当您分配其Glyph时,如果您没有多个字形,那么NumGlyphs应该是1,当它被禁用时,it will automatically use the same image自动生成字形的禁用版本。

但是,在我的情况下,我正在为此速度按钮分配一个动作。 TActionManager ImagesDisabledImages都指向同一个TImageList。我还测试了没有分配任何DisabledImages,以及使用全黑蒙版创建图像的副本,并通过DisabledImages分配。

启用时,字形显示正常(基于操作上设置的图像)。但是当它被禁用时,图像中只有纯黑色将用于禁用的图像。除了纯黑色,甚至略微偏黑的任何颜色之外的任何颜色都被完全忽略,并且在渲染禁用的图像时不包括在内。

以下是测试启用图像与自动生成的禁用图像之间的比较。图像只是一个16x16位图,有一些垂直线。从最右边开始,一条完全黑色的线条,然后是它左边略微更亮的线条。

Comparing actions enabled and disabled

如您所见,禁用时,它只考虑完全黑线。下一行只比完全黑色轻一点。

我无法自己分配Glyph属性,因为它将被分配给它的操作覆盖。我也无法在图像列表上设置双字形宽图像,因为这些图像广泛用于许多其他没有多个字形概念的地方。我也不想对我的图像使用全黑。

如果将已禁用({1}}的图像分配给某个已停用(灰显)的图像,如何将其禁用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

为了举例,这里是我使用的测试位图:

Test Bitmap

事实上,在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

1 个答案:

答案 0 :(得分:0)

将speedbutton放在一个分组框上并禁用该分组框,您不需要禁用的字形并且仍然只有1张图像 图像将在那里,但按钮仍然清晰可见