1、动态创建tabsheet,在上面放一个GRID怎么实现?我写的代码看不到需要的表格2、怎样实现双击某个标签关闭相应的页面?3、怎样使各个标签的大小一样,caption成都大于标签长度的加'...'?btw: myie那样的界面是如何实现的?是通过PageControl吗?

解决方案 »

  1.   

    var 
    tabsheet:TTabSheet;
    dbgrid:Tdbgrid;
    begin
      tabsheet:=TTabSheet.create(application);
      tabsheet.parent:=form1;
      dbgrid:=Tdbgrid.create(application);
      dbgrid.parent:=tabsheet;
    end;
      

  2.   

    建议你用TTabControl控件,这样你可建一个共用的TDBGrid,
    根据条件切换标签和TDBGrid中的内容即可。
    真要动态创建TDBGrid很麻烦...
      

  3.   

    谢谢,第一个问题解决了^_^那第二个问题呢?怎么实现双击析构tabsheet?
      

  4.   

    //第二个问题参考如下代码~~
    procedure TForm1.PageControl1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      if Assigned(TPageControl(Sender).ActivePage) and
        (ssDouble in Shift) and (Button = mbLeft) then
        TPageControl(Sender).ActivePage.Free;
    end;
      

  5.   

    //第三个问题参考如下代码~~
    //uses StdCtrls; //TLabelfunction DisplayWidth(mCaption: string; mCanvas: TCanvas;
      mWidth: Integer; mHotkey: Boolean = False): string;
    var
      I: Integer;
      W: WideString;
    begin
      Result := '';
      if not Assigned(mCanvas) then Exit;
      with TLabel.Create(nil) do try
        ShowAccelChar := mHotkey;
        Font.Assign(mCanvas.Font);
        Caption := mCaption;
        Result := Caption;
        if Width <= mWidth then Exit;
        W := mCaption;
        for I := 1 to Length(W) do begin
          Caption := Copy(W, 1, I) + '...';
          if Width > mWidth then Exit;
          Result := Caption;
        end;
      finally
        Free;
      end;
    end; { DisplayWidth }procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
      TabIndex: Integer; const Rect: TRect; Active: Boolean);
    var
      S: string;
      vRect: TRect;
    begin
      S := DisplayWidth(TPageControl(Control).Pages[TabIndex].Caption,
        Control.Canvas, TPageControl(Control).TabWidth - 5, True);
      vRect := Rect;
      DrawText(Control.Canvas.Handle, PChar(S), Length(S), vRect,
        DT_CENTER or DT_VCENTER or DT_SINGLELINE);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      PageControl1.TabWidth := 50;
      PageControl1.OwnerDraw := True;
    end;
      

  6.   

    //想想了,系统应该提供画“...”的方法~~
    procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
      TabIndex: Integer; const Rect: TRect; Active: Boolean);
    var
      S: string;
      vRect: TRect;
    begin
      S := TPageControl(Control).Pages[TabIndex].Caption);
      vRect := Rect;
      DrawText(Control.Canvas.Handle, PChar(S), Length(S), vRect,
        DT_CENTER or DT_VCENTER or DT_SINGLELINE or DT_WORD_ELLIPSIS);
    end;
      

  7.   

    to 伴水清清
      你最后给的那个方法好像不行啊,看不到‘...',好像是Flags不对啊