经典的调用窗口函数:调用融合窗口

来源:互联网 发布:七夜java下载 编辑:程序博客网 时间:2024/06/05 17:40

 

融合窗口是为了浏览多窗口方便,且不太关心窗口最小化和最大化模式。典型的融合窗口,比如Maxthon浏览器,浏览多个网页非常方便;微软眼见融合窗口众望所归,在IE7版本也引入了融合窗口技术,但微软的IE既耗内存又容易崩溃。题外话不多说了。在delphi实现其实也很简单,如上图:

procedure ShowDockForm(FormClass: TFormClass; dockCtrl: TWinControl;
IsMaxed: Boolean);

procedure ShowCaption(ParentCtrl:TWinControl;ACaption:string);
begin
    if ParentCtrl is TRzTabSheet then
     TRzTabSheet(ParentCtrl).Caption := ACaption;
end;

var
i: Integer;
TabCtrl:TRzTabSheet;
Form:TForm;
begin
Screen.Cursor := crHourGlass;
try
    for i := 0 to Screen.CustomFormCount - 1 do
      if Screen.CustomForms[i] is FormClass then
      begin
        if (not (Screen.CustomForms[i]).Visible) then
          (Screen.CustomForms[i]).Visible := True;
        (Screen.CustomForms[i]).BringToFront;
        (Screen.CustomForms[i]).SetFocus;
        TabCtrl := TRzTabSheet(Screen.CustomForms[i].Parent);
        ShowCaption(TabCtrl,Screen.CustomForms[i].Caption);
        TRzPageControl(dockCtrl).ActivePageIndex := TabCtrl.PageIndex;
          exit;
      end;

    TabCtrl := TRzTabSheet.Create(dockCtrl);   //dockCtrl
    TabCtrl.PageControl := TRzPageControl(dockCtrl);
    TRzPageControl(dockCtrl).ActivePageIndex := TabCtrl.PageIndex;

    Form := FormClass.Create(TabCtrl);
    with Form do
    try
      ManualDock(TabCtrl);
      ShowCaption(TabCtrl,Caption);

      Show;
      Form.WindowState := wsMaximized;
      Form.Align := alClient;
    except
      Free;
    end;
   
finally
    Screen.Cursor := crDefault;
end;
end;


以上代码是在 Raize 5.X中的TRzPageControl 实现多窗口的融合窗口。

融合窗口也有不足之处,如果两个TForm有相同的TActionList快捷键,只有第一个窗口的快捷键有效。

原创粉丝点击