onclick事件中,强制true,如何?

解决方案 »

  1.   

    to TIYILON(太乙郎):
    但有的item是check的,有些不是,强制true或false都好象不行。在VB中好象是有oncheck事件的,但在delphi中没有。
    我想改写ComCtrls.pas中的事件或属性,找到了tlistitem的setchecked过程,但该过程只在用代码设置item.checked:=true时会触发,用键盘或mouse选择时不会触发。
    我对vcl、api或消息等不熟悉,不过我想应该可以通过改写ComCtrls.pas来拦截的。
    请各位赐教!
      

  2.   

    老兄,有没搞错啊! 没必要这么复杂吧!!我是这样做的:就是给Listview的Onclick 和ondbclick 中将要只读的设为相应的值,不就可以了??
      如: listview1.Items[0].Checked:=true;
           ListView1.Items[5].Checked:=False;这样只要你知道第几个是只读的就可以了。这个方法比较笨但也是没办法的办法了!呵呵:~)
      

  3.   

    to yiyu(议余):
    除了Onclick 和ondbclick ,还要设置onkeydown事件吧,因为按空格键也是可以选择的。
    而且如果item数多的话这样的速度可能会比较慢。我并不是把问题复杂化,只是我记得VB中的listview有oncheck事件,在事件中cancel就可以禁止选择,所以我觉得通过修改vcl或api可以较好的实现这个功能。
      

  4.   

    那你就自己写个能接收这个事件的控件吧!可以通过修改Delphi的原码!呵呵:)
      

  5.   

    有Changing事件。把AllowChange设置为False:
    procedure TForm1.ListView1Changing(Sender: TObject; Item: TListItem;
      Change: TItemChange; var AllowChange: Boolean);
    begin
      AllowChange := False;
    end;