谁能发给我关于ListView中使用图片的例子(50分)

  • 主题发起人 主题发起人 MicroZeng
  • 开始时间 开始时间
to microzeng:
我觉得问题出在你的图标上,你换borland带的图标试一下?
 
to hubdog:
我用什么图标都试过了.但是确实不行, 你如果有空,请做一个简单的例子.发给我
如何?
 
你添加图标时可以设定它的mask色, 当然如果是动态添加就会出这个问题了:-(
 
我做试验的masked=true 自然就是透明的,你必须在imagelist装入icon前设定masked为true,后设是没用的,不知你是不是这个问题。
 
我是动态的加入的.有问题。

to menxin: 你发一个例子给我如何,我无论如何都做不出透明的。
先谢了。
 
to menxin: 你如果D5能做成透明的, 请发一份给我: xqzeng@soim.com
 
我发了一个demo给你,你把listview的color设为black,就会发现图标是透明的,
若还不行,请检查一下你的comctl32.dll,commctrl.dll的版本。
 
to hugdog:我没有收到你的Demo。
我的意思是显示能够透明的,但是Mouse选择一项后, 那一项就不透明了。
我给你一个图片, 你看看。
 
where is you photo
 
已经发了。
 
procedure TForm1.ListView1AdvancedCustomDrawSubItem(
Sender: TCustomListView; Item: TListItem; SubItem: Integer;
State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
var
itemrect:TRect;
toverlay
begin
defaultdraw:=True;
if (subitem=1) and (cdsSelected in state) and (stage=cdPrePaint) then
begin
if Boolean(ListView_GetSubItemRect(sender.Handle,item.Index,subitem,LVIR_ICON,@itemrect)) then
begin
with listview1.Canvas do
begin
ImageList1.Draw(listview1.Canvas,itemRect.Left,itemRect.Top,0);
end;
end;
end;
end;
//我觉得只能用ownerdraw的方法
//可能用imagelist1的drawoverlay方法更好,我今天没时间研究
 
to hubdog:
你写的是伪代码?

to MicroZeng:
你的mail我已收到了。有几种方案。
1.学outlook,用两个listview,或在canvas上画!因为outlook上的那个图标并不是在listview内的。
2.用不同底色的icon,当selection时变化subitem的imageindex.
3.customdraw。我研究了一下,D5的listview比D4的强了很多,新增了
Workarea,hovertime,advanceddraw,getsubitemimage,listview.displayrect....。但在draw subitem上还是需要一定量的计算,主要是由于WordArea属性不能用
于report型.无非是column的宽度什么的,仔细想想还是不难的,就是乱。我觉得这样做不如前两种方法好。

BTW:你的软件做的真不错!
所以自
己画
 
动态加入图片到imagelist要使用addmasked来添加!
 
to cytown: Addmasked是这么加的呢。

to menxin: 自己画的方法我是试过了,可行,但是抖动太大了,反而得不偿失。
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
767
DelphiTeacher的专栏
D
D
回复
0
查看
809
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
639
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部