在一般的客户端应用程序开发中,我们会使用 SDI 或 MDI 窗体来进行开发,SDI 用于单文档窗体,MDI 用于多文档窗体。在实际开发中,选择不同的菜单显示的内容不同,我们通常会使用不同窗体来响应菜单的动作,如何组织和显示这些不同的窗体呢?我们可以使用 MPI 窗体来展现不同的窗体,今天,我们就介绍一下 MPI 窗体及其实现。
什么是 MPI 窗体?MPI 窗体是一种非常友好的界面形式,在 MPI 窗体中,一个窗体内的多个文件可以方便地进行切换和交换数据。一般是以页形式进行显示,用户可以通过页标签在不同的页上进行切换,页与页之间可以进行数据交换。
MPI 窗体分为静态 MPI 和动态 MPI 两种形式:
静态 MPI 的页标签数量是一定的,用户只能在事先设计好的多个页面上进行切换,如下图:
动态 MPI 的标签数量不固定,由程序根据需要动态地创建或销除,比如 Delphi 中的代码编辑器。
MPI 窗体的设计可以使用 TPageControl 组件。对于静态 MPI,当我们将 TPageControl 组件放置到窗体上时,右击该组件则显示设计时的菜单,可以添加 TTabSheet 。如下图所示:
对于动态 MPI ,则需要在程序中根据用户的操作行为动态加载窗体到 TPageControl 组件中。我们可以在主窗体中增加一个私有方法,该方法实现将指定的窗体加载到 TPageControl 组件中。假设所有用户操作的窗体都是自动创建的,也就是说,所有用户操作的窗体都在 Auto-create forms 列表中。方法代码如下:
procedure TMainForm.ShowFormInPageControl(Form: TForm);
var
i: Integer;
begin
// 检查窗体是否已加载,如果已加载则激活显示
for i:=0 to MainPageControl.PageCount - 1 do
begin
TabSheet:=MainPageControl.Pages[i];
if TabSheet.Caption = Form.Caption then
begin
MainPageControl.ActivePage := TabSheet;
Exit;
end;
end;
try
// 创建新标签页
TabSheet := TTabSheet.Create(self);
TabSheet.PageControl := MainPageControl;
TabSheet.Align := alClient;
except
FreeAndNil(TabSheet);
Exit;
end;
try
// 显示窗体
Form.Parent := TabSheet;
Form.BorderStyle := bsNone;
Form.Top := 0;
Form.Left := 0;
Form.Width := TabSheet.Width;
Form.Height := TabSheet.Height;
Form.Align := alClient;
TabSheet.Caption := Form.Caption;
Form.Show;
except
FreeAndNil(Form);
Abort;
end;
MainPageControl.ActivePage := TabSheet;
end;
当用户进行操作时,直接调用该方法显示窗体即可,如:
procedure TMainForm.UserBitBtnClick(Sender: TObject);
begin
// 用户管理
ShowFormInPageControl(UserForm);
end;
留言与评论(共有 0 条评论) “” |