DOBON.NET DOBON.NETプログラミング掲示板過去ログ

システムカラーを回転したい。

環境/言語:[VisualBasic2008]
分類:[その他]

'ARGBを使う方法はわかるんですけど。
'システムカラーで色を回転させたいんです。
'変数iを利用して回転させる例プログラムがあれば・・・
'ほかの僕チンレベルの初心者にも役にたつかも。です
'ので、よろしくお願いします。
Option Strict On
'VisualBasic2008
Public Class Form1
Private testButtons() As System.Windows.Forms.Button

Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

Me.testButtons = New System.Windows.Forms.Button(9) {}
Me.SuspendLayout()
Dim i, c, d As Integer
For i = 1 To Me.testButtons.Length - 1
Me.testButtons(i) = New System.Windows.Forms.Button
Me.testButtons(i).Name = i.ToString()
Me.testButtons(i).Text = i.ToString()
'______↓ココが質問のとこ↓よろしく☆_______
Me.testButtons(i).BackColor = Color.Aqua
'___________________________________________
Me.testButtons(i).Size = New Size(30, 30)
Me.testButtons(i).Location = New Point(c * 35, 10 + d)
c = c + 1
If c = 3 Then c = 0 : d = d + 35
AddHandler Me.testButtons(i).Click, _
AddressOf Me.testButtons_click
Next i
Me.Controls.AddRange(Me.testButtons)
Me.ResumeLayout(False)
End Sub
Private Sub testButtons_click(ByVal sender As Object, _
ByVal e As EventArgs)
Dim number As Integer
number = CInt(CType(sender, System.Windows.Forms.Button).Text)
MsgBox(number)
End Sub
End Class
■No23969に返信(レオ♪さんの記事)
> システムカラーを回転したい。

“色を回転させる”という言葉の意味がわかりません。どういう意味でしょう?

回転と聞いて、最初に下記を想像しましたが……どうもそういう意図ではなさそうですし。
http://techbank.jp/Community/blogs/hiro/archive/2008/11/12/3201.aspx



> 'ARGBを使う方法はわかるんですけど。
> 'システムカラーで色を回転させたいんです。
>
>   '______↓ココが質問のとこ↓よろしく☆_______
>   Me.testButtons(i).BackColor = Color.Aqua

「やりたい事」の断片は書かれていますが、肝心の「質問内容」が書かれていませんよ。

しかも、「システムカラー」という割には、SystemColors.〜 ではなく、
Color.〜 が使われていますし、何を質問されているのかが伝わってきません。


で。質問の意図がよく分かりませんが、提示されたコードから推測すると、
変数 i に応じて、ボタンの色を変えたいと言うことでしょうか。
しかも、RGB 関数や Color.FromArgb メソッド等を使用せずに?

だとしたら、「i = 0」〜「i = 9」の 10 状態に対して、具体的には
それぞれ何色を割り当てていきたいのでしょうか?


とりあえず、"RGB" や "ARGB" という名称を含まないメソッドのみをかき集めて、
 Me.testButtons(i).BackColor = ColorTranslator.FromOle(QBColor(i))
と書く事はできますが……あまり意味のあるコードでは無いですよね。



> 僕チンレベルの初心者

それって、どのくらいのレベルを指しているのでしょう?



> Private Sub testButtons_Click(ByVal sender As Object, _
>                               ByVal e As EventArgs)
>     Dim number As Integer
>     number = CInt(CType(sender, System.Windows.Forms.Button).Text)
>     MsgBox(number)
> End Sub

2008 をお使いという事なので、"Relaxed Delegate Conversion" にすると楽かも。
http://msdn.microsoft.com/ja-jp/library/bb531336.aspx

Private Sub testButtons_Click(ByVal sender As Button, ByVal e As EventArgs)
   Dim number As Integer = CInt(sender.Text)
   MsgBox(number)
End Sub
色を回転…虹のようなグラデーションの色を取得したいという事でしょうか?
HSI色空間で色相だけを変化させていくような感じですかね。
ColorはRGBですのでHSIとの変換が必要になりますが、
変換については以下が参考になるかと思います。
http://smdn.invisiblefulmoon.net/ikimasshoy/dotnettips/tips033.html
とりあえず彩度と明度をMAXにしておいて、
色相を0〜359の範囲で変えていけば
虹のようなグラデーションが出来ますよ。
■No23976に返信(Tramさんの記事)
> 色を回転…虹のようなグラデーションの色を取得したいという事でしょうか?
> HSI色空間で色相だけを変化させていくような感じですかね。
> ColorはRGBですのでHSIとの変換が必要になりますが、
> 変換については以下が参考になるかと思います。
> http://smdn.invisiblefulmoon.net/ikimasshoy/dotnettips/tips033.html
> とりあえず彩度と明度をMAXにしておいて、
> 色相を0〜359の範囲で変えていけば
> 虹のようなグラデーションが出来ますよ。
魔界さん>VBヘルプには「色を回転する」の項目はあります。
ARGBを使って虹色のように回転できます。
システムカラーは標準装備の色ですよ。
カラーNoみたいなもんがあれば、楽かと思ったんで。
自己解決は時間をかければできるけど。
プロのコードを見たかったんで質問したんですよ。
■No23977に返信(レオ♪さんの記事)
> ■No23976に返信(Tramさんの記事)
>>色を回転…虹のようなグラデーションの色を取得したいという事でしょうか?
>>HSI色空間で色相だけを変化させていくような感じですかね。
>>ColorはRGBですのでHSIとの変換が必要になりますが、
>>変換については以下が参考になるかと思います。
>>http://smdn.invisiblefulmoon.net/ikimasshoy/dotnettips/tips033.html
>>とりあえず彩度と明度をMAXにしておいて、
>>色相を0〜359の範囲で変えていけば
>>虹のようなグラデーションが出来ますよ。
> 魔界さん>VBヘルプには「色を回転する」の項目はあります。
> システムカラーは標準装備の色ですよ。
> カラーNoみたいなもんがあれば、楽かと思ったんで。
> 自己解決は時間をかければできるけど。
> プロのコードを見たかったんで質問したんですよ。
> 魔界さん>ボタンがクルクル回るのも面白いですね。
プロと初心者の差を実感しました^^
色の件は、システムカラー。
たとえば、Greenの定義色になにか、数字とかあるんでしょうか?
結構、難しいのかな
■No23977に返信(レオ♪さんの記事)
> VBヘルプには「色を回転する」の項目はあります。
それは下記の事でしょうか。
http://msdn.microsoft.com/ja-jp/library/9ya02xa6.aspx

違うのであれば、どこの事を指しているのか教えてください。

上記の事だとしたら、それを先の
>>> '______↓ココが質問のとこ↓よろしく☆_______
>>> Me.testButtons(i).BackColor = Color.Aqua
にどのように反映させたいのかによって、回答が変わってくるかと。


> システムカラーは標準装備の色ですよ。
それは、『Color.IsSystemColor プロパティが True を返す色』の事でしょうか。
違うとしたら、ここでいう「標準装備」とは、具体的にはどういう意味でしょうか?
(何に装備されている色のことですか?)


> カラーNoみたいなもんがあれば、楽かと思ったんで。
レオ♪さんが連想している「カラーNoみたいなもん」が、具体的には
どのような物であるのか解説されていないので回答に困りますが、
段階的な色変化を望むなら No23976 Tram さんの回答が参考になるかと。

あるいはカラーNo というのが、256色ビットマップでいうところの「カラーパレット」の意味であるならば、ColorPalette クラスが相当するかと思います。

QuickBasic Color の色番号であれば、QBColor メソッド(と ConsoleColor 列挙体)が相当します。

Color.Red や SystemColors.MenuHighlight などのように、定義済みの色の一覧という意図ならば、KnownColor を使う事ができるでしょう。



' ComboBox1, ComboBox2, TextBox1, TextBox2 を用意
Public Class Form1
 Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
  ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
  ComboBox2.DropDownStyle = ComboBoxStyle.DropDownList
  For c As ConsoleColor = 0 To 15
   ComboBox1.Items.Add(c)
  Next
  For c As KnownColor = 1 To 174
   ComboBox2.Items.Add(c)
  Next
  ComboBox1.SelectedIndex = 0
  ComboBox2.SelectedIndex = 0
 End Sub

 Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox1.SelectedIndexChanged
  If ComboBox1.SelectedIndex = -1 Then
   TextBox1.BackColor = Color.Empty
  Else
   Dim c As ConsoleColor = CType(ComboBox1.SelectedItem, ConsoleColor)
   TextBox1.BackColor = ColorTranslator.FromOle(QBColor(c))

  End If
 End Sub

 Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox2.SelectedIndexChanged
  If ComboBox2.SelectedIndex = -1 Then
   TextBox2.BackColor = Color.Empty
  Else
   Dim c As KnownColor = CType(ComboBox2.SelectedItem, ConsoleColor)
   If c <> KnownColor.Transparent Then
    TextBox2.BackColor = Color.FromKnownColor(c)
   End If
  End If
 End Sub
End Class



> プロのコードを見たかったんで質問したんですよ。
質問内容が曖昧になっていると、望む回答は得られないかも知れません。
それに、プロ以外の回答や、コードの無い回答が投稿される事もありますね。
レオ♪さんには以前、この掲示板ではタメ口が禁止であるということをお伝えしました。それ以前と比べると確かに言葉使いがましになり、気を使っていただいているのだなと感謝しております。しかし、残念ながら、やはりタメ口に近く、丁寧な言葉遣いには程遠いと判断せざるを得ません。

言葉遣い以前の問題として、レオ♪さんの書かれた文章を拝読しますと、失礼ながら、日本語が苦手なのかなと想像します。レオ♪さんは、日本語を母国語としていない人なのか、あるいは、だいぶ年齢の低い方なのでしょうか?日本語の苦手な方に丁寧な言葉遣いをしろといっても無茶かもしれませんが、精一杯丁寧な言葉で書いていただければ、その思いが伝わるのではないでしょうか。

もしこれ以上丁寧な言葉で文章を書けないということであれば、今後は「お気楽掲示板」の方へご投稿されることをお勧めします。(このスレッドは仕方がありませんので、このままの言葉遣いで投稿していただいても結構です。解決していないのに解決済みにして、スレッドを閉じるようなことはしないでください。)

お気楽掲示板
http://dobon.qp.land.to/bbs/cbbs.cgi

また、今回の投稿を拝見しますと、「書き込みのルールについて」をご理解いただいているのだろうかという点も疑問に感じました。「プロのコードを見たかったんで質問したんですよ。」とありますが、これは、「書き込みのルールについて」をご理解いただけているのであれば、違反であるということがお分かりいただけるでしょう。

もし「書き込みのルールについて」をご理解いただけない(読めない、あるいは、読んでも意味が分からない)のであれば、「お気楽掲示板」へご投稿ください。

前回、警告なしで厳しい処置をするとお伝えしましたが、レオ♪さんが日本語が苦手な方だったらお気の毒だと考え、今回再び注意させていただきました。これが本当に最後ですので、よろしくお願いいたします。
■No23983に返信(管理人さんの記事)
> レオ♪さんには以前、この掲示板ではタメ口が禁止であるということをお伝えしました。それ以前と比べると確かに言葉使いがましになり、気を使っていただいているのだなと感謝しております。しかし、残念ながら、やはりタメ口に近く、丁寧な言葉遣いには程遠いと判断せざるを得ません。
>
> 言葉遣い以前の問題として、レオ♪さんの書かれた文章を拝読しますと、失礼ながら、日本語が苦手なのかなと想像します。レオ♪さんは、日本語を母国語としていない人なのか、あるいは、だいぶ年齢の低い方なのでしょうか?日本語の苦手な方に丁寧な言葉遣いをしろといっても無茶かもしれませんが、精一杯丁寧な言葉で書いていただければ、その思いが伝わるのではないでしょうか。
>
管理さん>丁寧な書き込みは、僕ちんには無理ですね。^^
え〜っと、ARGBについては、熟知しています。と書きました。
システムカラーはStringですることにしました^^
knowkラーは難しんで。
では。
> もしこれ以上丁寧な言葉で文章を書けないということであれば、今後は「お気楽掲示板」の方へご投稿されることをお勧めします。(このスレッドは仕方がありませんので、このままの言葉遣いで投稿していただいても結構です。解決していないのに解決済みにして、スレッドを閉じるようなことはしないでください。)
>
> お気楽掲示板
> http://dobon.qp.land.to/bbs/cbbs.cgi
>
> また、今回の投稿を拝見しますと、「書き込みのルールについて」をご理解いただいているのだろうかという点も疑問に感じました。「プロのコードを見たかったんで質問したんですよ。」とありますが、これは、「書き込みのルールについて」をご理解いただけているのであれば、違反であるということがお分かりいただけるでしょう。
>
> もし「書き込みのルールについて」をご理解いただけない(読めない、あるいは、読んでも意味が分からない)のであれば、「お気楽掲示板」へご投稿ください。
>
> 前回、警告なしで厳しい処置をするとお伝えしましたが、レオ♪さんが日本語が苦手な方だったらお気の毒だと考え、今回再び注意させていただきました。これが本当に最後ですので、よろしくお願いいたします。
■No23984に返信(レオ♪さんの記事)
> ■No23983に返信(管理人さんの記事)
>>レオ♪さんには以前、この掲示板ではタメ口が禁止であるということをお伝えしました。それ以前と比べると確かに言葉使いがましになり、気を使っていただいているのだなと感謝しております。しかし、残念ながら、やはりタメ口に近く、丁寧な言葉遣いには程遠いと判断せざるを得ません。
>>
>>言葉遣い以前の問題として、レオ♪さんの書かれた文章を拝読しますと、失礼ながら、日本語が苦手なのかなと想像します。レオ♪さんは、日本語を母国語としていない人なのか、あるいは、だいぶ年齢の低い方なのでしょうか?日本語の苦手な方に丁寧な言葉遣いをしろといっても無茶かもしれませんが、精一杯丁寧な言葉で書いていただければ、その思いが伝わるのではないでしょうか。
>>
> 管理さん>丁寧な書き込みは、僕ちんには無理ですね。^^
> え〜っと、ARGBについては、熟知しています。と書きました。
> システムカラーはStringですることにしました^^
> knowkラーは難しんで。
> では。
>>もしこれ以上丁寧な言葉で文章を書けないということであれば、今後は「お気楽掲示板」の方へご投稿されることをお勧めします。(このスレッドは仕方がありませんので、このままの言葉遣いで投稿していただいても結構です。解決していないのに解決済みにして、スレッドを閉じるようなことはしないでください。)
>>
>>お気楽掲示板
>>http://dobon.qp.land.to/bbs/cbbs.cgi
>>
>>また、今回の投稿を拝見しますと、「書き込みのルールについて」をご理解いただいているのだろうかという点も疑問に感じました。「プロのコードを見たかったんで質問したんですよ。」とありますが、これは、「書き込みのルールについて」をご理解いただけているのであれば、違反であるということがお分かりいただけるでしょう。
>>
>>もし「書き込みのルールについて」をご理解いただけない(読めない、あるいは、読んでも意味が分からない)のであれば、「お気楽掲示板」へご投稿ください。
>>
>>前回、警告なしで厳しい処置をするとお伝えしましたが、レオ♪さんが日本語が苦手な方だったらお気の毒だと考え、今回再び注意させていただきました。これが本当に最後ですので、よろしくお願いいたします。
ちょっとカッコ悪いコードですけど
自己解決しました。
Option Strict On
'VisualBasic2008
Public Class Form1
Private testButtons() As System.Windows.Forms.Button
Private color_suu As Integer = 9
Private color_A(color_suu - 1) As Color

Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
color_A(0) = Color.Red : color_A(1) = Color.Beige : color_A(2) = Color.Aqua
color_A(3) = Color.DarkGoldenrod : color_A(4) = Color.Blue : color_A(5) = Color.Brown
color_A(6) = Color.Green : color_A(7) = Color.Pink : color_A(8) = Color.Yellow
Me.testButtons = New System.Windows.Forms.Button(9) {}
Me.SuspendLayout()
Dim i, c, d As Integer
For i = 1 To Me.testButtons.Length - 1
Me.testButtons(i) = New System.Windows.Forms.Button
Me.testButtons(i).Name = i.ToString()
Me.testButtons(i).Text = i.ToString()
'______↓ココが質問のとこ↓よろしく☆_______
Me.testButtons(i).BackColor = color_A(i - 1)
'___________________________________________
Me.testButtons(i).Size = New Size(30, 30)
Me.testButtons(i).Location = New Point(c * 35, 10 + d)
c = c + 1
If c = 3 Then c = 0 : d = d + 35
AddHandler Me.testButtons(i).Click, _
AddressOf Me.testButtons_click
Next i
Me.Controls.AddRange(Me.testButtons)
Me.ResumeLayout(False)
End Sub
Private Sub testButtons_click(ByVal sender As Object, _
ByVal e As EventArgs)
Dim number As Integer
number = CInt(CType(sender, System.Windows.Forms.Button).Text)
MsgBox(number)
End Sub
End Class

DOBON.NET | プログラミング道 | プログラミング掲示板