简单的写了一下,可根据需要修改 var TextRect, PicRect: TRect; begin DefaultDraw := False; PicRect := Item.DisplayRect(drIcon); TextRect := Item.DisplayRect(drLabel); if cdsSelected in State then begin Sender.Canvas.Brush.Color := clBtnFace; Sender.Canvas.FillRect(Item.DisplayRect(drSelectBounds)); end else Sender.Canvas.Brush.Style := bsClear; ImageList1.Draw(Sender.Canvas, (PicRect.Left + ImageList1.Width div 2), (PicRect.Top + ImageList1.Height div 2), Item.ImageIndex, True); Sender.Canvas.TextOut(TextRect.Left, TextRect.Top, Item.Caption); end;
ImageList1.Draw(Sender.Canvas, (PicRect.Left + ImageList1.Width div 2), (PicRect.Top + ImageList1.Height div 2), Item.ImageIndex, True); 这句编译的时候出错,应该怎样改啊,我改成 ImageList1.Canvas.Draw((PicRect.Left + ImageList1.Width div 2), (PicRect.Top + ImageList1.Height div 2), Item.ImageIndex, True); 提示Item.ImageIndex不是TGraphic类型还有2个问题想请教 1.在win98下这样写背景会不会有死机或速度很慢的情况出现的。 2.我的ListView是做在主界面的,当在主界面打开一个formstyle为fsMDIForm时,ListView的部分会显示黑色,怎样解决,打开formstyle为fsNormal,showmodal就不会有这样现象。请你帮帮我啊,谢谢
在Sender.Canvas后报Incompatible types:'integer' and 'TCanvas' 在ImageList1.Height div 2) 后报Incompatible types:'TCanvas' and 'integer'我把你写的ImageList1.Draw改为ImageList1.Canvas.Draw,不改提示没有Draw ListView变黑色,是在哪里在刷新一下主界面,是在listview的oncustomdraw事件还是其他地方
Sender.Canvas.Brush.Bitmap := ABitmap;
Sender.Canvas.FillRect(ARect);
ABitmap可以使用下面语句创建来载入背景图片
ABitmap := TBitmap.Create;
ABitmap.LoadFromFile(背景图片);
ABitmap.LoadFromFile(背景图片);
这两句话不要放到OnCustomDraw中,放到其他的地方
还有一个问题是ListView的Item项内容会盖住背景图片,可不可以只在有图片和文字的地方盖住图片,其他的地方是透明的。
麻烦你指教一下我,谢谢。
你有没有用QQ,可不可以在QQ上和你聊聊
若文字和图标也要背景透明的话,那可能需要在OnCustomDrawItem自己画图标和文字了。
不好意思,公司不能聊天。
var
TextRect,
PicRect: TRect;
begin
DefaultDraw := False;
PicRect := Item.DisplayRect(drIcon);
TextRect := Item.DisplayRect(drLabel);
if cdsSelected in State then
begin
Sender.Canvas.Brush.Color := clBtnFace;
Sender.Canvas.FillRect(Item.DisplayRect(drSelectBounds));
end
else
Sender.Canvas.Brush.Style := bsClear;
ImageList1.Draw(Sender.Canvas, (PicRect.Left + ImageList1.Width div 2), (PicRect.Top + ImageList1.Height div 2), Item.ImageIndex, True);
Sender.Canvas.TextOut(TextRect.Left, TextRect.Top, Item.Caption);
end;
这句编译的时候出错,应该怎样改啊,我改成
ImageList1.Canvas.Draw((PicRect.Left + ImageList1.Width div 2), (PicRect.Top + ImageList1.Height div 2), Item.ImageIndex, True);
提示Item.ImageIndex不是TGraphic类型还有2个问题想请教
1.在win98下这样写背景会不会有死机或速度很慢的情况出现的。
2.我的ListView是做在主界面的,当在主界面打开一个formstyle为fsMDIForm时,ListView的部分会显示黑色,怎样解决,打开formstyle为fsNormal,showmodal就不会有这样现象。请你帮帮我啊,谢谢
在ImageList1.Height div 2) 后报Incompatible types:'TCanvas' and 'integer'我把你写的ImageList1.Draw改为ImageList1.Canvas.Draw,不改提示没有Draw
ListView变黑色,是在哪里在刷新一下主界面,是在listview的oncustomdraw事件还是其他地方
刷新不要在oncustomdraw中,就在变黑的时候刷就行了,比如子窗口显示后。
1.Item项的字比较多时不会换行,会和旁边项的字重叠。
2.鼠标移到Item的某项,这一项会有一个灰色的底色显示,它是整个Item项显示灰色。以上2个问题是listview自画背景图片才会这样显示的,如果不自画背景图片,Item项的字体是可以自动换行的,而鼠标移到Item项,也只有图片和字的附近有灰色阴影,不会整个Item项都有灰色阴影的。在drawitem事件应该怎样写代码处理到和listview不画背景图片时的效果一样
请再教我
var
DrawRect,
TextRect,
PicRect: TRect;
begin
DefaultDraw := False;
PicRect := Item.DisplayRect(drIcon);
TextRect := Item.DisplayRect(drLabel);
DrawRect.Left := PicRect.Left + (PicRect.Right - PicRect.Left - ImageList1.Width) div 2;
DrawRect.Top := PicRect.Top + (PicRect.Bottom - PicRect.Top - ImageList1.Height) div 2;
DrawRect.Right := DrawRect.Left + ImageList1.Width;
DrawRect.Bottom := DrawRect.Top + ImageList1.Height;
if cdsSelected in State then
begin
Sender.Canvas.Brush.Color := clBtnFace;
if Item.ImageIndex >= 0 then
Sender.Canvas.FillRect(DrawRect);
if Item.Caption <> '' then
Sender.Canvas.FillRect(TextRect);
DrawText(Sender.Canvas.Handle, PChar(Item.Caption), -1, TextRect, DT_WORDBREAK or DT_LEFT);
end
else begin
Sender.Canvas.Brush.Style := bsClear;
DrawText(Sender.Canvas.Handle, PChar(Item.Caption), -1, TextRect, DT_LEFT or DT_END_ELLIPSIS);
end;
ImageList1.Draw(Sender.Canvas, DrawRect.Left, DrawRect.Top, Item.ImageIndex, True);
end;
小问题有1个,当Item是选中状态时,item图片周围是灰色底色,而图片是没色,可不可以反过来,图片周围是没色,而图片看上去有一层灰色的底色。
还有一个大问题是刷新问题,就是上面说的打开mdichild窗口listview就会显示黑色的问题,怎样解决。
http://community.csdn.net/Expert/topic/4616/4616684.xml?temp=.9668848