After recently finding this British History Timeline, I decided to map out a brief history of Giles Bathgate. The first blue section represents my early childhood. Followed by a green section representing my Pre-school years. The orange section is my time at Secondary School, followed by the two years at college in yellow. The four years I spent at University are purple followed finally a blue section which represents working up to the present day. The red section at the end represents the range of years in which i might pass away due to natural causes.
I used the following code to generate the timeline image.
Option Strict On
Public Class Form1
Private m_Start As Date = #11/10/1979#
Private m_Finish As Date = #1/1/2070#
Private m_StartPrimarySchool As Date = #1/1/1984#
Private m_StartSecondarySchool As Date = #1/1/1991#
Private m_StartCollege As Date = #1/1/1996#
Private m_StartUniversity As Date = #1/1/1998#
Private m_StartWork As Date = #1/1/2002#
Private m_font As New Font("arial", 10, FontStyle.Regular, GraphicsUnit.Pixel)
Private m_Steps As Integer
Sub New()
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Me.StartPosition = FormStartPosition.Manual
Me.Location = New Point(0, 0)
Me.Height = Screen.GetWorkingArea(New Point(0, 0)).Height
Me.Width = 150
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
e.Graphics.Clear(Color.White)
Dim years As Integer = m_Finish.Year - m_Start.Year
m_Steps = Me.Height years
For i As Integer = 0 To years + 10
e.Graphics.DrawLine(Pens.LightGray, 0, i * m_Steps, Me.Width, i * m_Steps)
Next
For i As Integer = 1 To years Step 10
e.Graphics.DrawLine(Pens.Gray, 0, i * m_Steps, Me.Width, i * m_Steps)
e.Graphics.DrawString(m_Start.AddYears(i).Year.ToString, m_font, Brushes.Black, 100, i * m_Steps)
Next
DrawRange(e.Graphics, m_Start, m_StartPrimarySchool, Color.LightBlue)
DrawRange(e.Graphics, m_StartPrimarySchool, m_StartSecondarySchool, Color.Green)
DrawRange(e.Graphics, m_StartSecondarySchool, m_StartCollege, Color.Orange)
DrawRange(e.Graphics, m_StartCollege, m_StartUniversity, Color.Gold)
DrawRange(e.Graphics, m_StartUniversity, m_StartWork, Color.Purple)
DrawRange(e.Graphics, m_StartWork, Now, Color.Blue)
DrawRange(e.Graphics, m_Start.AddYears(74), m_Start.AddYears(90), Color.Red)
Dim nowyear As Integer = Now.Year - m_Start.Year
e.Graphics.DrawLine(Pens.Blue, 0, nowyear * m_Steps, 200, nowyear * m_Steps)
e.Graphics.DrawString(Now.Year.ToString, m_font, Brushes.Blue, 100, nowyear * m_Steps)
End Sub
Private Sub DrawRange(ByVal g As Graphics, ByVal start As Date, ByVal endy As Date, ByVal c As Color)
Dim startyear As Integer = start.Year - m_Start.Year
Dim endyear As Integer = endy.Year - m_Start.Year
Using b As New SolidBrush(Color.FromArgb(100, c))
g.FillRectangle(b, 0, startyear * m_Steps, 50, (endyear - startyear) * m_Steps)
End Using
End Sub
Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
MyBase.OnResize(e)
Me.Invalidate()
End Sub
End Class