比如TStringGrid的scrollbar和TTreeview的Scrollbar,是不是使用了windows标准控件呢?如果是的话是在哪里声明的呢?请大虾指点一二!

解决方案 »

  1.   

    你是看得delphi帮助吧,那都被封装了,要看源代码,比如TStringGrid的前几代的(没数)中有
    TCustomGrid = class(TCustomControl)
      private
        procedure SetScrollBars(Value: TScrollStyle);
        procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL;
        procedure WMVScroll(var Msg: TWMVScroll); message WM_VSCROLL;
      protected
        property ScrollBars: TScrollStyle read FScrollBars write SetScrollBars default ssBoth;
      

  2.   

    gogogo(嘿嘿) 兄,SetScrollBars调用了API函数Perform(CM_RECREATEWND, 0, 0),这是不是说ScrollBar是windows标准控件中的组成部分啊?
      

  3.   

    你可以看看WIN API CreateWindow的参数,好象是里面的style里有scrollbar的参数
    CM_RECREATEWND是Delphi自己定义的消息,收到此消息它会重建wnd,一个较复杂的过程,设置很多窗口style时也会重建wnd,这也是很多时候改窗口的style会造成窗口闪烁的原因.
      

  4.   

    有没有scrollbar关键是窗口(控件)的style决定的,关键你要注意他哪个地方改了窗口的风格,如果你用过vc,就会知道,对话框上的控件只不过是一些不同风格的资源而已,其属性和方法等操作元素是后来再附加上去的,也就是说如果没有后台代码,只用资源仍然可以使用这个只能显示的控件。