# Steer me in the right direction

I am writing two applications.
One is going to display information in a Gauge like format as on the dashboard of a car but I dont know how to do this.
The art I dont think I need help with but if I use needle gauges I need to make a line rotate a certain number of degrees based on some number input.  I hope this is making sense.

The second thing is that I am writing software to make a timeline simply by me adding events and a Date into a database I want to the app to create a visual time line of the events.

Any help will be appreciated.
###### Who is Participating?

Commented:
To rotate a point about the origin (x=0, y=0) you can use use...

Public Type tPOINT
fX As Single
fY As Single
End Type

Public Sub RotatePoint(fAngle As Single, Point As tPOINT)
' Rotates the point about the origine
Dim TempPoint As tPOINT
TempPoint = Point

Point.fX = (TempPoint.fX * Cos(fAngle)) + (TempPoint.fY * Sin(fAngle))
Point.fY = (TempPoint.fY * Cos(fAngle)) - (TempPoint.fX * Sin(fAngle))

End Sub

so if you're rotating X1 and Y1 about X2 and Y2, use this

Private Sub Timer1_Timer()
Dim Point As tPOINT
With Line1
Point.fX = .X1 - .X2
Point.fY = .Y2 - .Y1
RotatePoint 0.1, Point
.X1 = Point.fX + .X2
.Y1 = .Y2 - Point.fY
End With
End Sub

for the timeline, a vb date is stored as an 8 byte number, with the number before the decimal specifying the date and after - the time. If your time line has a start date and an end date, you can cast your event dates to be doubles and work out the fraction along the line

slap a picture box on a form and paste in this code

Private Type tEVENT
sName As String
dteWhen As Date
End Type

Private ga_Events() As tEVENT
Private g_dteStart As Date
Private g_dteEnd As Date

g_dteStart = "1/1990"
g_dteEnd = "1/1/2000"
ReDim ga_Events(0 To 9)
' 10 events
ga_Events(0).sName = "Event 1"
ga_Events(0).dteWhen = "1/1/1990"
ga_Events(1).sName = "Event 2"
ga_Events(1).dteWhen = "1/10/1990"
ga_Events(2).sName = "Event 3"
ga_Events(2).dteWhen = "1/1/1991"
ga_Events(3).sName = "Event 4"
ga_Events(3).dteWhen = "1/1/1992"
ga_Events(4).sName = "Event 5"
ga_Events(4).dteWhen = "1/10/1997"
ga_Events(5).sName = "Event 6"
ga_Events(5).dteWhen = "1/11/1997"
ga_Events(6).sName = "Event 7"
ga_Events(6).dteWhen = "1/10/1998"
ga_Events(7).sName = "Event 8"
ga_Events(7).dteWhen = "1/11/1998"
ga_Events(8).sName = "Event 9"
ga_Events(8).dteWhen = "1/10/1999"
ga_Events(9).sName = "Event 10"
ga_Events(9).dteWhen = "1/12/1999"

Dim n  As Integer
Dim fSpan As Single
Dim dTimeSpan As Double

fSpan = Picture1.Width
dTimeSpan = CDbl(g_dteEnd) - CDbl(g_dteStart)
Dim fPosition As Single

For n = 0 To 9
fPosition = CSng(fSpan * ((CDbl(ga_Events(n).dteWhen) - CDbl(g_dteStart)) / dTimeSpan))
Picture1.Line (fPosition, 0)-(fPosition, Picture1.Height)
Next n

End Sub

0

Senior .Net ConsultantCommented:
For your first question, use the CCROP Progress bar control (http://www.mvps.org/ccrp/controls/ccrpprogbar6.htm).

For the timeline, see this one: http://support.microsoft.com/support/kb/articles/Q112/6/50.asp?LNG=ENG&SA=ALLKB&FR=0
0

Commented:
while you're at it, check out the rest of www.mvps.org :)
0

Commented:
I wouldnt recommend adding a new custom control to your project just to rotate a line. The calculation is pretty straightforward geometry.
0

Senior .Net ConsultantCommented:
Why reinvent the wheel when the wheel exists and good?
0

Commented:
oh yeah, I forgot to say, set the autoredraw property on the picturebox to be true
0

Author Commented:
I want to give Points to both Olly-George and emoreau...both answers were excellent.
How do I do it?
0

Senior .Net ConsultantCommented:
You have to create new questions that looks like "for expert_Id only"
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.