Public Class FormularzGłówny
    Private m_objObszarRysowania As Bitmap
    Private Sub FormularzGłówny_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Randomize()
        ' Utwórz mapę bitową o takich samych wymiarach jak formularz.
        m_objObszarRysowania = New Bitmap(Me.ClientRectangle.Width, Me.ClientRectangle.Height,
            Imaging.PixelFormat.Format24bppRgb)
        InicjujObszar()

    End Sub

    Private Sub FormularzGłówny_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
        Dim objGrafika As Graphics
        ' Nie można bezpośednio modyfikować obiektu e.Graphics.
        objGrafika = e.Graphics
        ' Wyświetl zawartość mapy w formularzu.
        objGrafika.DrawImage(m_objObszarRysowania, 0, 0,
            m_objObszarRysowania.Width, m_objObszarRysowania.Height)

    End Sub

    Private Sub InicjujObszar()
        Dim objGrafika As Graphics
        Dim rectGranice As Rectangle
        ' Utwórz obiekt Graphics reprezentujący mapę bitową i skasuj jej zawartość.
        objGrafika = Graphics.FromImage(m_objObszarRysowania)
        objGrafika.Clear(SystemColors.Control)
        ' Zdefiniuj prostokąt o takich samych wymiarach jak mapa bitowa.
        rectGranice = New Rectangle(0, 0, m_objObszarRysowania.Width,
            m_objObszarRysowania.Height)
        ' Zmniejsz nieznacznie prostokąt, aby elipsa nie dotykała ramek.
        rectGranice.Inflate(-1, -1)
        ' Narysuj elipsę zajmującą obszar formularza.
        objGrafika.DrawEllipse(Pens.Orange, rectGranice)

    End Sub

    Private Sub btnRysujTekst_Click(sender As Object, e As EventArgs) Handles btnRysujTekst.Click
        Dim objGrafika As Graphics
        Dim objCzcionka As Font
        Dim intWielkośćCzcionki As Integer
        Dim intTekstX As Integer
        Dim intTekstY As Integer
        Dim objLos As Random
        ' Wyjdź z procedury, jeżeli nie został wpisany tekst.
        If txtRysowanie.Text.Length = 0 Then Exit Sub
        ' Utwórz obiekt Graphics reprezentujący mapę bitową.
        objGrafika = Graphics.FromImage(m_objObszarRysowania)
        ' Zainicjuj obiekt Random.
        objLos = New Random(Now.Millisecond)
        ' Wygeneruj losową wielkość czcionki z zakresu od 8 do 48.
        intWielkośćCzcionki = objLos.Next(8, 48)
        ' Wygeneruj losową współrzędną X tekstu.
        intTekstX = objLos.Next(0, Me.ClientRectangle.Width - 20)
        ' Wygeneruj losową współrzędną Y tekstu.
        intTekstY = objLos.Next(0, Me.ClientRectangle.Height - 20)
        ' Utwórz nowy obiekt czcionki.
        objCzcionka = New Font("Courier New", intWielkośćCzcionki, FontStyle.Bold Or FontStyle.Italic)
        ' Narysuj tekst wpisany przez użytkowika.
        objGrafika.DrawString(txtRysowanie.Text, objCzcionka, Brushes.Red, intTekstX, intTekstY)
        ' Posprzątaj kod.
        objGrafika.Dispose()
        ' Odśwież formularz wywołując zdarzenie Paint.
        Me.Invalidate()

    End Sub
End Class
