Display單元庫
本項研究旨在介紹一種由ax_pokl新編寫的名為Display單元庫的方法。
Display單元庫(Display Unit)是由ax_pokl使用Pascal程序語言編寫的程序代碼,用來幫助一些學習Pascal語言的初學者能夠使用Free Pascal編譯器在Windows作業系統中快速開發窗體程序和遊戲。Display單元庫借鑑了Graph和Crt單元庫的功能並添加了一些新的功能。
2012年,ax_pokl發現Pascal初學者由於學校的壓力被迫學習過多算法,降低了初學者們對編程的興趣。同時也因此無法對Pascal語言本身進行透徹的理解,失去了開發窗體程序和遊戲的能力。
為了提高初學者們對計算機編程的興趣,ax_pokl決定創建一個單元庫。在單元庫中含有簡單的創建窗口和繪圖的方法,使得初學者們可以很快上手編寫窗體程序和遊戲。
起初,單元庫只實現了Graph和Crt庫中的一少部分功能,如創建窗口,繪製圖形,延遲時間,發出指定頻率聲響,鼠標按鍵和鍵盤輸入等。ax_pokl發現,使用Graph單元庫創建窗口的過程十分繁瑣。為了簡化過程,他重新對Windows API進行了封裝,使得初學者通過簡單的方式就可以創建窗口。
進一步的,為了省卻繁瑣的參數列表,ax_pokl對大量函數進行了重載以適應各種不同的需求。
隨後,ax_pokl又增加了位圖繪製,文字輸出,消息控制,播放音頻文件等功能,這些功能使得編寫的窗體遊戲變得更加的生動有趣。同時,ax_pokl也注重一些其它功能,例如字符串的轉換和大數計算,對文件進行塊狀讀取操作,以及線程的創建等。最新版本的Display單元庫還增加了窗體繪圖函數映射和FPS幀率控制等功能,經過改進的Display不僅支持BMP,也支持PNG,JPG,GIF等圖片文件的讀入,並且修改了時間控制函數,使得對系統時間的獲取精確到了微秒級別。
為了防止屏閃現象的發生(新繪製的圖形覆蓋掉之前繪製的圖形或背景,或者需要重新刷新背景),程式設計師需要使用Freshwin();函數將緩存中的位圖繪製到屏幕。由於Display單元庫已將窗口建立的過程放入了一個線程中,因此程式設計師不再需要使用IsNextMsg函數防止窗口失去響應,對幀率的控制也可以更加的精確了。除此之外,程式設計師還可以通過{APPTYPE GUI}編譯指令防止控制台的創建。
目前Display單元庫已經可以導出為dll文件了,使用C語言編寫代碼的程式設計師也可以使用Display單元庫了。
- 支持各種字符串,字符數組,整型變量的轉換。
- 支持ansistring作為無限長度整型變量進行算術,邏輯,按位運算。
- 支持任意大小窗口創建。可使用24位RGB真彩色進行繪圖。
- 支持字符串文本輸出。可更改字體大小,顏色,粗細等。
- 支持簡單繪圖。如:畫點,畫線,畫矩形,畫橢圓等。
- 支持文件拖拽以及鍵盤,鼠標事件的獲取和發送。
- 支持任意類型圖片讀取;可以剪切,拉伸及繪製到屏幕。
- 支持各種類型音頻文件播放。可控制音量及快進快退。可同時播放多個音頻文件。
- 支持文件內容快速塊狀讀取。可讀取各種不同類型的內容。
| 名稱 | 類別 | 功能 |
|---|---|---|
| arcsin | 內聯函數 | 求反正弦 |
| arccos | 內聯函數 | 求反餘弦 |
| max | 內聯函數 | 求最大值 |
| min | 內聯函數 | 求最小值 |
| i2s | 字符串轉換函數 | 整型轉十進制字符串 |
| s2pc | 字符串轉換函數 | 十進制字符串串轉字符數組指針 |
| s2i | 字符串轉換函數 | 十進制字符串轉整型 |
| as2s | 字符串轉換函數 | 字節進制字符串轉十進制字符串 |
| s2as | 字符串轉換函數 | 十進制字符串轉字節進制字符串 |
| as2pc | 字符串轉換函數 | 字節進制字符串轉字符數組指針 |
| pc2as | 字符串轉換函數 | 字符數組指針轉字節進制字符串 |
| i2as | 字符串轉換函數 | 整型轉字節進制字符串 |
| as2i | 字符串轉換函數 | 字節進制字符串轉字節 |
| i2hc | 字符串轉換函數 | 字節轉十六進制字符 |
| hc2i | 字符串轉換函數 | 十六進制字符轉字節 |
| i2hs | 字符串轉換函數 | 整型轉十六進制字符串 |
| hs2i | 字符串轉換函數 | 十六進制字符串轉字節 |
| as2hs | 字符串轉換函數 | 字節進制字符串轉十六進制字符串 |
| hs2as | 字符串轉換函數 | 十六進制字符串轉字節進制字符串 |
| asrev | 字節字符串運算函數 | 倒轉字節進制字符串 |
| aslong | 字節字符串運算函數 | 填充字節進制字符串開頭#0 |
| asshort | 字節字符串運算函數 | 刪除字節進制字符串開頭#0 |
| assame | 字節字符串運算函數 | 填充雙字節進制字符串開頭#0 |
| asadd | 字節字符串運算函數 | 字節進制字符串算術加法 |
| assub | 字節字符串運算函數 | 字節進制字符串算術減法 |
| asmul | 字節字符串運算函數 | 字節進制字符串算術乘法 |
| asdiv | 字節字符串運算函數 | 字節進制字符串算術除法 |
| asmod | 字節字符串運算函數 | 字節進制字符串算術取模 |
| asinc | 字節字符串運算函數 | 字節進制字符串算術增加 |
| asdec | 字節字符串運算函數 | 字節進制字符串算術減少 |
| asequ | 字節字符串運算函數 | 字節進制字符串邏輯相等 |
| asneq | 字節字符串運算函數 | 字節進制字符串邏輯不等 |
| aslss | 字節字符串運算函數 | 字節進制字符串邏輯小於 |
| asgtr | 字節字符串運算函數 | 字節進制字符串邏輯大於 |
| asleq | 字節字符串運算函數 | 字節進制字符串邏輯小於等於 |
| asgeq | 字節字符串運算函數 | 字節進制字符串邏輯大於等於 |
| asnot | 字節字符串運算函數 | 字節進制字符串按位取反 |
| asand | 字節字符串運算函數 | 字節進制字符串按位與 |
| asor | 字節字符串運算函數 | 字節進制字符串按位或 |
| asxor | 字節字符串運算函數 | 字節進制字符串按位異或 |
| asshl | 字節字符串運算函數 | 字節進制字符串按位左移 |
| asrol | 字節字符串運算函數 | 字節進制字符串按位循環左移 |
| asshr | 字節字符串運算函數 | 字節進制字符串按位右移 |
| asror | 字節字符串運算函數 | 字節進制字符串按位循環右移 |
| NewThread | 控制函數 | 新線程 |
| MsgBox | 控制函數 | 彈出窗口 |
| Sound | 控制函數 | 揚聲器發音 |
| Delay | 控制函數 | 等待時間 |
| FreshFPS | 控制函數 | 刷新刷新率 |
| GetFPSL | 控制函數 | 獲取平均刷新率 |
| GetFPSR | 控制函數 | 獲取瞬時刷新率 |
| GetFPS | 控制函數 | 獲取瞬時刷新率 |
| GetError | 控制函數 | 獲取錯誤代碼 |
| CreateWin | 窗口屏幕函數 | 顯示窗口 |
| FreshWin | 窗口屏幕函數 | 刷新窗口 |
| CloseWin | 窗口屏幕函數 | 關閉窗口 |
| IsWin | 窗口屏幕函數 | 判斷窗口狀態 |
| SetTitle | 窗口屏幕函數 | 設置窗口標題 |
| GetTitle | 窗口屏幕函數 | 獲取窗口標題 |
| GetTime | 窗口屏幕函數 | 獲取窗口建立時間 |
| GetWidth | 窗口屏幕函數 | 獲取窗口寬度 |
| GetHeight | 窗口屏幕函數 | 獲取窗口高度 |
| GetSize | 窗口屏幕函數 | 獲取窗口大小 |
| GetPosX | 窗口屏幕函數 | 獲取窗口橫坐標 |
| GetPosY | 窗口屏幕函數 | 獲取窗口縱坐標 |
| GetBorderTitle | 窗口屏幕函數 | 獲取窗口邊標題框高度 |
| GetBorderWidth | 窗口屏幕函數 | 獲取窗口邊框寬度 |
| GetBorderHeight | 窗口屏幕函數 | 獲取窗口邊框高度 |
| GetBorderSize | 窗口屏幕函數 | 獲取窗口邊框大小 |
| GetHwnd | 窗口屏幕函數 | 獲取窗口窗口句柄 |
| GetDraw | 窗口屏幕函數 | 獲取窗口繪圖句柄 |
| GetBGColor | 窗口屏幕函數 | 獲取窗口背景顏色 |
| SetBGColor | 窗口屏幕函數 | 設置窗口背景顏色 |
| GetFGColor | 窗口屏幕函數 | 獲取窗口前景顏色 |
| SetFGColor | 窗口屏幕函數 | 設置窗口前景顏色 |
| GetScrWidth | 窗口屏幕函數 | 獲取屏幕寬度 |
| GetScrHeight | 窗口屏幕函數 | 獲取屏幕高度 |
| GetScrSize | 窗口屏幕函數 | 獲取屏幕大小 |
| SetFont | 字體文本函數 | 將字體選入位圖 |
| SetFontWidth | 字體文本函數 | 設置字體寬度 |
| SetFontHeight | 字體文本函數 | 設置字體長度 |
| SetFontSize | 字體文本函數 | 設置字體大小 |
| SetFontWeight | 字體文本函數 | 設置字體粗體 |
| SetFontLtalic | 字體文本函數 | 設置字體斜體 |
| SetFontUnderLine | 字體文本函數 | 設置字體下劃線 |
| SetFontStrikeOut | 字體文本函數 | 設置字體刪除線 |
| SetFontCharSet | 字體文本函數 | 設置字體字符集 |
| SetFontName | 字體文本函數 | 設置字體名稱 |
| GetStringSize | 字體文本函數 | 獲取文本大小 |
| GetStringWidth | 字體文本函數 | 獲取文本寬度 |
| GetStringHeight | 字體文本函數 | 獲取文本高度 |
| DrawText | 字體文本函數 | 輸出文本活動寬度 |
| DrawTextln | 字體文本函數 | 輸出文本行活動寬度 |
| DrawTextw | 字體文本函數 | 輸出文本固定寬度 |
| DrawTextlnw | 字體文本函數 | 輸出文本行固定寬度 |
| GetPixel | 繪圖函數 | 獲取點 |
| SetPixel | 繪圖函數 | 設置點 |
| Line | 繪圖函數 | 畫線 |
| Bar | 繪圖函數 | 畫矩形 |
| Ellipse | 繪圖函數 | 畫橢圓 |
| Circle | 繪圖函數 | 畫圓 |
| Clear | 繪圖函數 | 清屏 |
| CreateBMP | 位圖函數 | 創建位圖 |
| LoadBMP | 位圖函數 | 讀取位圖 |
| DrawBMP | 位圖函數 | 繪製位圖 |
| CopyBMP | 位圖函數 | 複製位圖 |
| ReleaseBMP | 位圖函數 | 釋放位圖 |
| PreesKey | 鼠標鍵盤函數 | 按下鍵盤按鍵 |
| DownKey | 鼠標鍵盤函數 | 按住鍵盤按鍵 |
| UpKey | 鼠標鍵盤函數 | 彈起鍵盤按鍵 |
| PreesMouse | 鼠標鍵盤函數 | 按下鼠標按鍵 |
| DownMouse | 鼠標鍵盤函數 | 按住鼠標按鍵 |
| UpMouse | 鼠標鍵盤函數 | 彈起鼠標按鍵 |
| WheelMouse | 鼠標鍵盤函數 | 滾動鼠標滾輪 |
| MoveMouse | 鼠標鍵盤函數 | 移動鼠標相對 |
| MoveMouseAbs | 鼠標鍵盤函數 | 移動鼠標絕對 |
| MoveMouseWin | 鼠標鍵盤函數 | 移動鼠標窗口 |
| MoveMousePos | 鼠標鍵盤函數 | 移動鼠標繪圖 |
| SendMsg | 消息函數 | 發送消息給窗口 |
| NextMsg | 消息函數 | 取新消息 |
| IsNextMsg | 消息函數 | 嘗試取新消息 |
| IsMsg | 消息函數 | 判斷某條消息 |
| GetMsg | 消息函數 | 獲取某條消息 |
| WaitMsg | 消息函數 | 等待某條消息 |
| IsKey | 消息函數 | 判斷鍵盤按鍵 |
| GetKey | 消息函數 | 獲取鍵盤按鍵 |
| WaitKey | 消息函數 | 等待鍵盤按鍵 |
| IsMouse | 消息函數 | 判斷鼠標按鍵 |
| GetMouse | 消息函數 | 獲取鼠標按鍵 |
| WaitMouse | 消息函數 | 等待鼠標按鍵 |
| IsMouseWheel | 消息函數 | 判斷鼠標滾輪按鍵 |
| WaitMouseWheel | 消息函數 | 等待鼠標滾輪按鍵 |
| IsMouseMove | 消息函數 | 判斷鼠標移動 |
| GetMouseMove | 消息函數 | 獲取鼠標移動 |
| WaitMouseMove | 消息函數 | 等待鼠標移動 |
| IsDropFile | 消息函數 | 判斷拖拽文件 |
| WaitDropFile | 消息函數 | 等待拖拽文件 |
| GetDropFile | 消息函數 | 獲取拖拽文件 |
| Y | 消息函數 | 獲取鼠標絕對位置 |
| Y | 消息函數 | 獲取鼠標窗口位置 |
| Y | 消息函數 | 獲取鼠標繪圖位置 |
| LoadAudio | 音頻函數 | 讀取音頻 |
| PlayAudio | 音頻函數 | 開始播放 |
| StopAudio | 音頻函數 | 停止播放 |
| PauseAudio | 音頻函數 | 暫停播放 |
| ResumeAudio | 音頻函數 | 繼續播放 |
| GetAudioVol | 音頻函數 | 獲取音量 |
| SetAudioVol | 音頻函數 | 設置音量 |
| GetAudioPos | 音頻函數 | 獲取位置 |
| SetAudioPos | 音頻函數 | 設置位置 |
| GetAudioLen | 音頻函數 | 獲取長度 |
| IsFile | 文件函數 | 判斷文件存在 |
| NewFile | 文件函數 | 創建文件 |
| NewDir | 文件函數 | 創建文件夾 |
| CopyFile | 文件函數 | 複製文件 |
| MoveFile | 文件函數 | 移動文件 |
| DeleteFile | 文件函數 | 刪除文件 |
| OpenFile | 文件函數 | 打開文件 |
| CloseFile | 文件函數 | 關閉文件 |
| GetFileLen | 文件函數 | 獲取文件長度 |
| GetFilePos | 文件函數 | 獲取文件位置 |
| SetFilePos | 文件函數 | 設置文件位置 |
| GetByte | 文件函數 | 讀取字節 |
| GetWord | 文件函數 | 讀取字 |
| GetLongword | 文件函數 | 讀取雙字 |
| GetWord64 | 文件函數 | 讀取四字 |
| GetWord128 | 文件函數 | 讀取八字 |
| GetWord256 | 文件函數 | 讀取十六字 |
| GetInteger | 文件函數 | 讀取不定長整數 |
| GetPchar | 文件函數 | 讀取字符數組 |
| GetString | 文件函數 | 讀取字節字符串 |
| 參數 | 說明 | 類型 | 說明 |
|---|---|---|---|
| x | 左坐標 | longword | |
| y | 上坐標 | longword | |
| w | 寬度 | longword | |
| h | 高度 | longword | |
| c | 顏色 | longword | AGBR(透明+藍綠紅) |
| cbg | 背景顏色 | longword | 畫刷顏色 |
| cfg | 前景顏色 | longword | 畫筆顏色 |
| pos | 位置 | longword | x*$10000+y |
| r | 半徑 | longword | |
| a | 弧度 | real | real=word/360*2*pi |
| s | 字符串 | ansistring | pchar=@s[1] |
| k | 鍵盤按鍵 | byte | 詳見key.inc |
| m | 鼠標按鍵 | byte | 詳見key.inc |
| t | 時間 | real | real=longword/1000 |
| hz | 頻率 | longword | |
| b | 位圖 | pbitmap | 詳見type |
| v | 音量 | longword | 0到1000 |
| i | 整數 | longword或其它 | 可能是數組 |
| as | 字符串 | ansistring | |
| c | 字符 | char | |
| pc | 字符指針 | pchar | ^char[] |
| th | 線程號碼 | longword | |
| id | 音頻號碼 | longword |