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 |