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

如何在ListView中点选前面的CheckBox后,后面的整行高亮

答題得分者是:pgdennis
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-16 12:13:20 IP:211.162.xxx.xxx 未訂閱
大大们好,小弟有问题向您们请教:    想要实现的功能是: 当点选ListView前面的CheckBox后,后面的整行都同样的出现高亮. 在窗体上放置一个ListView1和Edit1 ListView1.ViewStyle  := vsReport; ListView1.Checkboxes := True; ListView1.RowSelecte := True; ListView1.Columns[0].Caption := "测试1"; ListView1.Columns[1].Caption := "测试2"; 然后在Items中设置新的Item,分别为: 1,2,3,4; 接着编译,把焦点切换到Edit1中,用鼠标点击ListView1中Item前面的Checkbox(就是1,2,3,4前面的Checkbox),希望后面的整行能产生高亮状态.就是当用鼠标只点击Chekcbox,而不是点Item时,后面的整行都能产生高亮状态.    我搜索过站内的相关内容,仍然不得其解,请大大们原谅小弟的无知 人生在勤,不索何获?
------
人生在勤,不索何获?
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-16 13:45:44 IP:218.163.xxx.xxx 未訂閱
試試看,當點選checkbox時,這行會變紅色  
 procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
 if item.Checked  then
  Sender.Canvas.Brush.Color := clRed;
end;
永遠追不上技術更新的速度~~
------
星期一,二...無窮迴圈@@
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-16 15:09:15 IP:211.162.xxx.xxx 未訂閱
谢谢pgdennis大大的提示,您的方法让我醍醐灌顶.我又偷学到一招< > 不好意思,是我没有把问题描述清楚,抱歉了< >.我希望实现的效果是:当用鼠标点击Checkbox时,产生和用鼠标点击Item时一样的效果,就是焦点被切换到该行上,使得整行都变成高亮的状态.就像CheckListBox一样,点击了前面的CheckBox后,焦点也会随着切换到后面,从而产生高亮状态. 在ListView中把焦点切换出去后,就不会有高亮了,不晓得可不可以实现CheckListBox那样,即使焦点切换出去了,也能高亮呢? 再请问一点:怎样检测到点击的是前面的Checkbox呢?我知道如果是点击Item,可以使用ListView::OnSelectItem()来单独检查到从而对其处理.而使用ListView::OnChange()是不管鼠标,键盘的动作都通通被检查到.有没有专门由点击Checkbox产生的消息,是不是需要自己去拦截该消息呢? 人生在勤,不索何获?
------
人生在勤,不索何获?
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-16 16:01:44 IP:218.163.xxx.xxx 未訂閱
引言: 谢谢pgdennis大大的提示,您的方法让我醍醐灌顶.我又偷学到一招< > 不好意思,是我没有把问题描述清楚,抱歉了< >.我希望实现的效果是:当用鼠标点击Checkbox时,产生和用鼠标点击Item时一样的效果,就是焦点被切换到该行上,使得整行都变成高亮的状态.就像CheckListBox一样,点击了前面的CheckBox后,焦点也会随着切换到后面,从而产生高亮状态. 在ListView中把焦点切换出去后,就不会有高亮了,不晓得可不可以实现CheckListBox那样,即使焦点切换出去了,也能高亮呢? 再请问一点:怎样检测到点击的是前面的Checkbox呢?我知道如果是点击Item,可以使用ListView::OnSelectItem()来单独检查到从而对其处理.而使用ListView::OnChange()是不管鼠标,键盘的动作都通通被检查到.有没有专门由点击Checkbox产生的消息,是不是需要自己去拦截该消息呢? 人生在勤,不索何获?
1. rowselect=true; 2.再次修正過了..應該就是你要的
 procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
 H:Tlistitem;
begin
  H:=listview1.GetItemAt(X,Y);
  if H.Checked then
    H.Selected:=true;
end;
永遠追不上技術更新的速度 發表人 - pgdennis 於 2003/07/16 16:53:32 發表人 - pgdennis 於 2003/07/16 16:55:11
------
星期一,二...無窮迴圈@@
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-16 17:54:49 IP:211.162.xxx.xxx 未訂閱
我已经明白pgdennis大大您说的意思了,问题也已经解决啦!!! > 人生在勤,不索何获?
------
人生在勤,不索何获?
系統時間:2024-11-23 18:50:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!