グラフィックス (Visual Basic 6.0 ユーザー向け)

更新 : 2007 年 11 月

Visual Basic 6.0 では、Form コントロールまたは PictureBox コントロールに描画する場合は、グラフィックスの各種メソッドおよびプロパティを使用します。Visual Basic 6.0 のグラフィックスは、Windows のグラフィック デバイス インターフェイス (GDI) の API に基づいてます。

Visual Basic 2008 のグラフィックスは、GDI+ API にカプセル化された System.Drawing 名前空間によって提供されます。GDI+ は Visual Basic 6.0 のグラフィックス機能に基づいて拡張されていますが、メソッドに互換性はありません。

概念の違い

Visual Basic 6.0 では、グラフィックス メソッドは、Form オブジェクトおよび PictureBox コントロールだけに適用されます。

Visual Basic 2008 では、グラフィックス メソッドは、フォームに加えて、PictureBoxPanelGroupBox など、Paint イベントをサポートする任意のコントロールに適用されます。また、グラフィックス メソッドは、ListViewTreeViewButton コントロールなど、OwnerDraw プロパティをサポートする任意のコントロールにも適用されます。

AutoRedraw プロパティ

Visual Basic 6.0 のグラフィックス メソッドは、任意のイベント プロシージャから呼び出すことができます。グラフィックス メソッドが、Paint 以外のイベントから呼び出された場合は、グラフィックスを永続化するために AutoRedraw プロパティが使用されます。

Visual Basic 2008 では、グラフィックス メソッドは、Paint イベント プロシージャからのみ呼び出されます。ただし、オーナー描画コントロールの場合、さまざまな Draw イベント プロシージャ (DrawItemDrawSubItem など) からも呼び出されます。Paint イベントおよび Draw イベントで自動的にグラフィックスが永続化されるので、AutoRedraw プロパティは不要になり、サポートされなくなりました。

ClipControls プロパティ

Visual Basic 6.0 では、フォームまたはコントロールの描画を制御するために、ClipControls プロパティを使用します。このプロパティを True に設定すると、それまで見えていなかった領域のみが再描画され、理論上はパフォーマンスが向上します。

ClipControls プロパティに相当するものは、Visual Basic 2008 にはありません。GDI+ によりパフォーマンスが向上し、最新のビデオ アダプタが使用できるようになったため、このプロパティの必要性はなくなりました。

DrawMode プロパティ

Visual Basic 6.0 では、パターンを別のパターンの上に描画するときに DrawMode プロパティによってグラフィックス オブジェクトの色が制御されます。このプロパティが効力を持つのは、モノクロ ディスプレイまたは解像度の低い (256 色以下) ディスプレイだけです。

DrawMode プロパティに相当するものは、Visual Basic 2008 にありません。現在のディスプレイでは不要になりました。

DrawStyle プロパティ

Visual Basic 6.0 では、Line メソッドを使用して描画する線の外観を制御するために、DrawStyle プロパティを使用します。DrawWidth プロパティが 1 より大きい値に設定されている場合、DrawStyle プロパティは無効になり、線は常に実線になります。

Visual Basic 2008 では、DrawLine のいずれかのメソッドで使用される System.Drawing.Pen クラスの DashStyle プロパティを設定することで、線の外観を制御します。線の幅は、このプロパティに影響されません。

DrawWidth プロパティ

Visual Basic 6.0 では、DrawWidth プロパティで線のピクセル幅が決定されます。通常、DrawWidth プロパティは、グラフィックス メソッドを実行する前に設定します。

Visual Basic 2008 では、System.Drawing.Pen コントロールの Pen.Width プロパティで線の幅が決定されます。Pen の作成時に Width プロパティをパラメータとして設定するか、Pen の作成後に Pen.Width を設定できます。Pen.Width プロパティを指定しない場合、既定は 1 ピクセルです。

Image プロパティ

Visual Basic 6.0 では、フォームまたは PictureBox コントロールの Image プロパティは、ビットマップのハンドルを返します。このハンドルは、Picture プロパティに割り当てたり、Windows API の呼び出し時に値として渡したりできます。

Visual Basic 2008 では、ビットマップにハンドルはなくなりました。ビットマップそのものを Bitmap 型のオブジェクトとして渡します。Bitmap コントロールは、PictureBox コントロールの Image プロパティに割り当てることができますが、Windows API の呼び出し時に渡すことはできません。

Line メソッド

Visual Basic 6.0 では、Line メソッドは、左上と下部の座標およびオプションの引数 B を指定して、四角形を描画するために使用します。FillColor プロパティは純色で四角形を塗りつぶすのに使用し、FillStyle プロパティはクロスハッチ パターンで四角形を塗りつぶすのに使用します。

Visual Basic 2008 では、DrawRectangles メソッドは四角形の境界線を描画するのに使用し、FillRectangle メソッドは四角形を塗りつぶすのに使用します。FillRectangle は、Brush オブジェクトをパラメータとして受け取ります。 FillColor プロパティは SolidBrush に置き換えられ、FillStyle プロパティは HatchBrush クラスのメンバに置き換えられました。

Point メソッド

Visual Basic 6.0 では、フォームまたは PictureBox コントロールの Point メソッドは、指定の場所にあるピクセルのカラー値を取得するのに使用します。Point メソッドは、画像のないフォームまたはコントロールでも使用できますが、ほとんどの場合は、Picture プロパティに割り当てられたビットマップのカラーを取得するために使用されます。

Visual Basic 2008 では、Point メソッドは使用されなくなりました。ビットマップからカラー値を取得するには、M:System.Drawing.Bitmap.GetPixel(System.Int32,System.Int32) メソッドを使用します。フォームまたはコントロールに画像がない場合は、BackColor プロパティを使用できます。

Visual Basic 6.0 では、Print メソッドは、フォームまたは PictureBox コントロールにテキストを表示するのに使用します。テキストの表示に使うフォントは、フォームまたはコントロールの Font プロパティで決定され、色は ForeColor プロパティで決定されます。Print メソッドには、テキストの配置を決めたり、テキストを縦方向に表示したりする機能はありません。

Visual Basic 2008 では、テキストの表示に DrawString メソッドを使用します。フォントは Font オブジェクトによって決定され、色は Brush オブジェクトによって決定されます。どちらのオブジェクトも、パラメータとして DrawString メソッドに渡します。DrawString メソッドには、X および Y というパラメータもあり、これらを使ってテキストの開始位置を指定できます。また、オプションの Format パラメータに StringFormat オブジェクトを渡して、テキストを縦方向に表示することもできます。

PSet メソッド

Visual Basic 6.0 では、PSet メソッドは、フォーム上または PictureBox コントロール上のピクセルの色を変更するのに使用します。DrawWidth プロパティが 1 より大きい値に設定されている場合は、PSet メソッドは塗りつぶされた円を描画します。省略された ForeColor を使用する場合は、省略可能なパラメータを使って色を指定します。

Visual Basic 2008 には、PSet メソッドに直接対応するものはありません。フォーム上または PictureBox コントロール上の 1 ピクセルの色を変更するには、DrawEllipse メソッドを使って高さと幅が 1 ピクセルの円を描画します。DrawWidth が 1 より大きい場合に PSet と同等の機能を実現するには、FillEllipse メソッドを使用します。

グラフィックスを扱うコードの変更

次のコード例は、Visual Basic 6.0 と Visual Basic 2008 のコーディング テクニックの違いを示しています。

単純な線の描画

次のコードは、実行時にフォーム上に線を描画する方法を示します。Visual Basic 6.0 のコード例では、Line メソッドを使用し、パラメータとして線の開始位置と終了位置の X 座標と Y 座標を渡し、オプションの引数として色を渡します。Visual Basic 2008 のコード例では、DrawLine メソッドを使用し、引数として Pens オブジェクトと、開始位置と終了位置の X 座標および Y 座標を渡します。

9dtfzwyx.alert_note(ja-jp,VS.90).gifメモ :

Visual Basic 6.0 の既定の測定単位は twip ですが、Visual Basic 2008 の測定単位はピクセルです。

' Visual Basic 6.0
Private Sub Form_Paint()
    ' Draw a solid black line 200 twips from the top of the form.
    Line (0, 200) - (ScaleWidth, 200), vbBlack
End Sub
' Visual Basic
Private Sub Form1_Paint(ByVal sender As Object, ByVal e _
As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

    ' Draw a solid black line 25 pixels from the top of the form.
    e.Graphics.DrawLine(Pens.Black, 0, 25, Me.Width, 25)
End Sub

点線の描画

次のコードは、実行時にフォーム上に点線を描画する方法を示します。Visual Basic 6.0 のコード例では、DrawStyle プロパティを使用して線の外観を指定します。Visual Basic 2008 のコード例では、Pen オブジェクトを使用し、DashStyle プロパティを設定して外観を指定します。

9dtfzwyx.alert_note(ja-jp,VS.90).gifメモ :

Visual Basic 6.0 の既定の測定単位は twip ですが、Visual Basic 2008 の測定単位はピクセルです。

' Visual Basic 6.0
Private Sub Form_Paint()
    ' Draw a dotted line 200 twips from the top of the form.
    Me.DrawStyle = vbDot
    Line (0, 200) - (ScaleWidth, 200), vbBlack
End Sub
' Visual Basic
Private Sub Form1_Paint1(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

    ' Draw a dotted black line 25 pixels from the top of the form.
    Dim LPen As New System.Drawing.Pen(System.Drawing.Color.Black)
    LPen.DashStyle = Drawing2D.DashStyle.Dot
    e.Graphics.DrawLine(LPen, 0, 25, Me.Width, 25)
End Sub

線の太さの制御

次のコードは、実行時にフォーム上に太さの異なる複数の線を描画する方法を示します。Visual Basic 6.0 のコード例では、DrawWidth プロパティを使用します。Visual Basic 2008 のコード例では、Pens オブジェクトの Width プロパティを使用します。

' Visual Basic 6.0
Private Sub Form_Paint()
    ' Draw a line with a thickness of 1 pixel.
    DrawWidth = 1
    Line (0, 200)-(ScaleWidth, 200), vbBlack
    ' Draw a line with a thickness of 5 pixels.
    DrawWidth = 5
    Line (0, 400)-(ScaleWidth, 400), vbBlack
    ' Draw a line with a thickness of 10 pixels.
    DrawWidth = 10
    Line (0, 600)-(ScaleWidth, 600), vbBlack
End Sub
' Visual Basic
Private Sub Form1_Paint2(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

    ' Draw a line with a thickness of 1 pixel.
    Dim TPen As New System.Drawing.Pen(System.Drawing.Color.Black, 1)
    e.Graphics.DrawLine(TPen, 0, 25, Me.Width, 25)
    ' Draw a line with a thickness of 5 pixels.
    TPen.Width = 5
    e.Graphics.DrawLine(TPen, 0, 50, Me.Width, 50)
    ' Draw a line with a thickness of 10 pixels.
    TPen.Width = 10
    e.Graphics.DrawLine(TPen, 0, 75, Me.Width, 75)
End Sub

円の描画

次のコードは、実行時にフォーム上に円を描画する方法を示します。Visual Basic 6.0 のコード例では、Circle メソッドを使用し、引数として円の中心点の X および Y 座標と半径を渡し、オプションで色を渡します。Visual Basic 2008 のコード例では、DrawEllipse メソッドを使用し、引数として Pen オブジェクト、外接する四角形の左上隅の X 座標および Y 座標、幅と高さを渡します。

9dtfzwyx.alert_note(ja-jp,VS.90).gifメモ :

Visual Basic 6.0 の既定の測定単位は twip ですが、Visual Basic 2008 の測定単位はピクセルです。

' Visual Basic 6.0
Private Sub Form_Paint()
    ' Draw a 1000 twip diameter red circle
    Circle (500, 500), 500, vbRed
End Sub
' Visual Basic
Private Sub Form1_Paint3(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

    ' Draw a 70 pixel diameter red circle.
    e.Graphics.DrawEllipse(Pens.Red, 0, 0, 70, 70)
End Sub

塗りつぶされた四角形の描画

次のコードでは、実行時に 2 つの四角形をフォーム上に描画します。1 つの四角形は純色で塗りつぶし、もう 1 つの四角形はクロスハッチ パターンで塗りつぶします。Visual Basic 6.0 のコード例では、FillColor プロパティと FillStyle プロパティおよび Line メソッドを使用します。B パラメータを指定して Line メソッドを呼び出して、四角形を描画します。

Visual Basic 2008 のコード例では、Graphics.Rectangle メソッドを使って輪郭を描画し、Graphics.FillRectangle メソッドに引数として Brush オブジェクトを渡します。この例では、SolidBrush コントロールと HatchBrush コントロールの両方を使用します。

9dtfzwyx.alert_note(ja-jp,VS.90).gifメモ :

Visual Basic 6.0 の既定の測定単位は twip ですが、Visual Basic 2008 の測定単位はピクセルです。

' Visual Basic 6.0
Private Sub Form_Paint()
    ' Draw a solid red rectangle.
    FillColor = vbRed
    FillStyle = vbSolid
    Line (10, 10)- (1000, 500), vbRed, B
    ' Draw a rectangle filled with a crosshatch pattern.
    FillColor = vbBlack
    FillStyle = vbCross
    Line (10, 500)- (1000, 1000), vbBlack, B
End Sub
' Visual Basic
Private Sub Form1_Paint4(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

    ' Draw a solid red rectangle.
    Dim SBrush As New System.Drawing.SolidBrush _
      (System.Drawing.Color.Red)
    e.Graphics.DrawRectangle(Pens.Red, 2, 2, 70, 40)
    e.Graphics.FillRectangle(SBrush, 2, 2, 70, 40)

    ' Draw a rectangle filled with a crosshatch pattern.
    Dim HBrush As New System.Drawing.Drawing2D.HatchBrush( _
      System.Drawing.Drawing2D.HatchStyle.Cross, _
      System.Drawing.Color.Black, System.Drawing.Color.Transparent)
    e.Graphics.DrawRectangle(Pens.Black, 2, 40, 70, 40)
    e.Graphics.FillRectangle(HBrush, 2, 40, 70, 40)
End Sub

フォーム上での画像の表示

次のコードは、グラフィックス メソッドを使って、実行時にフォーム上に画像を表示する方法を示します。Visual Basic 6.0 のコード例では、PaintPicture メソッドを使用します。Visual Basic 2008 の例では、DrawImage メソッドを使用します。

' Visual Basic 6.0
Private Sub Form_Paint()
    ' Create a stdPicture object.
    Dim Pict1 As New stdPicture
    Pict1 = LoadPicture("C:\Windows\Greenstone.bmp")
    PaintPicture Pict1, 0, 0
End Sub
' Visual Basic
Private Sub Form1_Paint5(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

    ' Create a Bitmap object.
    Dim Pict1 As New Bitmap("C:\Windows\Greenstone.bmp")
    e.Graphics.DrawImage(Pict1, 0, 0)
End Sub

フォーム上でのテキストの表示

次のコードは、グラフィックス メソッドを使って、実行時にフォーム上にテキスト文字列を表示する方法を示します。Visual Basic 6.0 のコード例では、Print メソッドを使用します。Visual Basic 2008 の例では、DrawString メソッドを使用します。

' Visual Basic 6.0
Private Sub Form_Paint()
    Me.Font.Size = 24
    Me.Font.Bold = True
    Me.ForeColor = vbRed
    Print "Hello World!"
End Sub
' Visual Basic
Private Sub Form1_Paint6(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

    Dim TextFont As New System.Drawing.Font("Arial", 24, FontStyle.Bold)
    Dim TextBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red)
    e.Graphics.DrawString("Hello World!", TextFont, TextBrush, 10, 10)
    TextFont.Dispose()
    TextBrush.Dispose()
End Sub

文字列の高さと幅の確認

次のコードは、グラフィックス メソッドを使って、実行時にフォーム上の文字列のサイズを確認し、その周囲に四角形を描画する方法を示します。Visual Basic 6.0 のコード例では、TextHeight メソッドと TextWidth メソッドを使用します。Visual Basic 2008 のコード例では、MeasureString メソッドを使用します。このメソッドは、SizeF 構造体を返します。

' Visual Basic 6.0
Private Sub Form_Paint()
    Me.Font.Size = 24
    Me.Font.Bold = True
    Me.ForeColor = vbRed
    Print "Hello World!"
    Line (0, 0)-(TextWidth("Hello World!"), _
TextHeight("Hello World!")), vbBlack, B 
End Sub
' Visual Basic
Private Sub Form1_Paint7(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

    Dim TextFont As New System.Drawing.Font("Arial", 24, FontStyle.Bold)
    Dim TextBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red)
    e.Graphics.DrawString("Hello World!", TextFont, TextBrush, 10, 10)
    Dim TextSize As New System.Drawing.SizeF
    TextSize = e.Graphics.MeasureString("Hello World!", TextFont)
    e.Graphics.DrawRectangle(Pens.Black, 10, 10, TextSize.Width, TextSize.Height)
    TextFont.Dispose()
    TextBrush.Dispose()
End Sub

単一のピクセルの描画

次のコードは、グラフィックス メソッドを使って、実行時にフォーム上の 1 ピクセルの色を変更する方法を示します。Visual Basic 6.0 のコード例では、PSet メソッドを使用します。Visual Basic 2008 のコード例では、DrawEllipse メソッドを使用し、Height パラメータと Width パラメータを 1 に設定します。

メモ    Visual Basic 6.0 の既定の測定単位は twip ですが、Visual Basic 2008 の測定単位はピクセルです。

' Visual Basic 6.0
Private Sub Form_Paint()
    Me.DrawWidth = 1
    PSet (1000, 1000), vbRed
End Sub
' Visual Basic
Private Sub Form1_Paint8(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

    e.Graphics.DrawEllipse(Pens.Red, 70, 70, 1, 1)
End Sub

単一ピクセルの色の確認

次のコードは、グラフィックス メソッドを使って、実行時にフォーム上の画像の指定した位置にある 1 ピクセルの色を確認し、その色で四角形を塗りつぶして描画する方法を示します。Visual Basic 6.0 のコード例では、Point メソッドを使ってカラー値を取得します。Visual Basic 2008 の例では、GetPixel メソッドを使用します。

9dtfzwyx.alert_note(ja-jp,VS.90).gifメモ :

Visual Basic 6.0 の既定の測定単位は twip ですが、Visual Basic 2008 の測定単位はピクセルです。

' Visual Basic 6.0
Private Sub Form_Paint()
    Dim PixelColor As Long
    Picture1.Picture = LoadPicture("C:\Windows\Greenstone.bmp")
    PixelColor = Picture1.Point(10, 10)
    FillColor = PixelColor
    Line (0, 0)-(100, 500), PixelColor, B
End Sub
' Visual Basic
Private Sub Form1_Paint9(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

    Dim Pict1 As New Bitmap("C:\Windows\Greenstone.bmp")
    Picture1.Image = Pict1
    Dim PixelColor As Color = Pict1.GetPixel(4, 4)
    Dim PixelBrush As New SolidBrush(PixelColor)
    e.Graphics.FillRectangle(PixelBrush, 0, 0, 100, 100)
End Sub

グラフィックス プロパティとメソッドの対応関係

次の表は、Visual Basic 6.0 のグラフィックス プロパティおよびグラフィックス メソッドと、Visual Basic 2008 でそれらに対応するものを示します。

Visual Basic 6.0

Visual Basic 2008 で対応するもの

AutoRedraw プロパティ

新規に実装されました。グラフィックスを永続化するには、Paint イベントにグラフィックス メソッドを記述します。

Circle メソッド

DrawEllipse メソッド

ClipControls プロパティ

新規に実装されました。ClipControls プロパティは不要になりました。

Cls メソッド

Clear メソッド

CurrentX プロパティ

各種グラフィックス メソッドの x パラメータ。たとえば、DrawRectangle(pen, x, y, width, height)。

CurrentY プロパティ

各種グラフィックス メソッドの y パラメータ。たとえば、DrawRectangle (pen, x, y, width, height)。

DrawMode プロパティ

新規に実装されました。DrawMode プロパティは不要になりました。

DrawStyle プロパティ

DashStyle プロパティ

DrawWidth プロパティ

Width プロパティ

FillColor プロパティ

SolidBrush オブジェクト

FillStyle プロパティ

HatchBrush オブジェクト

HasDC プロパティ

新規に実装されました。GDI+ では、デバイス コンテキストは不要になりました。

HDC プロパティ

新規に実装されました。GDI+ では、デバイス コンテキストは不要になりました。

Image プロパティ

新規に実装されました。

Line メソッド

DrawLine メソッド

PaintPicture メソッド

DrawImage メソッド

Point メソッド

直接対応する項目はありません。ビットマップには、Bitmap.GetPixel を使用します。フォームまたはコントロールには、BackColor プロパティを使用します。

Print メソッド

DrawString メソッド

Pset メソッド

DrawEllipse メソッド、FillEllipse メソッド

TextHeight、TextWidth プロパティ

MeasureString メソッド

アップグレード メモ

アプリケーションを Visual Basic 6.0 から Visual Basic 2008 にアップグレードすると、グラフィックス メソッドはアップグレードされず、警告がコードに挿入されます。GDI と GDI+ では大きな違いがあるので、既存のグラフィックス コードは書き直す必要があります。

参照

処理手順

ユーザー コントロールのカスタム描画のサンプル

その他の技術情報

グラフィックスの概要 (Windows フォーム)

グラフィックス プログラミングについて

GDI+ マネージ コードについて

マネージ グラフィックス クラスの使用