Plot Data

Category: Plotting

Date: 03-28-2012

Return to Index


 
'Compilable Example:
#Compiler PBWin 9, PBWin 10
#Compile EXE
#Dim All
#Include "Win32API.inc"
%ID_Timer = 500 : %ID_Graphic = 501 : %ID_Data = 502
Global hDlg as DWord, D() As Long, MaxDataPoints as Long
 
Function PBMain () As Long
   MaxDataPoints = 25
   Dim D(MaxDataPoints) As Long
   Dialog New Pixels, 0, "Plot Routine",,, 300,375, %WS_OverlappedWindow Or %WS_ClipChildren To hDlg
   Control Add Label, hDlg, %ID_Data, "", 5,10,25,200, %WS_Border
   Control Add Graphic, hDlg, %ID_Graphic, "", 40,10,200,200, %WS_Border
   Graphic Attach hDlg, %ID_Graphic
   Dialog Show Modal hDlg, Call DlgProc
End Function
 
CallBack Function DlgProc() As Long
   Select Case CB.Msg
      Case %WM_InitDialog
         SetTimer(CB.Hndl, %ID_Timer, 200, ByVal %NULL)   'uses callback messages
      Case %WM_Timer
         GetSaveNewValue    'get new value and put int D() array
         PlotGridAndData    'plot grid and data
      Case %WM_Size
         Resize             'kill/create graphic control at new size
         PlotGridAndData    'redraw existing data
      Case %WM_Destroy
         KillTimer CB.Hndl, %ID_Timer
      Case %WM_Command
   End Select
End Function
 
Sub GetSaveNewValue
   Local NewValue as Long
   NewValue = Rnd(5,40)        'get new value (random value in this case)
   Array Delete D(1), NewValue 'put new value in array (shift all down, put NewValue at UBound)
End Sub
 
Sub PlotGridAndData
   Local i as Long, w as Long, h as Long, x as Long, y as Long, temp$, oldX as Long, oldY as Long
   Graphic Get Client to w,h
   Graphic Clear
   'plot grid
   For i = 1 to 9
      Graphic Line (w*i/10,0)-(w*i/10,h),%Blue  'vertical lines
      Graphic Line (0,h*i/10)-(w,h*i/10),%Green  'horizontal lines
   Next i
   'plot data
   For i = 1 to MaxDataPoints
      temp$ = temp$ + $crlf + Str$(D(i))
      x = i*w/MaxDataPoints  :  y =  h/2 - D(i)
      Graphic Ellipse (x-2,y-2)-(x+2,y+2), %Red, %Red    'data points
      If i > 1 Then Graphic Line (oldx,oldy)-(x,y), %Black   'keeps diagram clean
      oldx = x : oldy = y      'save for drawing lines
   Next i
   Graphic Redraw
   'show data in label
   temp$ = Mid$(temp$, 3)
   Control Set Text hDlg, %ID_Data, temp$
End Sub
 
Sub Resize
   Local w As Long, h As Long
   Dialog Get Client hDlg To w,h
   Control Kill hDlg, %ID_Graphic
   Control Add Graphic, hDlg, %ID_Graphic, "", 40,10,w-50,h-20, %WS_Border
   Graphic Attach hDlg, %ID_Graphic
   Control Set Size hDlg, %ID_Data, 25, h-20
End Sub
 
'gbs_00484
'Date: 03-10-2012


created by gbSnippets
http://www.garybeene.com/sw/gbsnippets.htm