- ベストアンサー
VB6での描画線種について教えて下さい。
VB6での描画線種について教えて下さい。 VBで10数本の折線グラフを描こうとしています。 それぞれの線を区別するために、実践・点線に加え、折れ曲がり点に 丸・三角・四角・×などを描き、さらに白抜きや塗りつぶしを行いたいの ですが、やり方がわからずに困っています。 どなたかご存知の方、教えて下さるよう御願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 丸・三角・四角・×など 簡単なのは●○▲△■□×などの記号文字を描画する方法です。 ’例)PictureBoxの座標(100, 50)に●を描画 Picture1.CurrentX = 100 Picture1.CurrentY = 50 Picture1.Print "●" 面倒なのは描画処理を組み合わせて自分で書く方法です。 グラフをどのように書いているのか(PictureBoxに直書きなのか、Bitmap+GDIなのか)分からないのでひとまずここまで。
その他の回答 (1)
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
> APIを使うなどしてこれらを簡単に描く方法 APIには多角形を描画する「Polygon」という関数があるので、これを使えばさまざまな図形の描画と塗りつぶしを行うことが出来ます。 [ Form1.vb ] Private Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long Private Type POINTAPI x As Long y As Long End Type Private Sub Picture1_Paint() Picture1.Cls '*** ひし形を描画 *** Dim ptDia(3) As POINTAPI ptDia(0).x = 60: ptDia(0).y = 20 ptDia(1).x = 80: ptDia(1).y = 40 ptDia(2).x = 60: ptDia(2).y = 60 ptDia(3).x = 40: ptDia(3).y = 40 Picture1.FillColor = &HFF80C0 Picture1.FillStyle = vbSolid Picture1.ForeColor = &HA04080 Picture1.DrawWidth = 3 Call Polygon(Picture1.hdc, ptDia(0), 4) '*** ここまで *** '*** 三角形を描画 *** Dim ptTri(2) As POINTAPI ptTri(0).x = 150: ptTri(0).y = 20 ptTri(1).x = 170: ptTri(1).y = 50 ptTri(2).x = 130: ptTri(2).y = 50 Picture1.FillColor = &HC080FF Picture1.FillStyle = vbDiagonalCross Picture1.ForeColor = &H8040A0 Picture1.DrawWidth = 2 Call Polygon(Picture1.hdc, ptTri(0), 3) '*** ここまで *** End Sub ただし、APIで直接PictureBoxに描画するには、AutoRedrawをFalseにしなければなりません。つまり、ウィンドウが他のウィンドウに隠れたり、スクリーン外から戻ってきた際には、Paintイベント内で再描画する必要があります。AutoRedrawがTrueであればこの処理を自動化できるのですが、APIによる描画が出来なくなるという制限があります。 毎回Paintイベントで1から順番に描画すれば問題ありませんが、描画に時間がかかると画面がちらつく原因になります。これを避けるためにはメモリデバイスコンテキストを使ってダブルバッファ処理を施す必要があり、大量のAPI関数と格闘することになります。
お礼
重ねてのご回答ありがとうございました。 なるべく早く試して、結果をお知らせします。
お礼
早速のご回答ありがとうございました。 参考にさせていただきます。 ただ、本数が多くデータ数も多いので、回答文にありましたように、 描画処理を組み合わせて自分で描く必要があります。 また、描画方法はPictureBoxに直書きです。 VB6にある「Pset、Circle、Line」を使って、点、円、四角を 描くところまでは行っているのですが、三角やひし形などを 描くのが面倒です。 APIを使うなどしてこれらを簡単に描く方法を御存知でしたら お教え下さい。