请问各位,我做了一个mdi的多文档应用程序,切换子窗口代码如下,为什么切换的过程中界面狂闪呢?抖动。是不是原因不是代码的问题,而是delphi一些设置的问题呢?//打开子窗口,不一定要创建
procedure TfMainWindow.OpenChildForm(FormClass: TFormClass;var AForm;AOwner:TComponent=nil);
var
  i: integer;
  Child:TForm;
begin
  for i := 0 to Application.MainForm.MDIChildCount -1  do
  begin
    if Application.MainForm.MDIChildren[i].ClassType = FormClass then
      begin
        Child:=Application.MainForm.MDIChildren[i];
        if Child.WindowState <> wsMaximized then
           Child.WindowState:=wsMaximized;
        Child.BringToFront;
        Child.Setfocus;
        Child.WindowState := wsMaximized;
        TForm(AForm):=Child;
        exit;
      end;
   end;
    Child:=TForm(FormClass.NewInstance);
    TForm(AForm):=Child;
    Child.Create(nil);
    Child.WindowState := wsMaximized;
    Child.Show;
end;

解决方案 »

  1.   

    楼主:
    你应该知道MDI任何一个窗口最大化,其他子窗口都会自动最大化的.你的问题就在于最大化.
      

  2.   

    要修改Form单元中的一行代码,自已试试
      

  3.   

    可是我的程序需要最大化阿,那怎么办呢?
     to crownsoft(希望) :修改那一行代码,是什么意思?
      

  4.   

    解决的方法之一:(子窗体属性为wsNormal)
      for i := 0 to Application.MainForm.MDIChildCount -1  do
      begin
        if Application.MainForm.MDIChildren[i].ClassType = FormClass then
          begin
            Child:=Application.MainForm.MDIChildren[i];
            if Child.WindowState = wsMinimized then
               Child.WindowState:=wsMaximized;
            Child.BringToFront;
            Child.Setfocus;
         //   Child.WindowState := wsMaximized;
            TForm(AForm):=Child;
            exit;
          end;
       end;
       Child:=TForm(FormClass.NewInstance);
       TForm(AForm):=Child;
       Child.Create(nil);
       if Application.MainForm.MDIChildCount = 1 then
         Child.WindowState := wsMaximized;
       Child.Show;
      

  5.   

    前辈们的方法:
    1.修改\Borland\Delphi5\Source\Vcl下的Forms文件:
      注释掉CMShowingChanged过程的SendMessage(Application.MainForm.ClientHandle, WM_MDIRESTORE, Handle, 0);   这一句2.在Delphi设置Library path,加入\Borland\Delphi5\Source\Vcl路径,并放在第一条位置。3.子窗的WindowState属性设为wsNormal4.在了窗的OnCreate()事件加一句  WindowState:=wsMaximized;我的程式就是这样写的,非常好!