function TForm1.Findwd(cpn:string):Boolean;  //查找窗体的代码
var
  fd:Boolean;
  i:Integer;
begin
  fd:=False;
  for i:=0 to cxPageControl1.TabCount-1 do
  begin
    if cxPageControl1.Pages[i].Caption=cpn then
    begin
       fd:=True;
       cxPageControl1.ActivePageIndex:=i;
       Break;
    end;
  end;
  Result:=fd;
end;
  procedure TForm2.ShowForm;//窗体显示的代码
var
  tb:TcxTabSheet;
begin
  tb:=TcxTabSheet.Create(Self);
  tb.PageControl:=form1.cxPageControl1;
  Application.CreateForm(TForm2,Form2);
  Form2.BorderIcons:=[];
  Form2.BorderStyle:=bsNone;
  Form2.Align:=alClient;
  Form2.Parent:=tb;
  tb.Caption:=Form2.Caption;
  form1.cxPageControl1.ActivePageIndex:=form1.cxPageControl1.TabCount-1;
  Form2.Show;
  Form2:=nil;
end;procedure TForm1.RzGroup1Items0Click(Sender: TObject);//单击显示时人代码
begin
 if not Findwd(RzGroup1.Items[0].Caption) then
    Form2.ShowForm;
end;其中用了devexpress的第三方控件,为了实现单击TForm1.RzGroup1Items0就在form1的pagecontrol中出现form2
现在的问题是:1.如果多次单击item0的话出现连续相同的页面,怎样让相同的页面只出现一次。
              2.我看其实demo中,Tabsheet右上角都有一个关闭的图标,很方便,我的怎么没有。
我是新手让各位哥哥们费心了,先谢过各位

解决方案 »

  1.   

    Pages不能用,就用Tabs试试看。
    关闭是在 Options 里pcoCloseButton
      

  2.   

    第二个问题解决了,第一问题呢,怎么每单击一次tabsheet重复显示啊,
      

  3.   

    Delphi pagecontrol+formS 
    编辑 | 删除 | 权限设置 | 更多▼ 更多▲ 设置置顶 推荐日志 转为私密日志 待者    发表于2009年05月18日 13:10 阅读(5) 评论(0) 
    分类: 个人日记 权限: 公开 
     
     
    implementation
    uses Unit5,Unit2,Unit4;
    {$R *.dfm}
    procedure TForm1.N4Click(Sender: TObject);
    var
    ts: TRzTabSheet;
    Form2:TForm2;
    i,j:integer;
    begin
    i:=0;
    j:=0;
      if   TForm2(FindComponent('form2'))   =   nil   then
          begin
              ts:= TRzTabSheet.Create(Self);
      ts.PageControl := RzPageControl1;
         Form2 := TForm2.Create(Self);
      ts.Caption:='form2';
      Form2.Parent := ts;
      Form2.Align := alClient;
      Form2.BorderStyle := bsNone;
      Form2.Show;
      Rzpagecontrol1.ActivePage:=ts;
       end
        else
          begin
          for i:=0  to rzpagecontrol1.PageCount -1 do
        begin
        if rzpagecontrol1.Pages.Caption ='form2' then
        begin
            j:=i;
        break;
        end;
        end;
           RzPageControl1.ActivePage :=RzPageControl1.Pages[j];
          end;
    end;
    procedure TForm1.N3Click(Sender: TObject);
    var
    ts: TRzTabSheet;
    Form4:TForm4;
    i,j:integer;
    begin
    i:=0;
    j:=0;
      if   TForm4(FindComponent('form4'))   =   nil   then
          begin
              ts:= TRzTabSheet.Create(Self);
      ts.PageControl := RzPageControl1;
         Form4 := TForm4.Create(Self);
      ts.Caption:='form4';
      Form4.Parent := ts;
      Form4.Align := alClient;
      Form4.BorderStyle := bsNone;
      Form4.Show;
      Rzpagecontrol1.ActivePage:=ts;
          end
          else
          begin
          for i:=0  to rzpagecontrol1.PageCount -1 do
        begin
        if rzpagecontrol1.Pages.Caption ='form4' then
        begin
            j:=i;
        break;
        end;
        end;
           RzPageControl1.ActivePage :=RzPageControl1.Pages[j];
          end;
    end;
    procedure TForm1.RzPageControl1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
      index:integer;
      begin
    if (Button = mbLeft) and (ssDouble in Shift) then
      begin
       Index := RzPageControl1.TabAtPos (X, Y);
        if rzpagecontrol1.PageCount >1 then
        begin
        if index<rzpagecontrol1.PageCount-1 then
            begin
          RzPageControl1.Pages[Index].Free;
             RzPageControl1.ActivePage :=RzPageControl1.Pages[index];
          end
          else
           begin
           RzPageControl1.Pages[Index].Free;
           RzPageControl1.ActivePage :=RzPageControl1.Pages[index-1];
           end;
           
          end
          else
         RzPageControl1.Pages[Index].Free;
      end;
    end;  
    /////////////////这是可以解决你得需求!如果要原程序 你加我QQ81388409