top
Loading...
用VB實現數字波形顯示程序
天極IT資訊短信服務 電腦小技巧
資費:包月5元
手機:
介紹:細處著手,巧處用功。高手和菜鳥之間的差別就是:高手什么都知道,菜鳥知道一些。電腦小技巧收集最新奇招高招,讓你輕松踏上高手之路。


摘 要:本文詳細介紹了在VB集成環境下數字波形高速顯示的方法,同時對雙通道波形顯示和數字濾波方法也進行了介紹。

關鍵詞:數字;波形;顯示 ;濾波

1 前言:

隨著計算機技術及電子技術的發展,數字采集技術在檢測領域的應用越來越廣泛,檢測速度越來越高,檢測的數據量越來越大,特別是在無損檢測領域,將檢測數據通過計算機處理后繪制出波形,并實時顯示,對及時發現傷損、分析傷損具有重要意義。

2 波形顯示

檢測數據通常是離散的數據,將離散的數據繪制出波形,可通過在兩點間連接線段的方法實現。

2.1 用Line方法顯示波形

VB提供了Line畫直線方法,可在窗體上增加一個圖片框控件,適當設置圖片的大小和背景顏色,用Line方法將離散數據按檢測順序連接成線段,即可將波形顯示在圖片框中。但該方法顯示波形速度較慢,不適合高速顯示的應用。

2.2 Windows API函數顯示波形

在VB中兩點間連線的另一種方法是用Windows API函數,Win32 API提供了以下兩個函數,聯合使用可實現波形的快速顯示,經過測試,顯示速度比使用Line方法快70%以上。

LineTo函數:

函數功能:畫出由數組定義的點連接的一系列線段。

函數原型:BOOL LineTo(HDC hdc,int nXEnd,int nYEnd);

參數:

hdc:設備環境句柄。

nXEnd:定義線段終點的X坐標。

nYEnd:定義線段終點的Y坐標。

返回值:若函數調用成功,則返回非0值;若函數調用失敗,則返回值為0。

MoveToEx函數:

函數功能:將當前位置更新為指定的點,并有選擇的返回原先的位置。

函數原型:BOOL MoveToEx (HDC hdc,int X,int Y,LPPOINT lpPoint);

參數:

hdc:設備環境句柄。

X:定義新位置的X坐標(邏輯坐標)。

Y:定義新位置的Y坐標(邏輯坐標)。

lpPoint:指向一個POINT結構,結構中存放原先的位置。若此參數為NULL,則不返回原先的位置

返回值:若函數調用成功,則返回非0值;若函數調用失敗,則返回值為0。

在連接線段時,首先將檢測數據放入一個數組中,用MoveToEx函數定位畫線的起始點坐標,然后用LineTo函數畫出起始點至下一個點之間的線段,再用MoveToEx將畫線的起始點定位到下一個點,繼續用LineTo函數畫線,如此循環,即可將離散點連接成波形。

例:

zz = MoveToEx(Picture1.hdc, i, Mwave(i ), LpPoint1)
zz = LineTo(Picture1.hdc, i, Mwave(i+1))

其中:Picture1是顯示波形的圖片框。

Mwave是存儲檢測波形的數組。

LpPoint1可按如下方式定義為自定義類型,用于返回起始點坐標。

Type POINTAPI
X As Long
Y As Long
End Type
Public LpPoint1 As POINTAPI

2.3 在VB中聲明Windows API函數

用Windows API函數可以實現波形的快速顯示,但在使用Windows API函數之前,需在VB中對要使用的API函數用Declare語句聲明。聲明形式主要有兩種:如果該API有返回值,應將其聲明為Function函數;如果該API沒有返回值,可將其聲明為Sub函數。聲明形式如下:

Declare Function apiname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type][,[ByVal] variable [as type]]…])] as Type;
Declare Sub apiname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type][,[ByVal] variable [as type]]…])];

其中:Function和Sub用來指定要調用的DLL API函數類型,Lib用來指明DLL文件的路徑。如果要調用的API函數使用字符串,必須用Alias指定正確的字符集:ANSI或Unicode;ByVal用于指明參數的傳遞為值傳遞,不加ByVal為地址傳遞;variable 為變量名稱;type為變量類型。

在函數的聲明和應用時,變量個數應和函數原型相同,類型一致,一一對應。

下面給出了LineTo和MoveToEx兩個DLL API函數聲明的實例,使用時將以下語句放到標準模塊的通用聲明部分,即可在程序的任何地方調用。

Public Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, lpPoint As POINTAPI) As Long

如果只想在單一模塊中調用DLL API,可將Declare前面的Public改成Private,同時將該聲明語句放到調用該函數模塊的通用聲明部分。

經過聲明之后的Windows API函數,VB可以象使用自身函數一樣來使用。
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗