嗯,"兼"写错了,俺不是故意的,是特意滴在窗体的DFM文件中,
TActionList是有left,top属性的,而TAction则没有
TMaminMenu是有left,top属性的,而TMenuItem则没有,
这样,delphiIDE在加载窗体时,会给有left,top属性的控件创建一个图标,可以在窗体设计器中选中,然后进行其它诸如设计的操作,
但TAction,TMenuItem则没有top, left,在delphi IDE设计窗体时,不会在窗体上创建相应的图标,
俺想问一下,Delphi有没有啥机制,来区分这两者?

解决方案 »

  1.   

    有left、top就会创建图标,根据是什么?不明白楼主说什么
      

  2.   

    举例来说,如果你放一个TClientDataset在窗体上,查看其DFM文件,会看到TClientDataset有
    left = xx
    top = xx
    如果是TMainMenu, TActionList,也会在DFM中有
    left = yy
    top = tt
    之类的字样
    这几种运行时不可视的控件在设计时,总会在界面上看到他们的图标但是但是但是但是但是但是
    TMenuItem,TAction则没有,left, top,同样的非可视组件,在设计时,也不会在窗体上看到,一般只会在相对应的设计器(菜单设计器,action设计器)中才能看到我想问一下,有没有人知道,delphiIDE他凭啥嗫?
      

  3.   

    这跟LEFT TOP没关系,看Owner是不是Form
      

  4.   

    设计期放在FORM上的控件的OWNER全部会被指定为FORM
      

  5.   

    unit xxx
    type
    ...
        a1: TMenuItem;
    ...begin
      ShowMessage(a1.Owner.Name);
    end;
    其owner是窗体本身,从这一点上区分不出来谢谢
      

  6.   

    好像有点不对,我再想想,但是跟left top是肯定没关系
      

  7.   

    我也只是猜的,实际上,我是想知道,delphi IDE是根据什么信息来判断,哪些是不需要在设计期的窗体上显示的,理论上讲,TMenuItem也是从TComponent派生的,与TMainMenu有什么区别呢,会让delphi如此区别对待?
      

  8.   

    應該與 DesignInfo這個屬性有關,或許從這個出發可以找到原因正在查證中...
      

  9.   

    在這段代碼,可看出端倪:注意判斷——LongRec(FDesignInfo).Lo <> LongRec(Info).Loprocedure TComponent.DefineProperties(Filer: TFiler);
    var
      Ancestor: TComponent;
      Info: Longint;
    begin
      Info := 0;
      Ancestor := TComponent(Filer.Ancestor);
      if Ancestor <> nil then Info := Ancestor.FDesignInfo;
      Filer.DefineProperty('Left', ReadLeft, WriteLeft,
        LongRec(FDesignInfo).Lo <> LongRec(Info).Lo);
      Filer.DefineProperty('Top', ReadTop, WriteTop,
        LongRec(FDesignInfo).Hi <> LongRec(Info).Hi);
    end;
      

  10.   

    这仅仅是个逻辑问题,与left,top没有任何关系
    TMainMenu就如同一个独立的机器,当然得有个图标表示,以便一目了然,而TMenuItem只是这部机器中的零部件,不是独立存在的,当然也就没有必要用图标表示。逻辑上就是如此简单
      

  11.   


    你这里是可以读到TComponent的left, top, 
    但我的问题是IDE是如何区别TMainMenu和TMenuItem的呢?有没有属性之类的来区分?TMainMenu就在窗体某位置上显示一个控件,而TMenuItem就不需要
      

  12.   

    楼主的问题就是DELPHI怎么判断哪个是机器哪个是零件
      

  13.   

    還以為你說的是:一個有left和top,而另一個為何沒有...不過,應該還是可以順著designInfo查看看,繼續查證中....
      

  14.   


    我的理解是,樓主想問:在設計期,為什麼TmainMenu可以顯示在form某個位置,而他的子控件卻不顯示出來?
    這與cxGrid剛好相反
      

  15.   


    bingo顺大便,哥咋用繁体嗫?
      

  16.   

    不懂,学习一下英國‧霍金:或會侵略地球‧人類勿與外星人接觸  國際  2010-04-26 22:19 
     (英國‧倫敦)地球世界的人類對外星球充滿好奇,對可疑的飛碟物經常窮追不捨,但英國著名物理學家霍金表示,外星人幾乎肯定存在,但勸人類不要主動去與他們接觸,因為與外星人接觸,“太冒險”了。68歲的霍金說,外星人如果來臨地球,可能會像哥倫布抵達美洲大陸一樣,最終對美洲土著帶來“不大好的結果”。在探索(Discovery)頻道“霍金的宇宙”節目中,霍金指出,外星生命幾已肯定在宇宙許多地方都存在,而且不單止在星球,可能在星體的中心也有,甚至在星體之間飄浮。但他認為,人類不應致力把它們找出來,而應該儘量避免和外星人有任何接觸,因為一些外星人是高智慧生物,可能會對人類構成威脅。霍金並預測,大部份外太空生命會類似微生物或小動物,但也許亦會存在先進生命體,“像遊牧民族那樣,想征服其他星體作為殖民地”。這個節目將於5月在英國播放。錄製這個新的紀錄片節目,對霍金來說是一項挑戰,因為全身癱瘓的他只能通過電腦來與外界交流。整個紀錄片的錄製耗時3年多,期間霍金對劇本多次進行修改,紀錄片反映了霍金對當代宇宙最為神秘的一些問題的思考。
      

  17.   


    object MainMenu1: TMainMenu
        Left = 376
        Top = 120
        object N11: TMenuItem
          Caption = '1'
          object N21: TMenuItem
            Caption = '2'
          end
        end
      end查看DFM文件可以看到這樣的,TMenuItem相當於是一個TMainMenu的子級,D就是通過這個來區分,我這個N21是屬於N21下的,所以N21的屬性是放在object N11裏面的,如果是和N11平級的,那就應該寫成    object N11: TMenuItem
          Caption = '1'
        end
        object N21: TMenuItem
          Caption = '2'
        end
      

  18.   

    如果自己读dfm自然可以看的比较明白,但能否用技术手段来判断呢?
    tks