本项研究旨在介绍一种由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