问题描述。
比如,当前设计对象是TForm的是后,可以看见这个组件。是DataModal的时候,不可看见。
组件是继承于TComponent的。所以类似于TEdit组件的功能没有。查原代码没查到。

解决方案 »

  1.   

    o,重新描述一下。
    象TEdit组件,容器是TForm的时候,在面板上可见,容器是DM的时候。不可见。
    自定义的这个组件是继承于TComponent的,所以,无论任何容器都可见。现在想让它有选择容器的功能。
      

  2.   

    Delphi应该是自动根据控件/组件的祖宗来确定当前的设计界面是否显示哪些可用控件。在当前为DataMode等不可放入可视vcl控件的unit时,可视vcl控件不见了,当到Form等可放入可视vcl控件的unit时,可视vcl控件会自动出来。如果你的控件是可视的,可以从TControl或者TWinControl等继承
      

  3.   

    对,是这样的。问题是我的组建是继承于TComponent的。
    而我想限制它的Owner,不能用FORM之外的。
    我估计是由属性编辑器来实现的。但查不到DELPHI的原代码。
      

  4.   

    不相信我的话,呵呵。跟属性编辑器没有关系,Delphi环境应该就是根据控件的祖宗类来判断的。你Install以下单元,然后看看在DataModule设计界面和Form设计界面中的区别。
    unit test;interfaceuses Classes, Controls, DesignIntf;type
      TControl1 = class(TControl)
      end;type
      TComponent1 = class(TComponent)
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('CustomComponents', [TControl1, TComponent1]);
    end;end.
      

  5.   

    好像说祖宗不是太确切,呵呵。但看了上面的例子你应该明白怎么回事了吧?TControl本来就是从TComponent继承,因此把你原来的TComponent类声明为TControl并不会有任何的问题。而就是改这么几个字母就可以实现你所需的功能了,不要把问题复杂化了
      

  6.   

    了解。用TControl是没问题的。
    关键,我要的是不可视组件。TControl是个可视组件。这个问题先放放。以后研究。哈哈。
      

  7.   

    不过也是,一个裸的TControl放在Form上的确不好,什么也看不到,呵呵。不过你的控件既然不是可视控件,那为什么又一定要限制在DataModule下不能用呢?
      

  8.   

    是因为要操作它的Owner,如此而已。
    目前的处理是,发现Owner不是TForm,就抛出个例外。系统会自动把它干掉。
      

  9.   

    昨天装个5.0,在5.0下,DM下也可视组件都是在组件面版上可以看见的,不过摆放的时候抛出个例外罢了。
    所以,现在不研究这个问题了。结帐。(晕了,发完言我怎么老习惯按Ctrl + F9)