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 |