• 締切済み

プログラミング(?)が初めてなのでよく分からないのですが、

プログラミング(?)が初めてなのでよく分からないのですが、 Visual Stadio2005のVisual Basicで RED が &HFF000000+HScrollBar1.Value*&H10000 GREENが &HFF000000+HScrollBar2.Value*&H100 BLUE が &HFF000000+HScrollBar3.Value*&H1 PictureBox1.BackColor=Color.fromArgb()←この中に何を記述すれば スクロールバーを動かして この3色を混ぜ合わせることができるのでしょうか。 わかる方回答お願いいたします。

みんなの回答

回答No.2

Color.FromArgb の使い方をヘルプで調べれば 4つの方法を知ることができます。調べてみましたか? で、ColorFromArgb(Int32, Int32, Int32) というオーバーロードを使用すれば赤緑青の 3つの値を指定して色を決定させられる事がわかります。 3つの Int32 (つまり VB で言えば Integer) は 8ビット カラー値 (つまり 0~255) を指定するってこともヘルプに載っています。 ということは質問者さんが書いている変な計算式は不要なわけです。(もちろん質問文には HScrollBar の Maximum プロパティをどのように設定しているのかが書かれていないので、場合によってはその計算式でもいけるのかもしれませんが) 私としては 3つの ScrollBar の ValueChanged イベントを 1つのイベント プロシージャに指定し、その中で PictureBox1.BackColor = Color.FromArgb(HScrollBar1.Value, HScrollBar2.Value, HScrollBar3.Value) と書きます。 しかしここで質問文とは関係の無い、ScrollBar の仕様が問題になります。 .Net Framework のスクロールバーの Maximum プロパティのヘルプには以下のように書かれています。 ---- スクロール バーの値を、実行時にユーザーとのやり取りを通じて最大値にすることはできません。到達できる最大値は、 Maximum プロパティ値から LargeChange プロパティ値を引いて 1 を加えた値と同じです。最大値にはプログラムによってしか到達できません。 ---- つまり Maximum プロパティを 255 に設定しても、マウスで操作をしても 255 まで持っていけないのです。 値を指定するためのコントロールなら TrackBar コントロールをお勧めします。 ScrollBar と同じように扱う事ができ、なおかつマウス操作で Maximum の値まで持っていくことができます。 PictureBox1.BackColor = Color.FromArgb(TrackBar1.Value, TrackBar2.Value, TrackBar3.Value)

回答No.1

 HScrollBar1~3のレンジがわからないので正しいことはわかりませんが、各々0~255の値を持つとしておきましょう。  Color.FromArgbはARGB値からColor値を生成するメソッドで、パラメータによって何種類かあります。 (1)Color.FromArgb (Int32)  32bitのARGB値から生成 (2)Color.FromArgb (Int32, Color)  8bitのアルファ値と既存のColor値から生成 (3)Color.FromArgb (Int32, Int32, Int32)  各8bitのRGB値から生成 (4)Color.FromArgb (Int32, Int32, Int32, Int32)  各8bitのARGB値から生成 したがって、与えるべきパラメータは (1)を用いる場合は  &HFF000000+HScrollBar1.Value*&H10000+HScrollBar2.Value*&H100+HScrollBar3.Value*&H1 (3)を用いる場合は  HScrollBar1.Value, HScrollBar2.Value, HScrollBar3.Value (4)を用いる場合は  &HFF, HScrollBar1.Value, HScrollBar2.Value, HScrollBar3.Value どれも得られる結果は同じですが

arupaeria
質問者

お礼

3色混ぜることができました! ありがとうございました!!!

関連するQ&A

  • VB.netでRGB関数を使うには

    こんにちは。 表題の通り、VB.netでRGB関数を使って背景色を変えたいんですが、以下のように入力してもエラーになってしまいます。VB6.0ではこれで通用すると書いてあり大丈夫だと思ったんですが、どこをどう直せばいいんでしょうか? Dim red,green,blue As Integer (red,green,blueの値は、他のコントロールから取得) PictureBox1.backcolor = RGB(red,green,blue) よろしくお願いします。

  • vb初心者。急いでます!

    修論に取り組む院生です。 vb2010で簡単なソフトを作成中なのですが、以下のようなコードが何度も出てくるため、なんとか短くしたいんです。 型変換や色指定部分の工夫などが考えられると思うのですが、なかなか上手くいかず焦っています。 Dim a213,a214,c212,c213,c214 As Double If a213 < 1 Then ha13.BackColor = Color.FromArgb(160, 140, 255) ElseIf a213 < 20 Then ha13.BackColor = Color.FromArgb(120, 160, 255) ElseIf a213 < 40 Then ha13.BackColor = Color.FromArgb(100, 200, 150) ElseIf a213 < 60 Then ha13.BackColor = Color.FromArgb(255, 255, 70) ElseIf a213 < 80 Then ha13.BackColor = Color.FromArgb(255, 170, 0) Else ha13.BackColor = Color.FromArgb(255, 80, 100) End If If a214 < 1 Then ha14.BackColor = Color.FromArgb(160, 140, 255) ElseIf a214 < 20 Then ha13.BackColor = Color.FromArgb(120, 160, 255) ElseIf a214 < 40 Then ha14.BackColor = Color.FromArgb(100, 200, 150) ElseIf a214 < 60 Then ha14.BackColor = Color.FromArgb(255, 255, 70) ElseIf a214 < 80 Then ha14.BackColor = Color.FromArgb(255, 170, 0) Else ha14.BackColor = Color.FromArgb(255, 80, 100) End If If c212 < 1 Then hc12.BackColor = Color.FromArgb(160, 140, 255) ElseIf c212 < 20 Then hc12.BackColor = Color.FromArgb(120, 160, 255) ElseIf c212 < 40 Then hc12.BackColor = Color.FromArgb(100, 200, 150) ElseIf c212 < 60 Then hc12.BackColor = Color.FromArgb(255, 255, 70) ElseIf c212 < 80 Then hc12.BackColor = Color.FromArgb(255, 170, 0) Else hc12.BackColor = Color.FromArgb(255, 80, 100) End If If c213 < 1 Then hc13.BackColor = Color.FromArgb(160, 140, 255) ElseIf c213 < 20 Then hc13.BackColor = Color.FromArgb(120, 160, 255) ElseIf c213 < 40 Then hc13.BackColor = Color.FromArgb(100, 200, 150) ElseIf c213 < 60 Then hc13.BackColor = Color.FromArgb(255, 255, 70) ElseIf c213 < 80 Then hc13.BackColor = Color.FromArgb(255, 170, 0) Else hc13.BackColor = Color.FromArgb(255, 80, 100) End If If c214 < 1 Then hc14.BackColor = Color.FromArgb(160, 140, 255) ElseIf c214 < 20 Then hc14.BackColor = Color.FromArgb(120, 160, 255) ElseIf c214 < 40 Then hc14.BackColor = Color.FromArgb(100, 200, 150) ElseIf c214 < 60 Then hc14.BackColor = Color.FromArgb(255, 255, 70) ElseIf c214 < 80 Then hc14.BackColor = Color.FromArgb(255, 170, 0) Else hc14.BackColor = Color.FromArgb(255, 80, 100) End If 初めにhが付くものはpicturebox名です。 条件に応じてpictureboxの色を変えるコードで、色は全部で6色で固定です。 このあたりももっと工夫できる気がしてはいるのですが・・・ 時間がないので、とりあえずは期限までに面倒な手順でもソフトを完成させようと思っていますが、さすがに量が多いのでこちらも時間的に危ういです。。 いいアイディアをお持ちの方、よろしくお願いします!!!

  • VB2005 スクロールバー

    formにPanelと、そのPanelの中にPictureBox(大きさがPanelより大きい画像)を入れてあります。 スクロールバーが出ます。 Private Sub Button1_Click(~~ Panel1.HorizontalScroll.Value = Panel1.HorizontalScroll.Value + 100 End Sub としてボタンによってスクロールバーが移動するようにしたのですが。 実際には、1回目のクリックでPictureBoxの画像が移動、スクロールバー移動せず。 2回目のクリックでスクロールバーが移動、PictureBoxの画像は移動せず。 と、3回目4回目もこの繰り返しです。 どうしたら一回のクリックでPictureBoxの画像・スクロールバー共に移動できますか?

  • pictureBoxの絵保存について。

    pictureBoxにマウスを動かして絵を書いて、書いた絵を保存したいんですが、書いたデータは消えてしまいます。 なんでかわからないんで教えてください。例を載せときます。 cli::array<PointF>^ poi; Graphics^ grf; Pen^ pen; bool cap; private: System::Void pictureBox1_MouseMove(System::Object^sender, System::Windows::Forms::MouseEventArgs^ e) { if(!cap)return; PointF pt = PointF(e->X, e->Y); poi->SetValue(pt, 1); grf->DrawPolygon(pen, poi); poi->SetValue(pt, 0); // } private: System::Void pictureBox1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { if(checkBox1->Checked == true){ Color color = Color::FromArgb(hScrollBar1->Value ,hScrollBar2->Value,hScrollBar3->Value); if(e->Button == System::Windows::Forms::MouseButtons::Right) color = Color::Red; cap = true; grf= pictureBox1->CreateGraphics(); // // pen = gcnew Pen(color); poi = gcnew cli::array<PointF>(2); PointF pt = PointF(e->X, e->Y); poi->SetValue(pt, 0); poi->SetValue(pt, 1); grf->DrawPolygon(pen, poi); } } private: System::Void pictureBox1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { cap = false; }

  • C# List<>が表示されない

    C# List<>が表示されない Visual Studio にて作成 lblCalendar = new List<Label>(); for (int iAllCount = 0; iAllCount < 42; iAllCount++) { lblCalendar.Add(new Label()); } // ptbCalendar = new List<PictureBox>(); for (int iAllCount = 0; iAllCount < 42; iAllCount++) { ptbCalendar.Add(new PictureBox()); } // ptbCalendar[ptCalendar].BackColor = Color.FromArgb(100, 255, 255, 255); それぞれ42個生成しました。 それをカレンダーメソッドを作って画面に表示させました。 ピクチャーはColor.FromArgb(100, 255, 255, 255)で透過させました。 最初の画面(現在だと2月の画面が最初)は正常にカレンダーが表示されピクチャーは隠れています。 ですが private void button1_Click(object sender, EventArgs e) { month--; if (month == 0) { year = year - 1 month = 12; } CaledarControl(year, month);//カレンダー用のメソッド ptbControl(); //ピクチャー用のメソッド this.Refresh(); } これで次の月のページに飛ぶとカレンダーが全部消えてしまい、隠れていたピクチャーがすべてでてしまいます。 どうすればこのバグがなくなりますか?

  • モニター背面のプラグ差込口の使用用途

     モニターの背面にプラグ差込口のようなものがあるんですが、何に使うのかさっぱり解りません。  1、MAINTENACE PORT   2、BLUE  3、RED  4、GREEN  5、VSYNC  6、HSYNCE(H.VSYNC)  それぞれ何に使うものなんでしょうか?

  • リストビューのスクロールバーを非表示にしたい

    eMbedded Visual C++ 4.0 、MFC 、ダイアログベースでプログラミングをしています。 リストビューのスクロールバーを非表示にしてCListCtrl::Scrollを使い別のプログラムからスクロールさせたく、 「EnableScrollBarCtrl」や「ShowScrollBar」を使ってみたりしましたが非表示にできません。 リストビューのプロパティで「スクロールさせない」にチェックすると、CListCtrl::Scrollによるスクロールができなくなってしまいます。 非表示でCListCtrl::Scrollでスクロールできる方法をご存知でしたら教えてください。 なぜ別のプログラムでスクロールさせたいのかといいますと複数のリストビューを連動させてスクロールさせたいためです。 eMbedded Visual C++ 4.0はVC++6.0と似ているようですのでそのあたりに詳しい方アドバイスをください。

  • <select> をmultiple にしている場合で、指定したサイズ

    <select> をmultiple にしている場合で、指定したサイズより、optionが多い場合には、 スクロールバーが出ると思いますが、 下の方のoptionでスクロールしないと見れない項目を初期選択状態にしても、 最初にリストを表示したときには、スクロールが一番上にある状態で、 初期選択されているoptionが見えない状態になってしまいます。 multipleではないときは、初期選択状態のoptionのところまでスクロールバーが移動していて、 リストを表示したときには、スクロールバーを移動しなくても、初期選択のoptionを見ることができます。 【▼初期選択が見れるようにスクロールが移動している】 <HTML> <SELECT name="color" size=6 > <option value="red"> 赤 <option value="blue"> 青 <option value="yellow"> 黄 <option value="white" > 白 <option value="black"> 黒 <option value="purple"> 紫 <option value="orange"> オレンジ <option value="pink"> ピンク <option value="gold"> ゴールド <option value="silver" selected> シルバー </SELECT> </HTML> 【▼初期選択が見えない。スクロールが一番上にある】 <HTML> <SELECT name="color" size=6 multiple> <option value="red"> 赤 <option value="blue"> 青 <option value="yellow"> 黄 <option value="white" > 白 <option value="black"> 黒 <option value="purple"> 紫 <option value="orange"> オレンジ <option value="pink"> ピンク <option value="gold"> ゴールド <option value="silver" selected> シルバー </SELECT> </HTML>

  • WORD VBA

    マウスがある位置の色の情報を表示するソフトを利用して、 RGB情報を得ています。(例 RGB(204, 035, 035) 。 次のWORDマクロ動かし、RGB情報を手入力して欲しい結果を得ています。しかし、せっかくクリップボードに”RGB(204, 035, 035)”が入っていますので、それを自動的に以下のマクロに取り入れたいと考えております。どのようにすれば良いかアドバイスお願いできないでしょうか? なお, OSはWindows7を使用しています。Wordは2007です。 Sub ColorPaste() ' Dim Red As Integer Dim Green As Integer Dim Blue As Integer Red = InputBox("赤の数字を入れてください。") Green = InputBox("緑の数字を入れてください。") Blue = InputBox("青の数字を入れてください。") Selection.InlineShapes(1).Fill.BackColor = RGB(Red, Green, Blue) End Sub

  • formから送信する値について

    nameを同じくする複数のチェックボックスのチェック項目について valueを「+」や「,」でつなげて送信したいです 例えば <input type="checkbox" name="color" value="red" checked > <input type="checkbox" name="color" value="blue" checked> <input type="checkbox" name="color" value="green" checked > <input type="checkbox" name="option" value="A" checked > <input type="checkbox" name="option" value="B" checked > <input type="checkbox" name="option" value="C" checked > ならば、submitされるURL変数は ?color=red,blue,green&option=A+B+C になるようにしたいのです よろしくお願いします

    • ベストアンサー
    • HTML

専門家に質問してみよう