思索的空间

-- 唯进步,不止步

博客园 首页 新随笔 联系 订阅 管理
最近看了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界面了。
posted on 2008-04-23 21:37  NeoYao  阅读(2386)  评论(3编辑  收藏  举报