2008-04-28

VB ~ 每秒抓 BUFF 的資料做曲線圖


問題:


我想用 TIMER 每秒抓 BUFF 資料五百筆來畫出曲線圖 (像心電圖一樣讓曲線一直往左移動),
時間為 X 軸,收到的資料為 Y 軸,請問要怎麼做才能讓曲線向左移動?


回答:

一般的作法就是在 PictureBox 裡面再用 PictureBox,外面的 PictureBox 當作固定的顯示範圍,就好比是儀器的顯示幕,而裡面的 PictureBox 才是繪圖板,這樣你就可以控制內部 PictureBox 的位置 (PictureBox.Left) 來作左移的效果。

內 部 PictureBox 的寬度是考量的重點,必須配合 Timer 的時間間隔、三分鐘的資料以及 X 軸的單位長度來設定。譬如說每秒抓 500 點的資料,三分鐘就有 90,000 點資料,但是 PictureBox.Width 好像不能設得這麼大,顯然用一個 PictureBox 是不夠儲存三分鐘的資料。所以如果一個 PictureBox 儲存 30,000 點資料,就需要三個 PictureBox,也就是說用三個 PictureBox 左右頭尾相接來畫三分鐘的資料。

接著要讓曲線可以自動向左移動,以前面的例子來說,就是在 Timer 的事件中移動這三個 PictureBox,每秒各移動 500 點。另外你必須用一個水平捲軸來控制使用者的捲動,但是這裡你會發現一個問題,如果某一時間三分鐘的資料頭在第一個 PictureBox 的第一點,而資料尾在第三個 PictureBox 的最後一點,那麼下一秒必須捨棄第一個 PictureBox 的前 500 點,然後把最新的 500 點資料畫在最右側,但是第三個 PictureBox 已經畫滿了,而第一個 PictureBox 仍然必須保留在最左側以備查看,所以事實上需要用第四個 PictureBox 來處理這個狀況。在第一個 PictureBox 的資料完全被捨棄後,就要把它調到最右側變成第四個來承接新進的資料。

基本上就是用這樣的方式來循環控制,僅提供你程式寫作的方法,我想程式本身還是要靠自己去寫去試,這樣將來你才有能力知道如何去調整加強它的功能。

沒有留言: