Delphi FMX,在运行时更改 TComboBox 图像
Delphi FMX, change TComboBox images at runtime
如果我以编程方式将 TComboBox.Images 更改为新的 TImageList,只有 TComboBox 中选定的图标发生变化,TComboBox(下拉列表)中的所有其他图标保持不变。
我有两个 TImageList,一个是彩色图标,一个是黑白图标,我想将黑白图标更改为彩色图标,反之亦然。
procedure TfrmMain.Button1Click(Sender: TObject);
begin
if ComboBox1.Images = ImageList1 then
ComboBox1.Images := ImageList2
else
ComboBox1.Images := ImageList1;
end;
正如问题评论中所指出的,这确实是 Delphi 中的一个错误,因为至少在显示弹出窗口后更改 Images
属性 时内部下拉列表不会刷新一度。这可以通过在 TCustomComboBox.SetImages
过程中对 FMX.ListBox.pas
源文件进行小的更改来纠正:
对于 Delphi 11:
procedure TCustomComboBox.SetImages(const Value: TCustomImageList);
begin
FImageLink.Images := Value;
FItemsChanged := True; // <- Add this
end;
对于 Delphi 10.4 CE:
procedure TCustomComboBox.SetImages(const Value: TCustomImageList);
begin
FImageLink.Images := Value;
TComboBoxHelper.SetItemsChanged(Self, True); // <- Add this
end;
如果我以编程方式将 TComboBox.Images 更改为新的 TImageList,只有 TComboBox 中选定的图标发生变化,TComboBox(下拉列表)中的所有其他图标保持不变。
我有两个 TImageList,一个是彩色图标,一个是黑白图标,我想将黑白图标更改为彩色图标,反之亦然。
procedure TfrmMain.Button1Click(Sender: TObject);
begin
if ComboBox1.Images = ImageList1 then
ComboBox1.Images := ImageList2
else
ComboBox1.Images := ImageList1;
end;
正如问题评论中所指出的,这确实是 Delphi 中的一个错误,因为至少在显示弹出窗口后更改 Images
属性 时内部下拉列表不会刷新一度。这可以通过在 TCustomComboBox.SetImages
过程中对 FMX.ListBox.pas
源文件进行小的更改来纠正:
对于 Delphi 11:
procedure TCustomComboBox.SetImages(const Value: TCustomImageList);
begin
FImageLink.Images := Value;
FItemsChanged := True; // <- Add this
end;
对于 Delphi 10.4 CE:
procedure TCustomComboBox.SetImages(const Value: TCustomImageList);
begin
FImageLink.Images := Value;
TComboBoxHelper.SetItemsChanged(Self, True); // <- Add this
end;