最近看了VirtualTreeview的Demo有感,在我们做程序UI时,有的程序只是一个单窗体,但是点击ToolBar的SpeedButton后,会切换到不同的子窗体上,实现了窗体之间的快速切换,而且界面风格简单明了,同时避免了设计阶段在同一主Form中的元素过多。电驴eMule就是这种风格中典型的一例。
下面我们来看看这种UI界面是如何设计的。
1、启动Delphi,新建一个VclForm程序。通常在多窗口程序设计里要使用MDI窗口类型来装载各个子窗体,但是在这里我们的主窗体的FormStyle仍然使用fsNormal类型。然后我们使用Panel控件(Panel1)置顶做为整个程序的快速按钮放置的地方,并在Panel上放置好你所需要的SpeedButton,并依次设置好它们的tag以用于判断是哪个button被点击。
2、在主窗体的toolbar以下需要显示子窗体的位置,放置另外一个panel(Panel2),并设置位置属性为alClient。这个panel是后面依次响应不同的button点击后显示不同的form的容器。
3、编写判断button点击的公共代码如下,各个button的OnClick事件均使用此代码判断并响应显示相应的form:
procedure TForm1.ButtonClick(Sender: TObject);
var
NewFormClass:TFormClass;
NewForm:TForm;
begin
case (Sender as TSpeedButton).Tag of
0:NewFormClass:=TForm2; //TForm2是点击button0时要显示的form
1:NewFormClass:=TForm3; //Tform3是点击button1时要显示的form
... ....
else
NewFormClass:=nil;
end;
if (Panel2.ControlCount=0) or not (Panel2.Controls[0] is NewFormClass) then
begin
if Panel2.ControlCount>0 then Panel2.Controls[0].free;
if Assigned(NewFormClass) then
begin
NewForm:=NewFormClass.Create(self);
NewForm.Parent:=Panel2;
NewForm.Hide;
NewForm.BorderStyle:=bsNone;
NewForm.align:=alClient;
NewForm.show;
end;
end;
end;
这样,就可以得到类似eMule子Form显示方式的UI界面了。
下面我们来看看这种UI界面是如何设计的。
1、启动Delphi,新建一个VclForm程序。通常在多窗口程序设计里要使用MDI窗口类型来装载各个子窗体,但是在这里我们的主窗体的FormStyle仍然使用fsNormal类型。然后我们使用Panel控件(Panel1)置顶做为整个程序的快速按钮放置的地方,并在Panel上放置好你所需要的SpeedButton,并依次设置好它们的tag以用于判断是哪个button被点击。
2、在主窗体的toolbar以下需要显示子窗体的位置,放置另外一个panel(Panel2),并设置位置属性为alClient。这个panel是后面依次响应不同的button点击后显示不同的form的容器。
3、编写判断button点击的公共代码如下,各个button的OnClick事件均使用此代码判断并响应显示相应的form:
procedure TForm1.ButtonClick(Sender: TObject);
var
NewFormClass:TFormClass;
NewForm:TForm;
begin
case (Sender as TSpeedButton).Tag of
0:NewFormClass:=TForm2; //TForm2是点击button0时要显示的form
1:NewFormClass:=TForm3; //Tform3是点击button1时要显示的form
... ....
else
NewFormClass:=nil;
end;
if (Panel2.ControlCount=0) or not (Panel2.Controls[0] is NewFormClass) then
begin
if Panel2.ControlCount>0 then Panel2.Controls[0].free;
if Assigned(NewFormClass) then
begin
NewForm:=NewFormClass.Create(self);
NewForm.Parent:=Panel2;
NewForm.Hide;
NewForm.BorderStyle:=bsNone;
NewForm.align:=alClient;
NewForm.show;
end;
end;
end;
这样,就可以得到类似eMule子Form显示方式的UI界面了。