home *** CD-ROM | disk | FTP | other *** search
/ An Introduction to Progr…l Basic 6.0 (4th Edition) / An Introduction to Programming using Visual Basic 6.0.iso / PROGRAMS / CH10 / 10-2-2.FRM (.txt) < prev    next >
Encoding:
Visual Basic Form  |  1998-09-18  |  4.8 KB  |  142 lines

  1. VERSION 5.00
  2. Begin VB.Form frm10_2_2 
  3.    Caption         =   "Multi-Line Chart"
  4.    ClientHeight    =   4665
  5.    ClientLeft      =   1410
  6.    ClientTop       =   1800
  7.    ClientWidth     =   6360
  8.    BeginProperty Font 
  9.       Name            =   "MS Sans Serif"
  10.       Size            =   8.25
  11.       Charset         =   0
  12.       Weight          =   700
  13.       Underline       =   0   'False
  14.       Italic          =   0   'False
  15.       Strikethrough   =   0   'False
  16.    EndProperty
  17.    LinkTopic       =   "Form1"
  18.    PaletteMode     =   1  'UseZOrder
  19.    ScaleHeight     =   4665
  20.    ScaleWidth      =   6360
  21.    Begin VB.PictureBox picEnroll 
  22.       Height          =   3735
  23.       Left            =   240
  24.       ScaleHeight     =   3675
  25.       ScaleWidth      =   5835
  26.       TabIndex        =   1
  27.       Top             =   720
  28.       Width           =   5895
  29.    End
  30.    Begin VB.CommandButton cmdDraw 
  31.       Caption         =   "Draw Chart of Two-Year College Enrollments"
  32.       Height          =   495
  33.       Left            =   960
  34.       TabIndex        =   0
  35.       Top             =   120
  36.       Width           =   4215
  37.    End
  38. Attribute VB_Name = "frm10_2_2"
  39. Attribute VB_GlobalNameSpace = False
  40. Attribute VB_Creatable = False
  41. Attribute VB_PredeclaredId = True
  42. Attribute VB_Exposed = False
  43. Dim numYears As Integer, maxEnroll As Single
  44. Private Sub cmdDraw_Click()
  45.   'Line Charts of Two-Year College Enrollments
  46.   numYears = 5
  47.   ReDim label(1 To numYears) As String, male(1 To numYears) As Single
  48.   ReDim female(1 To numYears) As Single, total(1 To numYears) As Single
  49.   Call ReadData(label(), male(), female(), total())
  50.   Call DrawAxes
  51.   Call DrawData(male(), female(), total())
  52.   Call ShowTitle
  53.   Call ShowLabels(label())
  54.   Call ShowLegend
  55. End Sub
  56. Private Sub DrawAxes()
  57.   'Draw axes
  58.   picEnroll.Scale (-1, 1.2 * maxEnroll)-(numYears + 1, -0.2 * maxEnroll)
  59.   picEnroll.Line (-1, 0)-(numYears + 1, 0)
  60.   picEnroll.Line (0, -0.1 * maxEnroll)-(0, 1.1 * maxEnroll)
  61. End Sub
  62. Private Sub DrawData(male() As Single, female() As Single, total() As Single)
  63.   Dim i As Integer
  64.   For i = 1 To numYears
  65.     If i < numYears Then
  66.         'Draw lines connecting data points
  67.         picEnroll.DrawStyle = 2
  68.         picEnroll.Line (i, male(i))-(i + 1, male(i + 1))
  69.         picEnroll.DrawStyle = 1
  70.         picEnroll.Line (i, female(i))-(i + 1, female(i + 1))
  71.         picEnroll.DrawStyle = 0
  72.         picEnroll.Line (i, total(i))-(i + 1, total(i + 1))
  73.     End If
  74.     'Draw small circles around data points
  75.     picEnroll.Circle (i, male(i)), 0.01 * numYears
  76.     picEnroll.Circle (i, female(i)), 0.01 * numYears
  77.     picEnroll.Circle (i, total(i)), 0.01 * numYears
  78.   Next i
  79. End Sub
  80. Private Sub Locate(x As Single, y As Single)
  81.   picEnroll.CurrentX = x
  82.   picEnroll.CurrentY = y
  83. End Sub
  84. Private Sub ReadData(label() As String, male() As Single, female() As Single, total() As Single)
  85.   Dim i As Integer
  86.   'Assume the data has been placed in the file "ENROLLMF.DAT"
  87.   'as Year, Male, Female
  88.   '(First line of file is "1960", 283, 170)
  89.   'Read data into arrays, find highest enrollment
  90.   Open App.Path & "\ENROLLMF.TXT" For Input As #1
  91.   maxEnroll = 0
  92.   For i = 1 To numYears
  93.     Input #1, label(i), male(i), female(i)
  94.     total(i) = male(i) + female(i)
  95.     If maxEnroll < total(i) Then
  96.         maxEnroll = total(i)
  97.     End If
  98.   Next i
  99.   Close #1
  100. End Sub
  101. Private Sub ShowLabels(label() As String)
  102.   Dim i As Integer, lbl As String, lblWid As Single
  103.   Dim lblHght As Single, tickFactor As Single
  104.   'Draw tick marks and label them
  105.   For i = 1 To numYears
  106.     lblWid = picEnroll.TextWidth(label(i))
  107.     tickFactor = 0.02 * maxEnroll
  108.     picEnroll.Line (i, -tickFactor)-(i, tickFactor)
  109.     Call Locate(i - lblWid / 2, -tickFactor)
  110.     picEnroll.Print label(i)
  111.   Next i
  112.   lbl = Str(maxEnroll)
  113.   lblWid = picEnroll.TextWidth(lbl)
  114.   lblHght = picEnroll.TextHeight(lbl)
  115.   tickFactor = 0.02 * numYears
  116.   picEnroll.Line (-tickFactor, maxEnroll)-(tickFactor, maxEnroll)
  117.   Call Locate(-tickFactor - lblWid, maxEnroll - lblHght / 2)
  118.   picEnroll.Print lbl
  119. End Sub
  120. Private Sub ShowLegend()
  121.   'Show legend
  122.   picEnroll.DrawStyle = 2
  123.   picEnroll.Line (0.1, 1.05 * maxEnroll)-(0.9, 1.05 * maxEnroll)
  124.   Call Locate(1, 1.1 * maxEnroll)
  125.   picEnroll.Print "Male"
  126.   picEnroll.DrawStyle = 1
  127.   picEnroll.Line (0.1, 0.95 * maxEnroll)-(0.9, 0.95 * maxEnroll)
  128.   Call Locate(1, maxEnroll)
  129.   picEnroll.Print "Female"
  130.   picEnroll.DrawStyle = 0
  131.   picEnroll.Line (0.1, 0.85 * maxEnroll)-(0.9, 0.85 * maxEnroll)
  132.   Call Locate(1, 0.9 * maxEnroll)
  133.   picEnroll.Print "Total"
  134. End Sub
  135. Private Sub ShowTitle()
  136.   'Display source and title
  137.   Call Locate(-0.5, -0.1 * maxEnroll)
  138.   picEnroll.Print "Source: Statistical Abstract of the United States"
  139.   Call Locate(0.5, 1.2 * maxEnroll)
  140.   picEnroll.Print "Two-Year College Enrollments (in thousands)"
  141. End Sub
  142.