全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1372
推到 Plurk!
推到 Facebook!

请教listview的textrect问题

尚未結案
pcsoftdiy
一般會員


發表:8
回覆:14
積分:4
註冊:2005-03-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-04 13:00:13 IP:218.94.xxx.xxx 未訂閱
我想实现windows的thumbview模式,程式码如下 procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var p,r: trect; bm: TBitmap; begin if ListView1.ViewStyle = vsicon then begin if cdsFocused in State then begin p := item.displayrect(dricon); bm := TBitmap.Create; ImageList4.GetBitmap(Item.ImageIndex, bm); listview1.Canvas.Font.Color := $00FFFFFF ; listview1.Canvas.brush.Color := $00C56A31; listview1.Canvas.Draw(((p.Left p.Right - bm.Width) div 2), ((p.Top p.Bottom - bm.Height) div 2), bm); ListView1.Canvas.pen.Width := 2; ListView1.Canvas.Pen.color := $00C56A31; ListView1.Canvas.Polyline([Point(p.left 1, p.top 1), Point(p.right - 1, p.top), Point(p.right - 1, p.Bottom - 1), Point(p.left 1, p.bottom - 1), Point(p.left 1, p.top 1)]); r := item.displayrect(drlable ); listview1.Canvas.TextRect(r, r.Left,r.Top, item.Caption); DefaultDraw := false; bm.Free; end; end; end; 如愿以偿的画了个框在选择图时,但下面的textrect就出问题了,只显示了其中一行,请各位前辈帮忙。十分感谢
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-04 17:34:51 IP:61.222.xxx.xxx 未訂閱
用 Windows.DrawText(Canvas.Handle, PChar(Text), Length(Text), Rect, DT_WORDBREAK); 試試 ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-04 18:35:32 IP:220.132.xxx.xxx 未訂閱
pcsoftdiy 你好: 加一段 if item = nil then exit;
------
======================
昏睡~
不昏睡~
不由昏睡~
pcsoftdiy
一般會員


發表:8
回覆:14
積分:4
註冊:2005-03-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-05 11:57:44 IP:218.94.xxx.xxx 未訂閱
wameng兄、ko兄好。 使用drawtext似乎效果跟textrect一样,也只是显示一行,除非是把 DefaultDraw := false;那句拿掉。但如此选择的时候不但有个兰框,也同时有mask的部分,与windows的效果不同。 有什么方法既能显示多行文本又能去掉图片的mask效果?
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-05 17:40:12 IP:61.222.xxx.xxx 未訂閱
Windows.DrawText(listview1.Canvas.Handle, PChar(Item.Caption), Length(Item.Caption),R,DT_CENTER or DT_WORDBREAK or DT_EDITCONTROL ); ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~
pcsoftdiy
一般會員


發表:8
回覆:14
積分:4
註冊:2005-03-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-06 11:03:37 IP:218.94.xxx.xxx 未訂閱
十分感谢wameng大哥,解决了此问题
系統時間:2024-06-26 8:03:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!