放一个cxGrid,为什么在声明中能出3个类
    cxGrid1DBTableView1: TcxGridDBTableView;
    cxGrid1Level1: TcxGridLevel;
    cxGrid1: TcxGrid;
谁知道是怎么实现的? 
看了很久它的代码也不知道在哪个地方实现这个功能的代码 
我们一般写控件注册控件的类拖出来的时候只声明了这个类 
cxgrid是怎么实现拖出来就声明了3个类的?

解决方案 »

  1.   

    cxgrid里面是有许多类啊,但为什么拖出来的是时候会在组件声明中和dmf文件中出现TcxGridDBTableView;  TcxGridLevel;这两个对象类呢,而其他的类为什么不在这里出现呢?
    而且这两个类没有注册为控件的
      

  2.   


    注意cxgird中published部分的屬性,你就知道了...
      

  3.   

    使用cxGrid1: TcxGrid即可
    cxGrid1DBTableView1: TcxGridDBTableView; 
    cxGrid1Level1: TcxGridLevel; 
    不用管。
      

  4.   

    published部分的屬性有什么啊,哪个属性实现了这样的功能呢?
      

  5.   

    published部分的字段會被記錄運行時信息(RTTI),所以當你把控件拉到form上時,會被IDE所識別,并顯示出相應的信息出來。
      

  6.   

    cxGird封装比较好,每个类各司其职,值得学习!
      

  7.   

    published的是会出现在属性编辑器没错,但是不会出现在代码编辑器里面的吧....我觉得出现在代码编辑器里面的是因为那几个类的OWNER也指定了为FORM
      

  8.   

      cxGrid2 := TcxGrid.Create(Self);
      cxGrid2.Name := 'cxGrid2';
      cxGrid2.Parent := Self;
      cxGrid2.Left := 200;
      cxGrid2.Top := 24;
      cxGrid2.Width := 250;
      cxGrid2.Height := 200;
      cxGrid2.TabOrder := 2;
      ShowMessage(IntToStr(cxGrid2.Levels.Count));以上代码可证明Level不是cxGrid创建就创建的。
    在哪里出来的,我暂时没有发现。
    就估计着,是不是跟 “在设计时,Create cxGrid的时候,顺便Create Level和View”。
    判断 csDesigning in ComponentState 是在 IsDesigning 中。
    lz有兴趣可以研究一下。
      

  9.   

    你仔细看看,放一个cxgrid后,界面上的grid中都包含什么东西不就明白了,很明显tableview是用来显示数据的,level是层次,也是能看到的,grid更不用说了
      

  10.   

    是的,可以自己測試,在運行期create cxgrid。
    先不執行以下動作,測試 views and levels的count。應該是0。
    // Creates a Level 
    Level := Grid.Levels.Add; 
    Level.Name := 'L1'; 
    // Creates a View 
    View := Grid.CreateView(TcxGridDBTableView) as TcxGridDBTableView; 
    View.Name := 'V1'; 
    //
    Level.GridView := View; 懷疑是Dev exp實現了 專家類,當設計期創建一個cxgrid,收到通知後,會同時產生level及view。
    查看source,搜索關鍵字“IOTAWizard”,大致看了一下,確實有相關的實現,但并未發現level及view的相關操作...
      

  11.   

    看看DEV的控件设计期包,里面一般都会有注册控件相关的东西(例如一些属性编辑器之类),估计在里面就能找到答案了。我开始的怀疑和楼上相同
      

  12.   

    cxGrid很强大 但是呢
    用起来也很繁琐
    强大了就简单不了啊
      

  13.   

    该控件类,本身就关联了
    TcxGridDBTableView和TcxGridLevel类。 
      

  14.   

    Delphi控件有一些设计时的接口。
      

  15.   

    我可能知道原因了,TcxGridDBTableView和TcxGridLevel类这两个类都是从TComponent类继承下来的,然后再在设计时包里面创建可能就可以实现这样的效果了,有空再测试一下
      

  16.   

    因为cxGrid是有下面3个类共同组成的    cxGrid1DBTableView1: TcxGridDBTableView; 
        cxGrid1Level1: TcxGridLevel; 
        cxGrid1: TcxGrid; 实现的最终类名为TcxGrid,