gpt4 book ai didi

delphi - 使用 ComboBox 在 TImage 中加载 ImageList 图片

转载 作者:行者123 更新时间:2023-12-03 15:21:09 27 4
gpt4 key购买 nike

在我的 Delphi 表单中,我有一个包含 4 张图片的 ImageList。还有一个名为 ComboBox1 的 ComboBox 和一个名为 Image9 的 TImage 组件。

我为我的 ComboBox 创建了一个 onChange ,因为我想做这样的事情:如果选择了 ComboBox 项目 1,则将图像 1 加载到我的 ImageList 中。同样的情况,如果选择了 ComboBox 项目 3(例如),则加载 ImageList 的图像 3。

我写的代码是这样的:

case ComboBox1.Items[ComboBox1.ItemIndex] of
0:
begin
ImageList1.GetBitmap(0,Image9.Picture);
end;
1:
begin
ImageList1.GetBitmap(1,Image9.Picture);
end;
2:
begin
ImageList1.GetBitmap(2,Image9.Picture);
end;
3:
begin
ImageList1.GetBitmap(3,Image9.Picture);
end;
end;

使用此代码,IDE(我使用的是 Delphi XE4)在 case ComboBox1.Items[ComboBox1.ItemIndex] of 上给出错误,因为它表示需要 Ordinal 类型。我能做什么?

最佳答案

case statements在德尔福工作 Ordinal types :

Ordinal types include integer, character, Boolean, enumerated, and subrange types. An ordinal type defines an ordered set of values in which each value except the first has a unique predecessor and each value except the last has a unique successor. Further, each value has an ordinality, which determines the ordering of the type. In most cases, if a value has ordinality n, its predecessor has ordinality n-1 and its successor has ordinality n+1

ComboBox.Items 是字符串,因此不满足序数的要求。

此外,正如您的 comment 中所述下面,你不能直接赋值给Image9.Picture;你必须使用Image9.Picture.Bitmap来代替。为了使 TImage 正确更新以反射(reflect)更改,您需要调用它的 Invalidate 方法。)

更改您的case以直接使用ItemIndex:

case ComboBox1.ItemIndex of
0: ImageList1.GetBitmap(0,Image9.Picture.Bitmap);
1: ImageList1.GetBitmap(1,Image9.Picture.Bitmap);
end;
Image9.Invalidate; // Refresh image

或者直接转到ImageList

if ComboBox1.ItemIndex <> -1 then
begin
ImageList1.GetBitmap(ComboBox1.ItemIndex, Image9.Picture.Bitmap);
Image9.Invalidate;
end;

关于delphi - 使用 ComboBox 在 TImage 中加载 ImageList 图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17845603/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com