想法是这样的:在用DBGrid时,要求DBGrid自适应列宽,要在对应的QueryAfterOpen 事件上、DBGridDragDatacell事件写一些代码。
我想能不能事件被触发时自动运行一段程序,当有不影响我写在事件里的代码。
Example:
QueryAfterOpen
begin
  do something 
end ;
DBGridDragDatacell
begin
  do otherthing 
end;
每一个选窗体都一样做,觉得麻烦。有没有办法整合。
整合的效果是:
在某个地方写一句:DBGrid.xxxxx :=true(somthing) ; (xxxxx 是新属性或方法)
DBGridDragDatacell
begin
  do other code .(没有被影响,"do other code"还正常执行。) 
end;
DGrid就拥有了自适应列宽的功能!
请指教思路。

解决方案 »

  1.   

    有两个方法:
    1.自己写一个dbgrid空间,或者就写一个dbgrid类,然后使用这个类。
    2.制作一个form,包含以上代码,把这个form作为所有form的父类。
      

  2.   

    to idilent:
       2方法似乎不灵活,我也是想用新的同名类(即1方法):
    Example:
      TDBGrid =class (TDBGrid)
    private
      some code
    public
      some code
    这样的话就能用方法或属性使DBGrid有自适应列宽功能了.
    但要令对应的Query的AfterOpen执行some code的话
    在Query.Afteropen写的事件代码就不能正常执行了。
    Example:
    用方法得到DBGrid对应的Query的名“QueryDBG”,在新DBGrid的方法中动态指定QueryDBG的Afteropen事件代码。
    QueryDBG.Afteropen = some procedure's name
    那么:
    QueryDBG.Afteropen(....)
    begin
      some code (在QueryDBG.Afteropen 原代码就不能执行了)
    end;
    如何解决呢?
    还有其它办法能令DBGrid有自动适应列宽的简单方法吗?