- ベストアンサー
ピクチャーボックスでの折線グラフ作成 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
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ピクチャーボックスを2つ用意(ダブルバッファ)し、ボタンを押すごとにVisibleを交互にtrue/falseを切り替えます。非表示の方で作図し作図後に表示、表示中のものは非表示にすれば、もう少しスムーズになるかも知れません。 作図のコードが示されていないのでなんともいえないですが、表示中のピクチャーボックスに作図するよりもは高速になると思います。
その他の回答 (1)
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
倍率計算よりもPictureBoxへの描画で時間がかかっているのだと思います。特にAutoRedrawによる描画は果てしなく遅い。。。 描画の高速化については#1 burroughs6さんも書いていますが、本格的にアニメーションレベルの描画をするのであればGDIでメモリデバイスコンテキストなどを使って描画するほうがよいと思います。 (もちろん、倍率にあわせた正確な座標計算は自力で) Cには及ばないとしてもかなり高速で絵がかけますよ。 大量のWinAPIと格闘することになりますが、参考意見として挙げておきます。
お礼
早速の御回答有難う御座います。 >>特にAutoRedrawによる描画は果てしなく遅い。。。 ウーン、そうなんですか。 >>GDIでメモリデバイスコンテキスト 確かに、VBでやってイイモノか疑問ですね。
お礼
今晩は。早速の御回答大変ありがとう御座います。 そうですね、Visibleを書き忘れました。 「ボタンクリック」 「Picture1.Visible=false」 「作図」 「Picture1.Visible=true」(完成) という順で作成しています。 そして「作図コード」ですが、さすがに量が。ゴメンナサイ。 ただ、2枚のピクチャーを使うというのは考えもしませんでした。 アドバイスたいへん有難う御座いました。