Microsoft Access 掲示板

帳票フォーム上 ラベルの背景色を変えて表示したい

6 コメント
views
4 フォロー

お世話になります。

主キー、カラーコード(10進数)を格納したテーブルがあり、それを表示するフォームがあります。
各レコードにそれぞれの列を表示するテキストボックスを置き、その右端に、カラーコードが表す【色】を表示させたいと考えています。

VBAでの条件付き書式なども試してみましたが、イメージしたとおりの結果が得られず、半ば諦めております。
妙案をお持ちの方がいらっしゃれば、ご教授頂けないでしょうか。
よろしくお願いします。

画像1

よし
作成: 2020/11/20 (金) 13:49:43
最終更新: 2020/11/20 (金) 13:50:25
通報 ...
1
hiroton 2020/11/20 (金) 15:02:55 06b46@f966d

リッチテキスト形式を使うとテキストボックス内の文字に装飾を加えることができます
テキストボックスを背面に設置し、空白スペースで埋め尽くして、その文字の背景色としてカラーコードを指定すればイメージしたものができるかもしれません

背面に設置するテキストボックスの設定

コントロールソース|='<div><font style="BACKGROUND-COLOR:#' & Hex([カラーコード]) & '">     </font></div>'
文字書式      |リッチ テキスト形式
背景スタイル    |透明
境界線スタイル   |透明

表示したいラベルのサイズに合わせてフォントサイズや空白スペースの数を調整してみてください

3
よし 2021/01/13 (水) 00:02:09 d9508@7e9fa

年末年始の繁忙期のため、お礼が遅くなり申し訳ございません。

以前投稿されていた、詳細_paintイベントを使う方法でうまいこと動いてくれました。
お教え頂いた方に感謝申し上げます。

カラーコードのテキストボックスを txt_ColorCode、
色を表示したいラベルを Lbl_info とします。

Private Sub 詳細_Paint()
    If Nz(Trim(txt_ColorCode), vbNullString) <> vbNullString Then
        Me.Lbl_info.BackStyle = 1
        Me.Lbl_info.BackColor = txt_ColorCode
    Else
        Me.Lbl_info.BackStyle = 0
    End If
End Sub

これで色を表示させることが出来ました。ありがとうございました。

4
よし 2021/01/13 (水) 00:58:22 d9508@7e9fa

hiroton様の投稿内容でも試してみましたが、うまく動作しませんでした。
HTMLでのカラーコードはRGBの順ですが、VBAでの10進数のカラーコードをhex関数で16進数に変換すると、
何となくですがBGRの順で出てきます。
VBAは内部的に色をBGRの順で計算しているのでしょうか。
考えていると頭が混乱してきました。

参考画像を貼っておきます。アドバイスを頂いたお二方、本当にありがとうございました。

5
よし 2021/01/13 (水) 01:00:12 d9508@7e9fa

画像1

6
hiroton 2021/01/13 (水) 10:31:20 修正 6cdb2@f966d

修正版

コントロールソース|='<font style="BACKGROUND-COLOR:#' & Right("00" & Hex([カラーコード]),2) & Mid(Hex([カラーコード]+16777216),4,2) & Mid(Hex([カラーコード]+16777216),2,2) & '">     </font>'

RGB並び順を修正
HTMLのカラーコード指定は6桁(3桁でもいいけど)必要なので10進数→16進数変換で特定の場合に上位桁がなくなってしまうのを修正
divタグは不要っぽかったので削除


RGBは確かに逆順にしないとダメでした。いい感じの技術資料が見つけられなかったんですが、実装次第で異なる場合もあるようですRGBのHex並びが逆(AddinBox/VBAユーザーの為のOpenOffice.org 備忘録さん)
これはもう、VBAではそう、としか言いようがなさそうです

カラーコード表記は例えば「#FF0000」で、最初の#を除いて先頭2文字が1つ目のグループで「R」の量を表す、3~4文字目が・・・
となっていて、「桁」自体は存在しません。これを数値にする場合、「桁」を与える必要があります

数値で同様のことを考えると、1つ目のグループは一の位で2つ目のグループは十の位で・・・と考えることができます。そして、これを文字であらわすときは一番大きいグループから表記します。

一の位が3
十の位が2
百の位が1
ならば3×1+2×10+1×100 → 123

これをRGBに当てはめ、
1つ目のグループ(R)がFF
2つ目のグループ(G)が00
3つ目のグループ(B)が00
ならば、FF×1+00×256+00×256×256 → &H0000FF

このように考えると
カラーコード表示のRGB(255,0,0)→#FF0000
16進数表示のRGB(255,0,0)→&H0000FF

のように、文字の並び順だけ見れば逆になるという表現方法も間違いとは言えないことがわかると思います