Grafik

Matematik Felsökning

I ett formulär kan positioner anges med koordinater (x,y) där x motsvarar läget horisontellt och y läget vertikalt. Utgångspunkten är det övre vänstra hörnet i det objekt där vi skall rita. Det hörnet har alltså koordinaten (0,0). x-värdet ökar åt höger och y-värdet ökar nedåt. Standardenheten är pixlar (bildpunkter). I VB6 var det twips som var standardenhet, där 1 tum=1440 twips.

Det finns inga ritkontroller i Toolboxen. Numera får vi använda grafikmetoderna som finns i namnområdet System.Drawing. Ett exempel som ritar en linje:

Dim Grafik As System.Drawing.Graphics
Dim ritfärg As new System.Drawing.Pen(Color.Red, 5)
Grafik = PictureBox1.CreateGraphics()
Grafik.DrawLine(ritfärg, 0, 0, 100, 20)

Först skapar vi ett grafikobjekt som vi kan kalla Grafik. Nästa rad skapar ett argument beroende på om det är en linje eller en fylld figur vi skall göra.

I detta fall är det objektet Pen som blir argument och vi döper det till ritfärg. I det här exemplet blir linjen röd med 5 pixlars bredd.

Nästa rad sätter grafikobjektet Grafik till att skapa grafik i den PictureBox som finns i formuläret. Det går lika bra att rita på formen eller något annat objekt. Skulle vi rita på formen skriver vi i stället Grafik = Me.CreateGraphics().

Sist anger vi vad för slags figur som grafikobjektet skall rita.

Här vill vi ha en linje med det attribut vi skapade på andra raden, och vi anger i vilka koordinater linjen skall börja och sluta. Resultatet blir alltså en röd 5 pixlar bred linje från koordinaterna (0,0) till (100,20).

Vi kan i stället för linje rita en rektangel genom att bara byta ut Grafik.DrawLine mot Grafik.DrawRectangle. Till exempel

Grafik.DrawRectangle(ritfärg, 10, 20, 180, 60)

I det här fallet motsvarar (10,20) det övre vänstra hörnet i rektangel och (180,60) det nedre högra hörnet. 180-10 är alltså längden och 60-20 är höjden på rektangeln.

För en ellips blir koden

Grafik.DrawEllipse(Ritfärg, 0, 0, 80, 100)

Här anger första nollan att ellipsen tangerar vänstra kanten på PictureBoxen, den andra nollan att ellipsen också tangerar övre kanten på PictureBoxen, alltså x=0 och y=0. Sedan anger 80 bredden på ellipsen, medan 100 anger höjden. I det här fallet är alltså ellipsen en stående ellips.

Koden för liggande ellips blir:

Grafik.DrawEllipse(Ritfärg, 0, 0, 100, 80)

Om vi vill ha fyllda figurer dimensionerar vi en SolidBrush i stället för Pen, och låter denna bli argument.

Dim Fyllningsfärg As New SolidBrush(Color.Blue)

Här blir fyllningsfärgen Color.Blue ett exempel som skapar en blå rektangel:

Dim Grafik As System.Drawing.Graphics
Dim Fyllningsfärg As New SolidBrush(Color.Blue)
Grafik = PictureBox1.CreateGraphics()
Grafik.FillRectangle(Fyllningsfärg, 50, 10, 200, 100)

En fylld ellips:

Grafik.FillEllipse(Fyllningsfärg, 0, 0, 100, 80)

Paint-händelseprocedur

De ritade linjerna kommer bara att finnas kvar så länge inget annat täcker linjerna. Grafiken kommer också att försvinna om vi minimerar fönstret och sedan maximerar det igen. Detta förhindras om koden placeras i formulärets Paint-händelseprocedur. 

Ta fram kodfönstret och klicka på Base Class Events i vänstra listan.

Välj händelsen Paint i den högra listan

Nu kommer det att stå Form1_Paint i den högra listan och följande kod har hamnat i redigeringsfönstret:

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

End Sub

Om vi nu skriver vår grafikkod inne i den Sub-proceduren kommer inte grafiken att försvinna.

Matematik Felsökning

SupportData.Net
©