Delphi的ListView可否对每一个Item进行自由设置Image

 我来答
福喜900
2014-12-31 · TA获得超过6.1万个赞
知道大有可为答主
回答量:1.1万
采纳率:0%
帮助的人:9991万
展开全部
ListView的每一个Item的类型是TListItem,这个类型带有句柄属性
建议你使用GetDC函数来获取每个Item的作图区,然后使用Canvas对象在目标上作图:关键代码如下:
const
PicFullName: String = 'C:\Start.bmp';
procedure TForm1.FormCreate(Sender: TObject);
begin
Self.lvTst.LargeImages := TImageList.Create(Application);
//设置ListView的LargetImage值,不使用用来装载图片,只是在vsIcon
//显示方式中给图片空位用
//依此类推:vsList显示模式显示Item图片就实例化一个SmallImages
end;
procedure TForm1.BtnSetPicClick(Sender: TObject);//点击此按钮为当前被选中的Item设置图片
var
C: PChar;
Item: TListItem;
begin
if Self.lvTst.Selected = nil then Exit;
Item := Self.lvTst.Selected;
New(C);
GetMem(C,255);
StrPCopy(C,PicFullName);
if Item.Data <> nil then
Dispose(Item.Data);
Item.Data := C;//在Item中的Data属性是一个指针,让它保存图片的路径
Self.lvTst.Invalidate;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
I: Integer;
begin
for I := 0 to Self.lvTst.Items.Count - 1 do
if Self.lvTst.Items[I].Data <> nil then
Dispose(Self.lvTst.Items[I].Data);//释放每一个指针
end;
procedure TForm1.lvTstCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);//在ListView的OnCustomDraw事件中加入图形持久化代码
var
X,Y: Integer;
Cvs: TCanvas;
Bmp: TBitMap;
begin
Cvs := TCanvas.Create;
Bmp := TBitMap.Create;
if Item.Data <> nil then
begin
Cvs.Handle := GetDC(Item.Handle);
Bmp.LoadFromFile(PChar(Item.Data));
X := Item.Position.X;
Y := Item.Position.Y;
Cvs.Draw(X,Y,BMP);//开始作图
end;
Cvs.Free;
Bmp.Free;
end;
end.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式