新聞| | PChome| 登入
2007-06-10 16:43:38 | 人氣97| 回應0 | 上一篇 | 下一篇
推薦 0 收藏 0 轉貼0 訂閱站台

自製堆疊圖資料庫與統計圖表

 

'資料庫與統計圖表之應用
'利用圖表物件編修自製堆疊圖表
'利用 Line (x1,y1)-(x2,y2),color,bf可繪出實心填滿色彩之矩形
'利用 Shape控制項亦可繪製實心填滿色彩之矩形
'讀入資料->計算相對長度->推算座標->繪製

 

 




Private Sub Combo1_Click()
Set MC = myChart
Call ReadData
Select Case Combo1.ListIndex
Case 10
    MC.chartType = VtChChartType2dPie

Case 11
    MC.chartType = VtChChartType2dXY

Case 12
    MC.Visible = False
    Call DrawStack

Case Else
    MC.chartType = Combo1.ListIndex
   
End Select
    MC.Refresh
End Sub

Private Sub DrawStack()
Set MC = myChart
Set AD = myData

Row = AD.Recordset.Fields.Count                  '欄位數量,對映圖表的列數(RowCount)
Col = AD.Recordset.RecordCount                   '記錄筆數,對映圖表的行數(ColumeCount)
MC.RowCount = Row
MC.columnCount = Col
dx = (Shape1.Width - 200) / (Row + 1)            '間距=全寬/列數
bar_w = dx \ 5                                   '圖棒寬
TotBar = Row * Col                               '圖棒總數

maxvalue = FindMaxValue                          '找每季累計最大值
h_Unit = (Shape1.Height - 500) / maxvalue        '行高基本單位
lastTop = Shape1.Height - 400                    '扣除邊框距離
lastLeft = Shape1.Left                           '預設左邊界
AD.Recordset.MoveFirst
k = 1
For i = 1 To Row
    row_x = lastLeft + dx                        '第i列的x座標
    bar_w = dx \ 5                               '棒寬
   
    For j = 1 To Col
        v = AD.Recordset.Fields(i - 1).Value     '取得第0欄資料
        bar_h = v * h_Unit
        Load bar(k)
        bar(k).Left = row_x
        bar(k).Top = lastTop - bar_h
        bar(k).Width = bar_w
        bar(k).Height = bar_h
        bar(k).FillStyle = 0
        bar(k).FillColor = RGB(j / Col * 255, j / Col * 160, j / Col * 60)
        bar(k).Visible = True
        k = k + 1
        lastTop = lastTop - bar_h               '目前棒高暫存
        AD.Recordset.MoveNext
    Next
    Load lblRow(i)
    lblRow(i) = AD.Recordset.Fields(i - 1).Name
    lblRow(i).Left = row_x - 125
    lblRow(i).Top = Line1.Y1 + 100
    lblRow(i).Visible = True
   
    lastTop = Shape1.Height - 400
    lastLeft = lastLeft + dx
    AD.Recordset.MoveFirst
Next


End Sub
Private Function FindMaxValue() As Integer
Set MC = myChart
Set AD = myData
   
Row = AD.Recordset.Fields.Count             '欄位數量,對映圖表的列數(RowCount)
Col = AD.Recordset.RecordCount              '記錄筆數,對映圖表的行數(ColumeCount)
Max = 0
Sum = 0
AD.Recordset.MoveFirst
For i = 1 To Row
    For j = 1 To Col
        v = AD.Recordset.Fields(i - 1).Value
        Sum = Sum + v
        AD.Recordset.MoveNext
    Next
    If Sum >= Max Then Max = Sum
    AD.Recordset.MoveFirst
    Sum = 0
Next
FindMaxValue = Max

End Function
Private Sub Command1_Click()
Set MC = myChart
Call ReadData
MC.Refresh
End Sub

Private Sub Form_Load()
Call initCombo
myChart.chartType = VtChChartType2dCombination
lblRow(0).Visible = False
bar(0).Visible = False
Call ReadData
End Sub


Private Sub ReadData()
Dim Row, Col As Integer
Set MC = myChart
Set AD = myData
Row = AD.Recordset.Fields.Count         '欄位數量,對映圖表的列數(RowCount)
Col = AD.Recordset.RecordCount          '記錄筆數,對映圖表的行數(ColumeCount)
MC.RowCount = Row
MC.columnCount = Col
AD.Recordset.MoveFirst
For i = 1 To Row
    For j = 1 To Col
        MC.Row = i
        MC.Column = j
        MC.Data = AD.Recordset.Fields(i - 1).Value
        AD.Recordset.MoveNext
    Next
   
    AD.Recordset.MoveFirst
    MC.RowLabel = AD.Recordset.Fields(i - 1).Name   '取得列名稱(資料欄位名稱)
Next

End Sub
Private Sub initCombo()
Combo1.AddItem "0:3dBar", 0
Combo1.AddItem "1:2dBar", 1
Combo1.AddItem "2:3dLine", 2
Combo1.AddItem "3:2dLine", 3
Combo1.AddItem "4:3dArea", 4
Combo1.AddItem "5:2dArea", 5
Combo1.AddItem "6:2dStep", 6
Combo1.AddItem "7:2dStep", 7
Combo1.AddItem "8:3dCombination", 8
Combo1.AddItem "9:2dCombination", 9
Combo1.AddItem "14:2dPie", 10
Combo1.AddItem "16:2dXY", 11
Combo1.AddItem "18:自製堆疊圖", 12

End Sub

 

台長: Kenny
人氣(97) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 教育學習(進修、留學、學術研究、教育概況) | 個人分類: 程式設計 |
此分類下一篇:如何製作圖片之鏡射效果
此分類上一篇:如何將VB應用程式發佈到網站

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文