Firemonkey中带有图像的组合框



我给TListBoxItem的样式添加了一个TImage。

如果我添加到一个TListBox,它工作。如果我添加到一个TComboBox,它不工作。我甚至不能改变高度,如果项目在TComboBox。

下面是我的示例代码:
procedure TMainForm.FormCreate(Sender: TObject);
const
  BitmapFile : String = 'F:testimage.png';
var
  ItemText : TText;
  ItemImage   : TImage;
  ListBoxItem : TListBoxItem;
  button : TButton;
begin
  ListBoxItem := TListBoxItem.Create(nil);
  ListBoxItem.Parent := CBoxHeadMenuLanguage;
  ListBoxItem.StyleLookup := 'ListBoxItemIconStyle';
  ListBoxItem.Height := 50; //just for test
  ItemText := ListBoxItem.FindStyleResource('text') as TText;
  if Assigned(ItemText) then ItemText.Text := 'Hello World!';
  ItemImage := ListBoxItem.FindStyleResource('image') as TImage;
  if Assigned(ItemImage) then If FileExists(BitmapFile) Then ItemImage.Bitmap.LoadFromFile(BitmapFile);
end;

你真的不应该在FormCreate中做样式,因为样式是根据需要应用的,可以随时删除和重新应用。

相反,你需要使用onapplystylellookup事件或ApplyStyle方法。我建议继承TListBox并使用后者,并添加一个属性来存储位图。

一个大纲类声明应该是:

type TBitmapLBItem = class(TListBoxItem)
  private
    FBitmap: TBitmap;
  protected
    procedure ApplyStyle;override;
  public
    property Bitmap: TBitmap read FBitmap write SetBitmap;
  end;

在ApplyStyle和SetBitmap中使用FindStyleResource等(或创建一个共享方法来完成)

在FormCreate中创建新类的项,并设置适当的位图属性。

对于高度问题,尝试设置组合框的ItemHeight属性。如果你想在列表中设置不同的高度,那你可能就不太走运了。

相关内容

  • 没有找到相关文章

最新更新