• ベストアンサー

ピクチャーボックスでの折線グラフ作成 VB6.0

お世話になります。 VB6.0にて、下記データを使って、ピクチャーボックスを使用して、コマンドボタンを1つクリック毎に、 「10個の数値」を使って、CurrentX CurrentY で「点」を描写、「点」同士をつないで、折線グラフ作成 また、連続でクリックする事により、アニメのように見える という事をしたいです。  ここで、下記「データ群」のように、1、2、3、とクリックで移動する毎に、数値の MAX MIN が変化していき、 [ Picture1.Height = 200 ] としてる為、縦方向にムダなく表示する為、「倍率」を求める事になります。 「1」の場合の「倍率」 = 200 ÷ (33 - 1) 「2」の場合の「倍率」 = 200 ÷ (49 - 1)    ですので、ボタンクリックの度に、 「10の数値」の MAX MIN で「倍率」を求める その「倍率」を使って折線グラフ作成  となります。  しかし、これが「10個の数値」ではなく、100~500、また各数値も 130.88 など3桁、小数点アリ になると、 「倍率」計算で時間が懸かり、アニメのように、とは難しいです。  画像であるなら、Picture1.AutoSize があり、縦方向にピッタリとなりますが。  さてここで質問ですが、私は「倍率」を求めてそれを元に折線グラフ作成としていますが、 もっとイイ方法があれば、是非御教授下さい。 お願いします。  なお「MSChart」は使わないという事で。 データ群 「1」~「6」 1 [ 01~10 23 ,01 ,02 ,13 ,19 ,29 ,33 ,15 ,17 ,21 ] MAX; 33 MIN; 01 2 [ 02~11 01 ,02 ,13 ,19 ,29 ,33 ,15 ,17 ,21 ,49 ] MAX; 49 MIN; 01 3 [ 03~12 02 ,13 ,19 ,29 ,33 ,15 ,17 ,21 ,49 ,17 ] MAX; 49 MIN; 02 4 [ 04~13 13 ,19 ,29 ,33 ,15 ,17 ,21 ,49 ,17 ,54 ] MAX; 54 MIN; 13 5 [ 05~14 19 ,29 ,33 ,15 ,17 ,21 ,49 ,17 ,54 ,27 ] MAX; 54 MIN; 15 6 [ 06~15 29 ,33 ,15 ,17 ,21 ,49 ,17 ,54 ,27 ,78 ] MAX; 78 MIN; 15 With Picture1 .Cls: .BackColor =白 .Width = 3000: .Height = 200 .ScaleWidth = .Width: .ScaleHeight = .Height .AutoRedraw = True .DrawWidth = 1 .DrawStyle = 0 .FillStyle = 0 .FillColor = 黒 End With   各数値 ----------------- 01 23 02 01 03 02 04 13 05 19 06 29 07 33 08 15 09 17 10 21 11 49 12 17 13 54 14 27 15 78

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ピクチャーボックスを2つ用意(ダブルバッファ)し、ボタンを押すごとにVisibleを交互にtrue/falseを切り替えます。非表示の方で作図し作図後に表示、表示中のものは非表示にすれば、もう少しスムーズになるかも知れません。 作図のコードが示されていないのでなんともいえないですが、表示中のピクチャーボックスに作図するよりもは高速になると思います。

ryu8472
質問者

お礼

今晩は。早速の御回答大変ありがとう御座います。 そうですね、Visibleを書き忘れました。 「ボタンクリック」 「Picture1.Visible=false」 「作図」 「Picture1.Visible=true」(完成) という順で作成しています。 そして「作図コード」ですが、さすがに量が。ゴメンナサイ。 ただ、2枚のピクチャーを使うというのは考えもしませんでした。 アドバイスたいへん有難う御座いました。

その他の回答 (1)

回答No.2

倍率計算よりもPictureBoxへの描画で時間がかかっているのだと思います。特にAutoRedrawによる描画は果てしなく遅い。。。 描画の高速化については#1 burroughs6さんも書いていますが、本格的にアニメーションレベルの描画をするのであればGDIでメモリデバイスコンテキストなどを使って描画するほうがよいと思います。 (もちろん、倍率にあわせた正確な座標計算は自力で) Cには及ばないとしてもかなり高速で絵がかけますよ。 大量のWinAPIと格闘することになりますが、参考意見として挙げておきます。

ryu8472
質問者

お礼

早速の御回答有難う御座います。 >>特にAutoRedrawによる描画は果てしなく遅い。。。 ウーン、そうなんですか。 >>GDIでメモリデバイスコンテキスト 確かに、VBでやってイイモノか疑問ですね。

関連するQ&A

  • エクセルでのグラフ作成について教えて下さい。

    下記のような、各条件5回測定した結果の、max、min、averageとA~Cの3条件をまとめた表があります。さらに、同様のデータが1週目~4週目の4つあるとします。 この表を、グラフ化しそのグラフから各週ごとにピボットテーブルのようなタブを切り替えて表示させるようにしたいのですが可能でしょうか? グラフは、縦軸は数値、横軸は各条件(A~C)にしたいです。 ※各条件5つのデータのmax,min,averageとの表にしていますが、5つの生データに対してでも構いません。 (1週目) --------------------------------------- 条件A   条件B  条件C max 500 600 550 min 350 400 600 average 450 500 570 ---------------------------------------- また、エクセルの表やグラフ作成のテクニックを詳しく勉強したいのですが、 お勧めの本がありましたら紹介して下さい。 宜しくお願いします。

  • エクセル2003による、2種の折線と1種の棒の複合グラフの作成方法

       A   B   C 1   10  20   15 2   5    8    6 3   5   12    9 A1-C1の数値及びA2-C2の数値は何れも「折線」。A3-C3の数値は「棒」。 エクセル2003にて、上記の2種の折線と棒の複合グラフを作成したいのでお知恵を拝借させて下さい。。 (種々調べたのですが、仲々適例が見つからないので、投稿しました。)

  • エクセルでデーター分布のグラフ作成

    ある生データをもとにデーター分布のグラフ(ヒストグラム?)を作成したいと思っています。 エクセルで作成しますので、操作方法などを分かりやすくご教授願います。 また、このグラフに規格値(Max&Min)も入れたいと思っています。これもエクセルで出来るのでしょうか?

  • ピクチャボックスから座標を読み込み 配列へ

    プログラミング初心者でわからないことがあるのでどなたかわかるかたいましたら教えてください<(_ _)> ピクチャボックスにグラフを書くプログラムを作っているのですが、 波状のグラフから その最大値、最小値をいくつかとり、それらについて近似直線を書こうとしています。 その際に、範囲指定をマウスで行うか、もしくはピクチャボックス上をクリックするとその座標を読み込み配列に入れたいのです。 例えばc(600)の配列に クリックしたら順次その座標データ(X座標だけでかまわないです)が入るようにするにはどうしたらいいでしょうか? 具体的には1回クリックしたらc(0)へ、2回目はc(1)へ・・・・ とこれを繰り返し操作できるようにしたいのです ぐぐってみましたが、座標を読み込みはありますが、それを活用するというものがなかなかなくて。 わかる方いましたらお願いします。

  • VB2010で、ピクチャーボックスに左下原点でグラフ描画したいのですが

    VB2010で、ピクチャーボックスに左下原点でグラフ描画したいのですが、 以下のコードで描画されません。 あれこれ調べて記述したコードですが、どこかが間違っているのでしょうか。 ピクチャーボックスのサイズはpx,pyともに約300です。 わかる方どうぞ教えてください。よろしくお願いします。 Dim myPen As New Pen(Color.Black, 1) Dim myFont As New Font("MS UI Gothic", 20) Dim myMatrix As New Matrix Dim g As Graphics = ChildForm(jj).PictureBox1.CreateGraphics Dim px, py As Long px = ChildForm(jj).PictureBox1.Width py = ChildForm(jj).PictureBox1.Height myMatrix.Translate(0, -py) '平行移動(ピクチャーボックスの高さ分,下へ平行移動) myMatrix.Scale(1, -1) '拡大縮小(y軸のみ正負の方向を逆にする) 'myMatrix.Rotate(180) '回転 g.Transform = myMatrix g.DrawLine(myPen, 0, 0, 200, 200) g.DrawString("TEST", myFont, Brushes.Black, 100, 100)

  • エクセルの複合グラフを作成したいです。

    エクセルの複合グラフを作成したいです。 数値が2~3のデータ、80~130のデータ、50~70のデータが棒グラフ、3000~7000のデータが折れ線グラフです。 棒グラフの方がデータ数値に幅があるので縦軸の数値をを図のように1・10・100を等間隔で配置する方法にしたいのですができますか?

  • EXCELグラフ作成

    EXCELグラフについて EXCELでグラフを作成すると通常左にデータ数値、下に時間数値が表示されますが、下の時間数値はそのままにして左のデータ数値を右に表示させることはできないでしょうか?データ期間が長いため左に表示されるとみずらくなってしまいます。誰かご存知の方教えてください。

  • エクセルのグラフ作成に関して質問です。

    エクセルのグラフ作成に関して質問です。 エクセルで添付した画像のグラフを作成しました。 要望として、用紙1枚にデータ(数値)とグラフを入れるようにしました。 その為、データを折り返しています。 グラフを作成する上でグラフ上にある折り返したデータでは、グラフを作成することが出来ませんでした。 別シートに折り返しをしていないデータを別途作成し、そのデータを元にグラフを作成しています。 希望は叶えられているのですがすっきり出来ません。 グラフ上にある折り返しをしているデータだけで、グラフを作成することか可能でしょうか、出来るのであれば教えて頂きたいと思います。 希望は、添付した画像にこだわりません。 ただしデータも見やすく、グラフも入れてもシート1枚で完了し、印刷した際用紙一枚に全て収まるようにしたい。

  • 棒グラフの作成について

    エクセル初心者です。 分かりづらかったらすみません。 データテーブル付きの棒グラフを作成しているのですが、 棒グラフを作成する際に入力する数値によってデータテーブルの 色を一部変更することは可能でしょうか? 例えば利用回数10回未満の人は黄色、5回未満の人は赤色など データテーブルの数値の背景色を変更したいです。 グラフ作成後はオートシェイプを利用して該当箇所に重ねたりすれば それらしくも見えるのですが、数値を入力した時に色を変えることが出来ないかなと。 関数やその他方法で下準備をした後、それを元にグラフを作成すると 出来そうな気もするのですが、どうなのでしょう。 分かる方いらっしゃいましたら、よろしくお願いします。

  • エクセルのグラフ作成 積み上げで合計の数値を

    エクセルのグラフで100%のほうでなくて数値のみの積み上げ棒グラフを作成しているのですが、例えばデータAとデータBを積上げてグラフを作成してAとBごとの数値はグラフ上に表示できるのですが、 合計の数値を表示することができません。 データとしてはAの数値とBの数値はでていますが、データの合計の数値データはだしておりませ。やはりデータの中に合計がなければ表示できないのでしょうか?

専門家に質問してみよう