web-dev-qa-db-ja.com

「タブコントロール」の色を変更する

タブコントロール背景色を変更するにはどうすればよいですか。フォームの色を変更しましたが、タブは同じままです。

ありがとう。

16
lamcro

タブコントロールの戻るスタイルを確認します。正常な場合。背景が灰色になります(通常のWindows設定の場合)。透明の場合は、フォームの背景色を継承します。

完全に異なる色にしたい場合は、フォームに長方形を追加し(背景を不透明にし)、タブ内で最大化してから、長方形の色を設定する必要があります。

タブ自体については、色を個別に設定する方法がわかりません。

7
BIBD

私の知る限り、Access 2000/2002/2003では、タブの背景色も前景色も変更することはできません。

したがって、全体タブコントロールの外観を変更したい場合は、運が悪いと思います。

ただし、実際の目標がタブコントロールのページのある種の色分けを実装することである場合、この問題が発生したときに行ったことは次のとおりです。

  • タブコントロールの各ページに色付きの長方形を配置して、ページごとに異なる背景色を提供しました。

  • タブ自体も。幸い、画像を含めることができるので、簡単な画像ファイルを作成しました。各画像ファイルは小さな色付きの箇条書き(正方形、長方形、円など、見栄えの良いもの)で、タブのテキストラベルの横に配置しました。

したがって、コントロール全体はまだ灰色(またはWindowsの現在のテーマの現在の「ボタンの色」)のままでしたが、各タブと各ページは、必要な色に関連付けられました。

6
Yarik

Access 2010では、タブコントロールオブジェクトの[Pressed Color]プロパティの色を設定すると、タブページの背景色を設定できます。

Access 2013では、タブコントロールの[戻る色]プロパティの色([押された色]と同じ色)も設定する必要がありました。

4
Duane Rochelle

CodeSlaveは非常に良い提案をしました:

完全に異なる色にしたい場合は、フォームに長方形を追加し(背景を不透明にし)、タブ内で最大化してから、長方形の色を設定する必要があります。

タブが許可するよりもタブの寸法に関連して大きい背景が必要な場合(超えられないハードボーダーがあります)、別の解決策があります(多少複雑ですが、通常はこれです)デフォルト環境が機能するように設計された方法で機能しないように外観を調整しているときに発生します)。

タブコントロールを透明に設定します。タブの後ろに、不透明なボックスを配置します。次に、タブのOnChangeイベントで、タブの後ろにあるボックスの背景色を変更します。

ちょっと面倒ですが、タブ全体と同じ大きさの背景を作成できます(または、同じカラーフィールド内のタブからアイテムが必要な場合はさらに大きくなります)。

2
David-W-Fenton

タブの右側にある小さな長方形を透明に設定するサブルーチンを開発しました。 Access2003および2007でテストしました。

Private Const GWL_EXSTYLE = -20
Private Const WS_EX_TRANSPARENT = &H20&

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Public Sub PatchTabControl(ByVal f As Form)
   Dim hwnd As Long
   hwnd = FindWindowEx(f.hwnd, 0, "OFormSub", vbNullString)
   If hwnd = 0 Then Exit Sub
   hwnd = FindWindowEx(f.hwnd, hwnd, "OFormSub", vbNullString)
   If hwnd = 0 Then Exit Sub
   hwnd = FindWindowEx(hwnd, 0, "OTabControl", vbNullString)
   If hwnd = 0 Then Exit Sub
   SetWindowLong hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_TRANSPARENT
   End Sub

小さなコードでこれをモックアップできます。タブコントロールのStyleプロパティをNoneに設定し、クリックイベントを持つ他のコントロールを使用して、独自のカラフルなタブを作成します(画像を作成することもできます)。コードは、タブを変更することも、サブフォームの内容を変更することもできます。

タブの変更:

 Me.NameOfTabControlPage.SetFocus

サブフォームコントロールの内容を変更します。

 Me.NameOfSubformControl.SourceObject = "NameOfSuitableForm"
1
Fionnuala

Access2010に対するDuaneRochelleの有用な回答の拡張:

問題は、Microsoftがタブの色を制御するプロパティに付けた名前が直感に反していることだと思われます。

基本的に、タブの色はPressed Colorプロパティを使用して制御できます。個々のタブのプロパティではなく、タブオブジェクト全体のプロパティでそれを探します。

つまり、Pressed Colorを-たとえば-ある種の青(たとえば、#8EA3BD)に設定すると、すべてのタブが青になります。 「押された」とは、実際には「タブ領域が他のタブの上にある」ことを意味するため、これはタブ領域の色付けとほぼ同じです。

(私個人としては、「押された色」は誤解を招く名前です。タブオブジェクト内のすべてのタブのうち、タブを「押した」人がいなくても、デフォルトで1つが表示されます。より適切な名前は「表示されているタブの背景色」です。 。)

ペイントしたいタブオブジェクトの他の要素の場合:

タブヘッドのテキスト(クリックしてタブを選択する場所)の色については、Pressed Fore Colorを使用しますプロパティ。

表示されていないタブ(または「現在開いているタブの後ろに隠れている」)の背景色には、Back Colorプロパティ。

非表示のタブの先頭にあるテキストの場合は、Fore Colorプロパティを使用します。

したがって、次の名前の方が直感的です。

  • 表示されているタブの背景色(現在は「押された色」)

  • 表示されているタブのテキストの色(現在は「PressedForeColor」)

  • 非表示のタブの背景色(現在は「背景色」)

  • 非表示のタブのテキストの色(現在は「フォアカラー」)