代码:
在主窗体Form1中放置一个ScrollBox1,另生成一窗体
ScrollBox1的AutoScroll属性设为True;
Form2 := TForm2.Create(Application);
Windows.SetParent(Form2.Handle, ScrollBox1.Handle);
Form2.Show;
拖动Form2,当Form2的部分窗体超出ScrollBox1范围时,
ScrollBox1不会出现滚动条,求解决办法。

解决方案 »

  1.   

    Form2.Parent = ScrollBox1;即可
    不过你这个做法有些点值得商榷:
    1.Form本身是有Scroll的
    2.如果要把一个Form放到另一个中,为什么不用Frame?
    3.不论如何,如果Form2是一个普通的窗体 这段代码可能在Win9x下出错
    解决的办法是在TForm2中加入
    procedure CreateParams(var Params: TCreateParams);override;procedure TForm2.CreateParams(var Params: TCreateParams);
    begin
      inherited;
      Params.Style := WS_CHILD;
    end;
      

  2.   

    form2:=TForm2.Create(ScrollBox1);
     form2.Parent:=ScrollBox1;
     form2.Show;
      

  3.   

    呵呵,这分太诱人了,
       form2:=TForm2.Create(Application);
       form2.Parent:=ScrollBox1;
       form2.Show;
    然而这样:
    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
       Action:=caFree;
    end;
      

  4.   

    2.如果要把一个Form放到另一个中,为什么不用Frame?//問題大家都給解決了,不過比較讚成這個觀點,為什麼非要用FROM呢?--------------------------------------------------------------------------
    |                                                                        |
    |                      抓你頭 踢你臉,嘴裡唱著心太軟                             |
    |                      先踢腿 後踢背,胯胯軸子踹稀碎;                           |
    |                      腰打斷 腿打折,肋巴扇子蹬骨折;                           |
    |                      先抽筋 再放血,腦袋瓜子打稀癟!                           |
    |                                  服不?                                      |
    |                                                                        |
    --------------------------------------------------------------------------
      

  5.   

    --------------------------------------------------------------------------
    |                                                                        |
    |                      抓你頭 踢你臉,嘴裡唱著心太軟                             |
    |                      先踢腿 後踢背,胯胯軸子踹稀碎;                           |
    |                      腰打斷 腿打折,肋巴扇子蹬骨折;                           |
    |                      先抽筋 再放血,腦袋瓜子打稀癟!                           |
    |                                  服不?                                      |
    |                                                                        |
    --------------------------------------------------------------------------逗,有趣!
    这种情况,我也赞成是用Frame
      

  6.   

    同志们,我现在是举了一个窗口的例子,其实是有多个窗体放入到ScrollBox中,这样我就可以在ScrollBox中拖动滚动条来浏览多个窗口了,上面的Form2。Parent := ScrollBox1,请大家自己试试,看看窗口的标题栏是是不是总是灰的,无法获得焦点。
      

  7.   

    >>>>我现在是举了一个窗口的例子,其实是有多个窗体放入到ScrollBox中,这样我就可以在ScrollBox中拖动滚动条来浏览多个窗口了.这个完全可以用MDI来实现,为什么要用ScrollBox呢。
      

  8.   

    是啊,如果是那种情况,为什么不用MDI来实现啊,方便多了。
      

  9.   

    其实解决方法很简单:Windows.SetParent(Form2.Handle, ScrollBox1.Handle); 
    改为:Form2.Parent := ScrollBox1;
      

  10.   

    Form2.Parent := ScrollBox1;
    窗体将无法获得焦点。
      

  11.   

    form2:=TForm2.Create(ScrollBox1);
     form2.Parent:=ScrollBox1;
     form2.Show;
    这样是可以的
      

  12.   

    Windows.SetParent(Form2.Handle, ScrollBox1.Handle); 
    可以使窗体获得焦点,但是现在的问题是当我们把窗口拖动到ScrollBox范围之外时,ScrollBox不会自动出现滚动条,如何解决这个才是关键。
      

  13.   

    好多的分。我也来接一点,呵呵~!
    随便问一下,为什不使用MDI来实现呢?
      

  14.   

    那里,楼上孩子看过来:
    after windows api setparent was called,
    thus the orig parent and current parent have no awareness you must call sendmessage send   WM_CHANGEUISTATE to it's two parent.