rzpagecontral的rztabsheet怎么知道点击的是图标啊?我想实现向网页一样的每个rztabsheet都带一个关闭按钮。

解决方案 »

  1.   

    RZPageControl自带ShowCloseButtonOnActiveTab,设置为True即可在RZTabSheet带个关闭按钮。
    RZTabSheet没有直接提供单击的是图标,但我们可以在单击事件中根据点坐标相对RZTabSheet偏移量
    算出单击的是哪个区域(图标,文字,关闭按钮)。
      

  2.   

    我用pagecontral可以实现。
    procedure TVideo_Main.PageControl1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
      HitTest: TTCHitTestInfo;
      IDX:Integer;
    begin
      with HitTest do
      begin
        //这里得到的IDX是Tab的Index.
        IDX := TabCtrl_HitTest(TRZTabControl(Sender).Handle, @HitTest);  
            ShowMessage(inttostr(idx));
        //如果能正确得到Index,说明是在TAB按钮上单击。
        if (IDX > -1) then
        begin
          //如果是在ICON上的单击。常量定义在下面。
          if (flags and TCHT_ONITEMICON) <> 0 then
          begin
            //这里可以根据上面的IDX作一些操作,例如关闭IDX的页。
            //ShowMessage('在图标中单击.');
          end;
        end;
      end;
    end;
    但是rzpagecontral就是不行。
      

  3.   


    procedure TForm.rzPageControlMouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
      TabIndex, OffsetBmpIndex, OffsetX: Integer;
    const
      //定位图片的像素宽度,默认是16像素,再加4,因为图标前面还有4个像素空出
      BmpOffsetWidth = 16 + 4;
    begin
      if Shift = [ssLeft] then
      begin
        //当前点中的是哪个页签
        TabIndex := pcMain.TabAtPos(X, Y);
        if TabIndex >= 0 then
        begin
          //将当前坐标减去图片的偏移量,判断此时击中的页签
          //如果两个不一样,说明击中的是页签图标区域
          OffsetX := X - BmpOffsetWidth;
          OffsetBmpIndex := pcMain.TabAtPos(OffsetX, Y);
          if TabIndex > OffsetBmpIndex then
          begin
            //两者不同,击中的是页签的图标
            ShowMessage('点中页签' + InttoStr(TabIndex) + '的图片了!');
          end;
        end;
      end;
    end;
      

  4.   

    谢谢 YLCN2010(淡定)。pcMain写错了,应该是rzPageControl。