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}編譯指令防止控制台的創建。
功能簡介
編輯函數和過程列表
編輯名稱 | 類別 | 功能 |
---|---|---|
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 |