Trädvy Permalänk
Medlem
Plats
Bromma
Registrerad
Aug 2008

Mätare i VS2008

Tjenare,

Programmerar en app till min HTC Touch Diamond. Det är WM6.1 på den. Behöver inte gå in så mycket i detaljer men jag progammerar en sorts mätare. Liknande en hastighetsmätare eller en som mäter RPM etc. Jag har gjort en bild i photoshop som jag laddar in och sen har jag gjort en formel för vilka punkter som pekaren ska gå imellan. Så att den börjar i mitten och slutar på t.ex. 200 om den ska visa det. Problemet är att jag får massvis med streck, det gamla försvinner inte. Hur ska man lösa det? Lite förvirrad:S

Koden jag kör med nu:

Dim objgraphics As Graphics objgraphics = Graphics.FromImage(PictureBox1.Image) Dim x1 As Integer = (PictureBox1.Image.Width / 2) - (0.025 * PictureBox1.Image.Width) Dim y1 As Integer = (PictureBox1.Image.Width / 2) Dim x2 As Integer = x1 - pointerlength * (Math.Cos((v1 - 47) * 0.029)) Dim y2 As Integer = y1 - pointerlength * (Math.Sin((v1 - 47) * 0.029)) objgraphics.DrawLine(pen1, x1, y1, x2, y2)

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Trädvy Permalänk
Medlem
Plats
Nord-Trøndelag
Registrerad
Jul 2003

Rita om bilden också varje gång du ska rita om mätaren/linjen/nålen, och gör det innan du ritar om linjen.

Trädvy Permalänk
Medlem
Plats
Bromma
Registrerad
Aug 2008

Hur gör jag det?:S Alla olika jag har testat med slutar antingen med att mätaren inte visas eller stack overflow eftersom att den inte laddar om utan bara lägger på en ny

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Trädvy Permalänk
Medlem
Registrerad
Jan 2006

Testa med objgraphics.Clear(-en färg-) efter Graphics.FromImage(...) raden?

Trädvy Permalänk
Medlem
Plats
Bromma
Registrerad
Aug 2008

Har gjort det men får den inte att funka. när jag clearar med en färg försvinner min bild. även om jag kör med transparent. kör jag med color.none eller vad den heter suddas inget ut:S

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Trädvy Permalänk
Medlem
Plats
Exil i huvudstaden
Registrerad
Jul 2004

Är svårt att få en uppfattning om vad du försöker göra i praktiken utan sammanhang. Vart du vill nå förstår jag dock

Vanligtvis (kanske du gör) brukar man ha ett "onpaint"-event som man implementerar för den kontroll som skall visa grafik. Denna metod anropas varje gång kontrollen behöver ritas om.

Implementerar man en egen kontroll så har man antagligen properties man sätter värdet på (t.ex. värdet på mätaren) och då får man se till att onpaint anropas genom att anropa en metod som markerar att kontrollen är i behov av omritning (man anropar alltså inte onpaint själv). Talar vi VB/C# heter det Invalidate eller Refresh beroende på vilket behov man har.

Jag vet inte om du har koll på detta. Om ja, då hjälper det nog med lite mer från din kod. Om nej så behöver du sätta dig ned och titta igenom några tutorials där man går igenom t.ex. user controls. Har annars kod nånstans jag kan gräva fram, och länkar lika så. Men det beror på vad du kan och vet vad som är användbart.

Om du inte håller på med user controls utan bara ett form, ja då har är det formets paint-metod du vill rodda i. Om det nu inte är det då gör.

Crap.

Trädvy Permalänk
Medlem
Plats
Bromma
Registrerad
Aug 2008

Läste lite om onpaintmetoden förut men förstod inte riktigt syftet med den. Men nu när du förklarade lite lyckades jag precis som jag ville! Tack morr;)

anropningen: setnewcoordinates(v1) PictureBox1.Refresh() Public Sub setnewcoordinates(ByVal v1 As Integer) x1 = (PictureBox1.Image.Width / 2) - (0.045 * PictureBox1.Image.Width) y1 = (PictureBox1.Image.Width / 2) - (0.025 * PictureBox1.Image.Width) x2 = x1 - pointerlength * (Math.Cos((v1 - 47) * 0.029)) y2 = y1 - pointerlength * (Math.Sin((v1 - 47) * 0.029)) End Sub Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint e.Graphics.DrawLine(pen1, x1, y1, x2, y2) End Sub

Tusen tack alla:)

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Trädvy Permalänk
Medlem
Plats
Exil i huvudstaden
Registrerad
Jul 2004

Kul att du kom loss!

Crap.