用TPageControl动态创建的TTabSheet标签页上带有关闭自身的关闭按钮,就像360浏览器的标签一样,代码咋写  谢谢赐教

解决方案 »

  1.   

    HI.马铮哥
    var
     g_hBtn : HWND
    begin
     g_hBtn:=CreateWindow('Button','x', //X表示叉叉
                           WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT,
                           260, 1, 38, 38, handle, 0, 0, nil);//位置自己调未测。一方案
      

  2.   

    如果你使用TcxTabControl控件,就不用写任何语句,仅需设置属性即可达到你要的效果。
      

  3.   


    我也是用的TcxTabControl,感觉效果还是很不错的。
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls;type
      TPageControl = class(ComCtrls.TPageControl)
      private
        procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
      end;  TForm1 = class(TForm)
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TPageControl }procedure TPageControl.WMLButtonDown(var Message: TWMLButtonDown);
    var
      I: Integer;
      R: TRect;
    begin
      inherited;
      //Form1.Text := Format('X:%d, Y:%d', [Message.XPos, Message.YPos])
      for I := 0 to PageCount-1 do
      begin
        R := TabRect(I);
        R.Left := R.Right - 20;
        if PtInRect(R, Point(Message.XPos, Message.YPos)) then
        begin
          Pages[I].Destroy;
          Break
        end;
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      TabSheet1.Caption := 'TabSheet1        X';
      TabSheet2.Caption := 'TabSheet2        X';
    end;end.
      

  5.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, Buttons;type
      TForm1 = class(TForm)
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        SpeedButton1: TSpeedButton;
        SpeedButton2: TSpeedButton;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        procedure DoCloseClick(Sender: TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DoCloseClick(Sender: TObject);
    begin
      PageControl1.Pages[TComponent(Sender).Tag].Destroy;
      Sender.Destroy;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      TabSheet1.Caption := 'TabSheet1         ';
      SpeedButton1.Tag := 0;
      SpeedButton1.Flat := True;
      SpeedButton1.Caption := 'X';
      SpeedButton1.Width := 12;
      SpeedButton1.Height := 12;
      SpeedButton1.Parent := PageControl1;
      with PageControl1.TabRect(0) do
      begin
        SpeedButton1.Left := Right - 20;
        SpeedButton1.Top := Top + ((Bottom - Top) - 12) div 2;
      end;
      SpeedButton1.OnClick := DoCloseClick;  TabSheet2.Caption := 'TabSheet2         ';
      SpeedButton2.Tag := 1;
      SpeedButton2.Flat := True;
      SpeedButton2.Caption := 'X';
      SpeedButton2.Width := 12;
      SpeedButton2.Height := 12;
      SpeedButton2.Parent := PageControl1;
      with PageControl1.TabRect(1) do
      begin
        SpeedButton2.Left := Right - 20;
        SpeedButton2.Top := Top + ((Bottom - Top) - 12) div 2;
      end;
      SpeedButton2.OnClick := DoCloseClick;
    end;end.
      

  6.   

    呃. 用三方控件 rzPageControl 就可以了. 属性简单设置就可以达到你要的功能
      

  7.   


    比如 那个两边都截取斜角的选项卡, 只用设置 rzPageControl.TabStyle:= tsDoubleSlant;  就可以了..属性基本上已经可以满足所有的样式了.. 当然如果想要好看,, 那配合皮肤控件使用. 那就完美了...
      

  8.   


    关闭这个.. 用 rzPageControl.ShowCloseButton:= True; 就可以了. 然后那个关闭的小叉叉,也可以自己指定图片..