user-interface - 如何以编程方式将图像插入 FireMonkey 中的图像列表?

标签 user-interface firemonkey delphi-xe8

我尝试填充 TListView

当前代码

MyList.Items.Clear;
 for I := 0 to List.Count-1 do
  begin
  Item:=  MyList.Items.Add;
  Item.Text:= List[i];

  si:=ImageList.Source.Add;
  src:='https://pixabay.com/static/uploads/photo/2015/10/01/21/39/background-image-967820_960_720.jpg';
  ms:=LoadWebImage(src);
  si. MultiResBitmap.LoadItemFromStream( ms,100);

  Item.ImageIndex := i;

  end;

图片加载无误

 function LoadWebImage(url: string) : TMemoryStream;
        var
          idhttp : TIdHTTP;
        begin
          IdHTTP := TIdHTTP.Create(nil);
          Result := TMemoryStream.Create;
          try
            idhttp.Get (url, Result);
            Result.Position := 0;
          finally
            idhttp.Free;
          end;
        end;

结果我手动添加测试时只看到文本和一张图片

ItemAppeariance 设置为 ImageListItem

最佳答案

这是 TImageList 的简单助手

type
  TImageListHelper = class helper for TImageList
    function Add(aBitmap: TBitmap): integer;
  end;



function TImageListHelper.Add(aBitmap: TBitmap): integer;
const
  SCALE = 1;
var
  vSource: TCustomSourceItem;
  vBitmapItem: TCustomBitmapItem;
  vDest: TCustomDestinationItem;
  vLayer: TLayer;
begin
  Result := -1;
  if (aBitmap.Width = 0) or (aBitmap.Height = 0) then exit;

  // add source bitmap
  vSource := Source.Add;
  vSource.MultiResBitmap.TransparentColor := TColorRec.Fuchsia;
  vSource.MultiResBitmap.SizeKind := TSizeKind.Source;
  vSource.MultiResBitmap.Width := Round(aBitmap.Width / SCALE);
  vSource.MultiResBitmap.Height := Round(aBitmap.Height / SCALE);
  vBitmapItem := vSource.MultiResBitmap.ItemByScale(SCALE, True, True);
  if vBitmapItem = nil then
  begin
    vBitmapItem := vSource.MultiResBitmap.Add;
    vBitmapItem.Scale := Scale;
  end;
  vBitmapItem.Bitmap.Assign(aBitmap);

  vDest := Destination.Add;
  vLayer := vDest.Layers.Add;
  vLayer.SourceRect.Rect := TRectF.Create(TPoint.Zero, vSource.MultiResBitmap.Width,
      vSource.MultiResBitmap.Height);
  vLayer.Name := vSource.Name;
  Result := vDest.Index;
end;

然后您可以轻松地在图像列表中添加图像:

ImageList1.Add(MyBitmap);

关于user-interface - 如何以编程方式将图像插入 FireMonkey 中的图像列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36013186/

相关文章:

winforms - 设计 WinForms UI 时尊重 XP 主题

python - python Tkinter中的简单加载屏幕

delphi - Firemonkey组件节省设计时间大小

ios - 带有 Indy 或第三方 Internet 组件的 iOS 上的 Delphi XE2

android - 在 TListView 上设置分组

delphi - 在 TOpenDialog 中右键单击文件时,使用自定义样式会显示无效字符

java - 使用对象生成新值时遇到问题

java - Canvas SWT Draw2D 上的圆柱体图形

delphi - FireMonkey TBitmapLink 的 CapInsets 属性对 FireMonkey 样式有何作用?

delphi - 自定义通知间隔