| ■No61785 (佐藤 正弘 さん) に返信 > vb5no
VB5 の色は OLE カラーとも呼ばれるもので、16進数値では &H00BBGGRR で表されます。 また、OLE カラーは &H80000000〜&H80000018 の範囲を取ることもあり、これはシステムカラーを意味します。
たとえば VB5 では、vbBlack は &H00000000 になりますし、vbDesktop は &H80000001 です。
> vb5で使ったQBColorの例えば、黒の場合は 0、
VB5 の vbBlack は数値としては &H0 で表されましたが、.NET の Color.Black は &HFF000000 になります。この場合の先頭 FF は Alpha 値であり、完全不透明を意味します。
VB5 の色は BGR 順の &H00BBGGRR (または &H800000xx )の形式でしたが、 .NET の ARGB 表現では RGB 順の &HAARRGGBB であることに注意が必要です。
> 青の場合は8388608、緑の場合は32768、シアンの場合は8921376、赤の場合は128という具合の文字列を想定 > していたものですから。
VB5 の QBColor 関数も VB2010 の QBColor メソッドも、戻り値はいずれも 「32bit 整数型」であって、「文字列型」では無いことに注意してください。
・VB5 の VBA.Information.QBColor は、As Long(あるいは As OLE_COLOR)。 ・VB2010 の Microsoft.VisualBasic.Information.QBColor は As Integer(あるいは As Int32)。
単純に Integer から String にするという場合においても、10進数だったり 16進数だったり、 先頭ゼロ埋めだったりと、いろいろな形式があります。端折らずにきちんと説明しましょう。
なお、QBColor メソッドの戻り値である整数を Color 構造体に変換する場合は、 先述した ColorTranslator.FromOle メソッドを使えば OK です。たとえば QBColor(0) は &H0(0)、QBColor(1) は &H800000(8388608)、QBColor(2) は &H8000(32768) ですが、
Dim c0 As Color = ColorTranslator.FromOle(QBColor(0)) Dim c1 As Color = ColorTranslator.FromOle(QBColor(1)) Dim c2 As Color = ColorTranslator.FromOle(QBColor(2))
とした場合、c0 は Black、c1 は Navy、c2 は Green に変換されます。 (QBColor 以外の色についても、同様に変換できます)
逆に、Navy な色を > 青の場合は8388608 に戻したい場合には、 Dim i As Integer = ColorTranslator.ToOle(c1) のようになります。あるいは、ARGB 値から BGR 値に変換するために Dim j As Integer = c1.B * &H10000 + c1.G * &H100 + c1.R のようにすることもできますし、16進数文字列がお望みなら Dim s As String = String.Format("{2:X2}{1:X2}{0:X2}", c1.R, c1.G, c1.B) と記述できます。 |