我们知道,在进行一个刷新操作的时候,比如:TListbox,Tcombox,tListview,ttreeview等.操作item时候,可能会触发其相关的change,select等等事件.显然,这个时候不希望触发,一般是手工关闭这些事件,刷新完毕再打开.如果控件的时间多,手工操作就比较麻烦,有没有一个方法临时关闭,再临时打开.
思想有点类似数据控件的Disablecontrols,EnableControls那样.
请达人赐教.

解决方案 »

  1.   

    谢谢,这个我也经常用,但如果是其它控件呢,没有这个函数对的。比如:TEdit
    VCL貌似没有这个机制
      

  2.   

    在app.onmessage過濾,應可達到你想要的目的
    1、設一個全局變量 bFilter,要進行過濾時,則assign為true,否則為false;
    2、設定一個句柄變量xHandle,要進行過濾時,把要過濾的相關控件的句柄給xHandle;
    3、在onmessage做判斷,如果為bFilter,則進入判斷消息中的HWND是否為xHandle,若是,則將參數handled設為true,即可
      

  3.   

    我想处理的是VCL事件,不是windows消息呢。当然很多事件是消息转发过来的。
    而且部分消息是Sende过去的,没有post,无法拦截的。
    该怎么办呢?
      

  4.   

    用RTTI,凡是tkMethod的都把它指向的指针值记下来,然后把它设置成nil,这样就把它全部屏蔽了;要关联上的时候再进行反操作。当然这得借助外部类来记录这些信息。
      

  5.   

    可以这样,自己先定义一个过程(与事件的参数完全相同),在你不需要事件响应的时候将事件赋空值,
    在需要事件响应的时候把你自定义的过程赋给事件就可以了Procedure TForm1.AA(Sender : TObject);
    Begin
      ShowMessage('a');
    End;procedure TForm1.FormShow(Sender: TObject);
    begin
      Button1.OnClick := AA;
    end;