我有一个 TMainMenu 链接到包含图像的 TImageList 。当菜单项被禁用 (Enabled=False) 时,图像显示为黑色。但是,我使用的是两个屏幕,它只在其中一个屏幕上显示为黑色。屏幕的主要区别在于,一个是较小的笔记本电脑屏幕,在 Windows 显示设置中的比例设置为 125%,另一个是较大的屏幕,比例设置为 100%。图标在屏幕上显示为黑色,比例设置为 100%。如果我将两个屏幕设置为相同的比例(125% 或 100%),则不会出现问题。它仅在比例不同时出现在一个屏幕上。另请注意,应用程序窗口最初是在不显示问题的屏幕上创建的。除了黑色之外,出现问题的屏幕上的图像也似乎更小,
这在 VCL 应用程序中不是问题,只有 FMX。
请参阅下面从每个屏幕捕获的快照。两个菜单项都设置为 Enabled=False。谁能解释为什么会发生这种情况,我能做些什么吗?我正在使用 Rad Studio 10.4。
可重现的示例(包括设置屏幕的说明):
形式:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Menu item image issue'
ClientHeight = 297
ClientWidth = 344
Position = ScreenCenter
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [Desktop]
DesignerMasterStyle = 0
object Button1: TButton
Position.X = 96.000000000000000000
Position.Y = 16.000000000000000000
Size.Width = 137.000000000000000000
Size.Height = 41.000000000000000000
Size.PlatformDefault = False
Text = 'Toggle Undo Enabled'
OnClick = Button1Click
end
object Memo1: TMemo
Touch.InteractiveGestures = [Pan, LongTap, DoubleTap]
DataDetectorTypes = []
Lines.Strings = (
'Set up 2 screens'
'Set screen 1 to Scale 125% in Display Settings'
'Set screen 2 to Scale 100% in Display Settings'
'Set multiple displays to '#39'Extend these displays'#39
'Run this application. It should appear on screen 1'
'Drag the application window to screen 2'
'The undo menu icon appears black. It does not on screen 1'
'Click the button to enable the undo menu item'
'It no longer appears black on screen 2')
Position.X = 8.000000000000000000
Position.Y = 88.000000000000000000
Size.Width = 329.000000000000000000
Size.Height = 169.000000000000000000
Size.PlatformDefault = False
Viewport.Width = 325.000000000000000000
Viewport.Height = 165.000000000000000000
end
object MainMenu1: TMainMenu
Images = ImageList1
Left = 24
Top = 24
object EditMenuItem: TMenuItem
Text = 'Edit'
object UndoMenuItem: TMenuItem
Enabled = False
Locked = True
Text = 'Undo'
ImageIndex = 0
end
end
end
object ImageList1: TImageList
Source = <
item
MultiResBitmap.LoadSize = 0
MultiResBitmap.TransparentColor = 536870912
MultiResBitmap = <
item
Width = 16
Height = 16
PNG = {
89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
61000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
023C49444154384F85914F48937118C73FAF36B77738B7A94B34959A2548261A
919526051578B06E5DAC5B7531B02E1EFA73AD4B07D92108A2935E0ACCA80E95
749095116D113262A52F9673C6A6CE39E7DCDEB95F73DA0B635B7E2ECFEFDFF7
E1FB7D7E1279B837F4512CAF2730984A3194C944D722EC2E37D37FBA29E77DD6
C1FD51B7980A45D9D7DA4C63B3859528E80C90DA80E83284E6E6A9DA95E2DAE1
5A4D57B45D79F4DE2B3C4B119ABA3BB1B45A708793FC5023789682286937B18A
74B3BA6A1653FA6DC5165A83E1B1387BCF751134C7F128E07AF685C4481CF593
8AEFC51481190894C0465525B79CF3625BB615E1CAE06B116DECC47EB48C555F
18E5ED042F07BAB3E25D1C760AF3890E0C3A100B619A8A93F41DAA94320EE6C2
7A445D71BA26097C0EE4883779DADB29F9A653286B2AAB3633DF03C9CC79A681
BEB8961529C14A7A17FC13C95CE4635DF1628CA9285E1F25C6F474FFD135E012
6727E3A2D51D11271D1E2DDF55C73B6D5D888C039D2EC8AF6F0A45BA52A8AFE1
C693F18CD0547586BEA1AD7521B4AC2D77C644A8ED18B22CD32EAD31FBD589CE
D68EBDC58AFCD3C5E0A5233973D944FBC60EB99CD8EC2AFE9884732185F1F841
E20D82D1C924FE0A1B3DE9388E3733396EB2BAF6DCFD202612665207ACACAB12
06B59AE8869FB80A0DD536EC22C8857AB87E6A8FA6CBB1E578F55B3C77FBF026
4C848D5692260BEAE22C356281F38DA53CEC6DCBD2E4CDB5C9CD9190189C9846
C856F6EB434CDDCE3F83FF52D13F2E3A1EB877FCCA82B45D7EBC8318FE02D9FE
E3D080CDC4750000000049454E44AE426082}
end>
Name = 'undo_icon'
end>
Destination = <
item
Layers = <
item
Name = 'undo_icon'
end>
end>
Left = 272
Top = 24
end
end
单元:
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Menus,
System.ImageList, FMX.ImgList, FMX.Controls.Presentation, FMX.StdCtrls,
FMX.Memo.Types, FMX.ScrollBox, FMX.Memo;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
ImageList1: TImageList;
EditMenuItem: TMenuItem;
UndoMenuItem: TMenuItem;
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
begin
UndoMenuItem.Enabled := not UndoMenuItem.Enabled;
end;
end.