質問

ラザロ0.9.30.2を実行しています。 TPAGECONTROLがあるTFORMがあります。 Tpagecontrolには、一連のttabsheetsがあります(そのうち約30)。私がやりたいのはタブのカラーコードです。したがって、最初の10は赤、次の10は青で、最後の10は緑です。イントラネットでコードスニペットを見て、タブシートの色(タブ自体を含む)をクリックしてナビゲートするとき(アクティブタブを強調表示するために)。タブシートが最初にロードされます。

これを行う方法はありますか?

enter image description here

役に立ちましたか?

解決

少し難しい解決策を手に入れるだけで十分なら テーマが無効になっているWindowsでのみ動作します 次に、次のことを試してください。

チェックしてください Use manifest file to enable themes (Windows only) からのオプション Project / Project Options ... プロジェクト設定]ダイアログとページコントロールを使用して、次のコードをユニットに貼り付けます。インターポーズクラスを使用するため、このコードを貼り付けるユニットでのみ機能します。

uses
  ComCtrls, Windows, LCLType;

type
  TPageControl = class(ComCtrls.TPageControl)
  private
    procedure CNDrawItem(var Message: TWMDrawItem); message WM_DRAWITEM;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end; 

implementation

procedure TPageControl.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
  begin
    if not (csDesigning in ComponentState) then
      Style := Style or TCS_OWNERDRAWFIXED;
  end;
end;

procedure TPageControl.CNDrawItem(var Message: TWMDrawItem);
var
  BrushHandle: HBRUSH;
  BrushColor: COLORREF;
begin
  with Message.DrawItemStruct^ do
  begin
    case itemID of
      0: BrushColor := RGB(235, 24, 33);
      1: BrushColor := RGB(247, 200, 34);
      2: BrushColor := RGB(178, 229, 26);
    else
      BrushColor := ColorToRGB(clBtnFace);
    end;
    BrushHandle := CreateSolidBrush(BrushColor);
    FillRect(hDC, rcItem, BrushHandle);
    SetBkMode(hDC, TRANSPARENT);
    DrawTextEx(hDC, PChar(Page[itemID].Caption), -1, rcItem, DT_CENTER or 
      DT_VCENTER or DT_SINGLELINE, nil);
  end;
  Message.Result := 1;
end;

これがそれがどのように見えるか(醜い:)

enter image description here

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top