2023/07/02

リッチテキスト:#6)文字色の設定

前回は、NotesRichTextStyle クラスを紹介し、文字の装飾(太字とアンダーライン)の例を紹介しました。今回は、文字に色を付ける方法です。装飾というと色も重要ですよね。

NotesRichTextStyle クラスのプロパティを見ると、NotesColor というプロパティが存在ます。今回はこのプロパティに関することをまとめたいと思います。

NotesColor (NotesRichTextStyle - LotusScript®)

ヘルプを確認するとこのプロパティは、0 ~ 240 の数値で指定するとあります。少ないですね...。そして、今時標準の R G B では指定できないようです。

こんな背景から、このクラスの利用は少し癖があるので順番に確認しましょう。


標準の色の確認

まずは 0 ~ 240 にどのような色が定義されているか確認しましょう。

Set nrti = nd.CreateRichTextItem("Body")
Set nrts = ns.CreateRichTextStyle()

For i = 0 To 240
   nrts.NotesColor = i
   Call nrti.AppendStyle(nrts)
   Call nrti.Appendtext(Right("00" & CStr(i), 3) & " ")
Next

ループをわましながら、色番号ごとにその番号をその色でテキストに追加しています。結果は以下のようになります。

この色の並び、見たことがありますよね。そう、色選択の画面の順ですね。


24 ビットカラーの指定

最近のアプリケーションでは、R G B のそれぞれを 8 ビット(256 段階)で指定する、24 ビットカラーが一般的です。この 24 ビットで色を指定するには、NotesColorObject クラスの SetRGB メソッドを使用します。

SetRGB (NotesColorObject - LotusScript®)

ただし、ヘルプには『SetRGB sets NotesColor, in addition to the return value, to the closest Domino® color.』とあります。そうなんです。このメソッドは、色を定義するのではなく、一番近い NotesColor 番号を取得するだけなんです。

試しに、先ほどのコードを修正して、次のようなコードを書いてみました。赤と緑の要素を 0 ~ 255 まで変化させ、順に出力します。色が青から白に少しづつ変化する算段です。

Set nrti = nd.CreateRichTextItem("Body")
Set nrts = ns.CreateRichTextStyle()
Set nco = ns.CreateColorObject()

For j = 0 To 255
   Call nco.Setrgb(j, j, 255)
   i = nco.NotesColor
   nrts.NotesColor = i
   Call nrti.AppendStyle(nrts)
   Call nrti.AppendText(Right("00" & CStr(i), 3) & " ")
Next

結果は以下のように、しばらく同じ色番号が続いたのち、突然変化します。そして、そのタイミングで文字の色が変わっています。

24 ビットカラーになれた方は、NotesColorObject クラスの SetRGB メソッドを使うとよいとは思いますが、色は完全に再現されないことをご注意ください。


どうでもいい話...

例によって蛇足(?)です。

NotesColor プロパティのヘルプには、Release 4.6 で新規作成されたとあります。1997 年、Windows 95 の時代ですね。この時期のパソコンと言えば、ハイエンド機では、フルカラーを使用できましたが、ビジネス機やエントリーモデルでは 256 色(8 ビットカラー)が一般的だったように記憶しています。

この時代以前の PC では、色数が少なかったこともあり、色を番号で管理するのが一般的でした。そして、その色番号に何色を割り当てるか定義でき、それをパレットと呼んでいました。この記事を書いていて NotesColor の 0 は”白”だと知りました。経験のある PC や言語はみな”黒”だったので驚きました(笑)

NotesColor という考え方はこのあたりが背景であると想像できますね。

Notes は 30 年前のアプリであっても、最新バージョンで動く素晴らしいシステムだと思っています。ただ、今回のように世代ギャップがある部分を大幅に改善できないという問題もありますね。

例えば、NotesColor を Long 型にして、24ビットカラーを直接指定できようにしても、NotesColor との整合性の維持をどうするのか、型の不一致が発生するなど問題が想定できます。

過去の大事にしつつ新しいことも対応する。きっと大変なんだろうなぁと、これをきっかけに思いました。

前回 リッチテキストの基本操作 次回

0 件のコメント:

コメントを投稿