1

TPageControl Style を Flat Buttons ( tsFlatButtons) に設定し、イベントを使用してタブのボタンの色を変更しますOnDrawTab

動作しますが、アクティブでないボタンには灰色 (btnFace 色) の境界線があります! ここに画像の説明を入力

これを修正する方法はありますか?

procedure TForm1.PageControlDrawTab(Control: TCustomTabControl;
          TabIndex: Integer; const Rect: TRect; Active: Boolean);

var
  AText: string;
  ARect: TRect;

begin
  with (Control as TPageControl).Canvas do
  begin
    ARect := Rect;
    OffsetRect(ARect, 0, 4);

    Brush.Color := COLOR1;
    FillRect(Rect);

    AText := TPageControl(Control).Pages[TabIndex].Caption;

    with Control.Canvas do   
      DrawText(Control.Canvas.Handle, PChar(AText), -1,ARect, DT_CENTER or DT_SINGLELINE);

  end;
end;
4

3 に答える 3

1

これは非常に古い投稿であることは知っていますが、完全な回答がなく、同じ問題があり、最終的にその方法を見つけたので、お知らせする必要があると思いました...

また、一部のタブで tabvisible が False に設定されている場合、コードはうまく機能しません。これを修正するには、整数 i を使用してタブをループするのが最善の方法だと思います。

for I := 0 to TPageControl(Control).PageCount-1 do
  if TPageControl(Control).Pages[I].TabIndex = TabIndex then
begin
  FillRect(Control.Canvas.Handle,aRect,Control.Canvas.Brush.Handle);
  // Do your text drawing here
  break;
end;
于 2012-08-09T09:03:04.400 に答える
1

回避策として、デザインが問題ない場合は ここに画像の説明を入力 、現在のタブを非表示にすることができます。

  for I := 0 to Pred(PageControl1.PageCount) do
    PageControl1.Pages[I].TabVisible := False;

次のプロパティを持つTTabSetを追加します。

BackgroundColor := clGradientActiveCaption;
SelectedColor := clGradientActiveCaption;
Style := tsModernTabs
于 2011-08-30T14:37:21.100 に答える
0

Win64 ビットでの Draw の問題を修正するには、以下のこのユニットを参照してください。

https://forums.embarcadero.com/thread.jspa?messageID=292598

于 2014-01-27T19:52:58.643 に答える