Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
カラーコードの違いについて
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30184#CommentId82579
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
masaX
 (社会人)
投稿日時
2016/11/10 19:18:05
カラーコードについてなのですが
Colorから、10進数のカラーコードを取り出した場合、例えば赤の場合ですと負の数字で「-65536」と出る場合と正の数字で「16711680」と出る場合があるのですが、どんな場合に負になるのか?、あるいは正になるのかが分かりません。
下記のプログラムはあまり意味の無いプログラムですが、その状態を再現するために書いてみました。例えば、最初のカラーコードも、後のカラーコードもどちらも正の数にするか、あるいはどちらも負の数にする方法は在るのでしょうか?
**サンプルコード*****************************
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'カラーダイアログを表示
Color1.ShowDialog()
Dim col As Color = Color1.Color
'カラーコードを取り出す
Dim coltx10 As String = col.ToArgb
MsgBox("最初のカラーコード=" & coltx10)
Dim txHex As String = Hex(coltx10)
Dim myRGB(2) As String
'16進数の下6桁を取り出す
Dim colTx As String = Microsoft.VisualBasic.Right(txHex, 6)
'RGB に該当する値を取り出す。
myRGB(0) = Mid(colTx, 1, 2)
myRGB(1) = Mid(colTx, 3, 2)
myRGB(2) = Mid$(colTx, 5, 2)
'RGB 形式でバックカラーを表示
Dim tx As String = CStr(CByte("&H" & myRGB(0))) & "," & CStr(CByte("&H" & myRGB(1))) & "," & CStr(CByte("&H" & myRGB(2)))
'RGBのカラーコードから「R」「G」「B」それぞれを16進数で取り出し
Dim tt(2) As String
tt = Split(tx, ",")
Dim hx(2) As String
hx(0) = Hex(tt(0))
If Len(hx(0)) = 1 Then
hx(0) = "0" & hx(0)
End If
hx(1) = Hex(tt(1))
If Len(hx(1)) = 1 Then
hx(1) = "0" & hx(1)
End If
hx(2) = Hex(tt(2))
If Len(hx(2)) = 1 Then
hx(2) = "0" & hx(2)
End If
'16進数にする
Dim ans As String = hx(0) & hx(1) & hx(2)
Dim col2 As Color
'16進数のマークを付けて10進数に変換
Dim num16 As Long = CLng("&H" & colTx)
'変換した10進数をIntegerに変換してカラーに変換
col2 = Color.FromArgb(CInt(num16))
Text1.ForeColor = col2
'Text1のForeColorから10進数のカラーコードを取り出す
Dim coltx10_2 As String = Text1.ForeColor.ToArgb
MsgBox("後のカラーコード=" & coltx10_2)
Dim col_A As Color = Color.FromArgb(CInt(coltx10))
Dim col_B As Color = Color.FromArgb(CInt(coltx10_2))
LabelMae.ForeColor = col_A
LabelAto.ForeColor = col_B
'↑どちらのラベルも同じ色になる
End Sub
******************************************