本項研究旨在介紹一種由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,也支持PNGJPGGIF等圖片文件的讀入,並且修改了時間控制函數,使得對系統時間的獲取精確到了微秒級別。

為了防止屏閃現象的發生(新繪製的圖形覆蓋掉之前繪製的圖形或背景,或者需要重新刷新背景),程序員需要使用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