把pagecontrol的ownerdrow属性置为true,改变页面标签背景颜色代码如下,可是原来各属性页tabsheet上的图片就不见了,怎样再重画出来呀????procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
  TmpRect: TRect;
begin
  with PageControl1.Canvas do
  begin
    Brush.Color := clBlack;
    Font.Color := clWhite;
    FillRect(Rect);
    TmpRect := Rect;
    OffsetRect(TmpRect, 0, 3);
    DrawText(Handle, PChar(PageControl1.Pages[TabIndex].Caption), -1, TmpRect, DT_CENTER or DT_VCENTER);
  end;
end;

解决方案 »

  1.   

    procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
      TabIndex: Integer; const Rect: TRect; Active: Boolean);
    var
      TmpRect: TRect;
      ico:TIcon;
    begin
      with PageControl1.Canvas do
      begin
        Brush.Color := clBlack;
        Font.Color := clWhite;
        FillRect(Rect);
        TmpRect := Rect;
        OffsetRect(TmpRect, 0, 3);
        DrawText(Handle, PChar(PageControl1.Pages[TabIndex].Caption), -1, TmpRect, DT_CENTER or DT_VCENTER);
        ico:=TIcon.Create;
        il1.GetIcon(TabIndex,ico);
        Draw(Rect.Left+2,Rect.Top+2,ico);
        ico.Free;
      end;
    大概这样,位置自己再调整一下
      

  2.   

    加上了,可是原来的效果不见了,我的效果是,当属性页为活动页时,它的imageindex为打开的一本书,其余的imageindex为关闭的一本书,现在没有这个效果了,只是把image中的图标罗列到各个属性页上了???怎么办呀????
      

  3.   

    你要自己判断tab的状态,然后再画对应的图标就行了
    PageControl1.ActivePageIndex跟TabIndex比较,一样就画打开的书,不一样都画关闭的书
      

  4.   

    .....
    ico:=TIcon.Create;
    dm.ImageL_pg.GetIcon(TabIndex,ico);
    if TabIndex=PageControl1.ActivePage.TabIndex then
    Draw(Rect.Left+2,Rect.Top+2,ico);//这里怎么写???
    ico.Free;
    .....
      

  5.   

    因为imagelist里有两个icon图标,怎样让它分开画呢,不然一画就都画上了呀??????????、
      

  6.   

    procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
      TabIndex: Integer; const Rect: TRect; Active: Boolean);
    var
      TmpRect: TRect;
      ico: TIcon;
    begin
      with PageControl1.Canvas do
      begin
        Brush.Color := clBlack;
        Font.Color := clWhite;
        FillRect(Rect);
        TmpRect := Rect;
        OffsetRect(TmpRect, 0, 3);
        DrawText(Handle, PChar(PageControl1.Pages[TabIndex].Caption), -1, TmpRect,
          DT_CENTER or DT_VCENTER);
        ico := TIcon.Create;
        if PageControl1.ActivePageIndex = TabIndex then
          ImageList1.GetIcon(0, ico)
        else
          ImageList1.GetIcon(1, ico);
        Draw(Rect.Left + 2, Rect.Top + 2, ico);
        ico.Free;
      end;
    end;
      

  7.   

    不行的,当鼠标单击切换活动页面时,各属性页不会自动找到各自的imageindex
      

  8.   

    好的,我是想实现这样效果:
    pagecontrol1上有tabsheet1,tabsheet2,tabsheet3
    这三个属性页谁当前,那么它的imageindex为1(为一个打开的书状的图标),其余二个的imageindex为0(为一个关闭的图标)。
    因为我不想用pagecontrol1那个灰色的标题背景,所以我采用重画的方法,这样一来就要重画标题上的图标,就是上面的写的
    不明白的话,请再问我
      

  9.   

    噢,我这里试过了,当依次打开tabsheet1,tabsheet2,tabsheet3时,它们都会是一个打开状态,即只显示(一个打开书状的图标),当鼠标再移到它们上面时才会把另外两个的图标变成关闭的状态!
      

  10.   

    加一个事件:procedure TForm1.PageControl1Change(Sender: TObject);
    begin
    (Sender as TPageControl).Refresh;
    end;