Delphi FMX, change TComboBox images at runtime

584 views Asked by At

If I programmatically change TComboBox.Images to a new TImageList, only the selected icon in the TComboBox changes, all other icons in the TComboBox (drop-down list) remain the same.

I have two TImageLists, one with color icons and one with black and white icons and I want to change the black and white icons to colored icons and vice versa.

procedure TfrmMain.Button1Click(Sender: TObject);
begin
  if ComboBox1.Images = ImageList1 then
    ComboBox1.Images := ImageList2
  else
    ComboBox1.Images := ImageList1;
end;

enter image description here

1

There are 1 answers

3
Alex Sawers On BEST ANSWER

As pointed in the question comments this is indeed a bug in Delphi as the internal drop down list is not refreshed when changing the Images property after showing the popup at least one time. This can be corrected by making a small change in the FMX.ListBox.pas source file at TCustomComboBox.SetImages procedure:

For Delphi 11:

procedure TCustomComboBox.SetImages(const Value: TCustomImageList);
begin
  FImageLink.Images := Value;
  FItemsChanged := True;        // <- Add this
end;

For Delphi 10.4 CE:

procedure TCustomComboBox.SetImages(const Value: TCustomImageList);
begin
  FImageLink.Images := Value;
  TComboBoxHelper.SetItemsChanged(Self, True);        // <- Add this
end;