Degeim Skrevet 24. januar 2006 Del Skrevet 24. januar 2006 (endret) Jeg har programmert i VB 6.0 i lengre tid nå, og arbeider for tiden med å lære VB .NET 2005 og oppgradere en av mine applikasjoner til dette nye språket. Dette går fint, men jeg sitter fast ved grafikk-delen. Kan noen bidra med enkle eksempel på kodesnutter som fungerer på samme måte som følgende (i VB 6.0): .Pset (X,Y) 'Dott .Line - (X,Y) 'Følger musen (og annet) .Line (X,Y)-(X,Y) 'Linje fra XY til XY .Line (X,Y)-(X,Y), Farge, BF 'Firkant .Circle (X,Y),Farge ' (denne kan være litt feil, men poenget er at den lager sirkler) Takk Endret 24. januar 2006 av Degeim Lenke til kommentar
GeirGrusom Skrevet 25. januar 2006 Del Skrevet 25. januar 2006 Når en skal tegne i VB.NET må du tegne i enten OnPaint suben, eller bruke Paint event. Denne gir et parameter (e As PaintEventArgs) som har en egenskap som heter Graphics, denne tegner du på. Når du vil tvinge programmet til å tegne på nytt, kaller du Invalidate(). eks: Private Sub DoPaint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint With e.Graphics .FillRectangle(Brushes.Blue, 32, 32, 160, 160) ' Line, BF .DrawLine(Pens.Black, 32, 32, 128, 128) ' Vanlig linje .DrawEllipse(Pens.Black, 32, 32, 127, 127) ' Sirkel End With End Sub For å tegne linje etter musen, kan vi ikke bruke Paint, eller, det går, men blir unødvendig komplisert. Da bruker man CreateGraphics() funksjonen Private XX As Integer Private YY As Integer Private g As Graphics ' Grafikk objektet vi skal tegne med Private Sub Form_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseDown XX = e.X YY = e.Y g = Me.CreateGraphics() ' Lag et grafikk objekt End Sub Private Sub Form_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseMove If e.Button = MouseButtons.Left Then g.DrawLine(Pens.Black, XX, YY, e.X, e.Y) XX = e.X YY = e.Y End Sub Private Sub Form_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseUp g.Dispose() g = Nothing End Sub Farger i VB.NET er ikke lenger et heltall, men et Color objekt Denne består av fire verdier, R, G, B og A (som er ugjennomsiktighet, dvs. 255 er helt synlig, 0 er gjennomsiktig) Du kan kalle constructor for å lage en farge runtime. Farger kan brukes i brushes (SolidBrush, LinearGradientBrush, PathLinearGradientFill og HatchBrush) og Pens. Men du kan ikke endre på pennene i Pens eller SystemPens objektet, så da må du lage en selv Dim MyPen As Pen = New Pen(SystemColors.Control) f.eks. samme gjelder brushes. Pen kan også ha en brush forresten. Brush eksempel: Private Sub DrawLinearGradient(ByVal g As Graphics) g.FillRectangle(New Drawing.Drawing2D.LinearGradientBrush(New Point(32, 32), New Point(32, 160), Color.Transparent, Color.AliceBlue), New Rectangle(32, 32, 128, 128)) End Sub Private Sub DrawHatchBrush(ByVal g As Graphics) g.FillRectangle(New Drawing2D.HatchBrush(Drawing2D.HatchStyle.Cross, Color.FromArgb(32, 255, 255, 0), Color.Transparent), New Rectangle(32, 32, 128, 128)) End Sub Slik vil da hele koden se ut: Private Sub DoPaint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint With e.Graphics .FillRectangle(Brushes.Blue, 32, 32, 128, 128) ' Line, BF .DrawLine(Pens.Black, 32, 32, 160, 160) ' Vanlig linje .DrawEllipse(Pens.Black, 32, 32, 127, 127) ' Sirkel End With DrawLinearGradient(e.Graphics) DrawHatchBrush(e.Graphics) End Sub Private XX As Integer Private YY As Integer Private g As Graphics ' Grafikk objektet vi skal tegne med Private Sub Form_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseDown XX = e.X YY = e.Y g = Me.CreateGraphics() ' Lag et grafikk objekt End Sub Private Sub Form_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseMove If e.Button = MouseButtons.Left Then g.DrawLine(Pens.Black, XX, YY, e.X, e.Y) XX = e.X YY = e.Y End Sub Private Sub Form_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseUp g.Dispose() g = Nothing End Sub Private Sub DrawLinearGradient(ByVal g As Graphics) g.FillRectangle(New Drawing.Drawing2D.LinearGradientBrush(New Point(32, 32), New Point(32, 160), Color.Transparent, Color.AliceBlue), New Rectangle(32, 32, 128, 128)) End Sub Private Sub DrawHatchBrush(ByVal g As Graphics) g.FillRectangle(New Drawing2D.HatchBrush(Drawing2D.HatchStyle.Cross, Color.FromArgb(32, 255, 255, 0), Color.Transparent), New Rectangle(32, 32, 128, 128)) End Sub Sjekk resultatet, og finn ut hvordan de forskjellige klassene fungerer. Lenke til kommentar
Degeim Skrevet 25. januar 2006 Forfatter Del Skrevet 25. januar 2006 Tusen takk for laaaaangt innlegg! Nå skal jeg virkelig kose meg i ettermiddag :!: Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå