用过CuteFTP的知道,或者是在Delphi6,JBuilder中可以看到这种界面:
每一个Unit是用TabControl控制的,但是每个Unit下面有又Code和Diagram的
页面切换。不知道这个用的是什么控件,应该也是Delphi提供的标准控件吧?
或者是通过API实现的?好像和一般的有很大不同,它的Code 和Diagram的切换标签嵌入到了一个状态栏中,这个怎么实现的呢?
每一个Unit是用TabControl控制的,但是每个Unit下面有又Code和Diagram的
页面切换。不知道这个用的是什么控件,应该也是Delphi提供的标准控件吧?
或者是通过API实现的?好像和一般的有很大不同,它的Code 和Diagram的切换标签嵌入到了一个状态栏中,这个怎么实现的呢?
似乎不是这样的。
新建一个工程,然后加入一个PageControl,添加页面后,将TabPosition 设为Bottom,
但这样并不能得到那种效果。
观察可以发现,不仅是标签的形状不一样,而且标签被嵌入到状态栏中了!
我需要的就是这种效果。
unit TabForm;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Frame2u, Frame3u, StdCtrls, ComCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Tab: TTabControl;
procedure TabChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure ShowFrame (FrameName: string);
end;var
Form1: TForm1;implementation{$R *.DFM}type
TFrameClass = class of TFrame;procedure TForm1.ShowFrame(FrameName: string);
var
Frame: TFrame;
FrameClass: TFrameClass;
begin
Frame := FindComponent (FrameName + '1') as TFrame;
if not Assigned (Frame) then
begin
FrameClass := TFrameClass (FindClass ('T' + FrameName));
Frame := FrameClass.Create (Self);
Frame.Parent := Tab;
Frame.Visible := True;
Frame.Name := FrameName + '1';
end;
Frame.BringToFront;
end;procedure TForm1.TabChange(Sender: TObject);
begin
ShowFrame (Tab.Tabs [Tab.TabIndex]);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
ShowFrame (Tab.Tabs [Tab.TabIndex]);
end;end.
我现在要做的东西如果能用上这种界面就很方便,而且也很正式。
不知我说清楚没有,我就是指的 Delphi里面的编辑区中的那种界面。
编辑区域下面有个Code 和Diagram可以相互切换,就要这种效果。 而且切换图标潜入到状态中。chenwc(海市蜃楼)兄说的那个控件组的全称是什么呢?
然后在每页上放置一个Notebook控件,在PageControl下面放置一个TabSet
在onshow中加入下列代码。
TabSet1.Tabs:=Notebook1.Pages;
加入下列代码
procedure TForm1.TabSet1Click(Sender: TObject);
begin
if PageControl1.ActivePageIndex = 1 then
Notebook1.PageIndex := TabSet1.TabIndex
else if PageControl1.ActivePageIndex = 0 then
Notebook2.PageIndex := TabSet1.TabIndex
end;procedure TForm1.PageControl1Change(Sender: TObject);
begin
if PageControl1.ActivePageIndex = 0 then
TabSet1.Tabs := Notebook2.Pages
else if PageControl1.ActivePageIndex = 1 then
TabSet1.Tabs := Notebook1.Pagesend;procedure TForm1.FormShow(Sender: TObject);
begin
TabSet1.Tabs := Notebook2.Pages;
end;
我测试了,跟Delphi6中Code editor一模一样
可能有人说用控件1stClass很容易实现,可我觉得能用Delph自带的控件实现,就不用第三方的了。
不过还有一点,你提到的用win3.1控件,察看帮助后,按照帮助的意思,似乎用
TabControl,TPageControl似乎也能实现,而且更为正式一些.
希望能继续讨论!