大家好,我是晓凡。
写在前面
这是PB案例学习笔记系列文章的第17篇,该系列文章适合具有一定PB基础的读者。
通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。
文章中设计到的源码,小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.git
需要源代码的小伙伴们可以自行下载查看,后续文章涉及到的案例代码也都会提交到这个仓库【pb-project-example】
如果对小伙伴有所帮助,希望能给一个小星星⭐支持一下小凡。
一、小目标
本次案例我们将制作一个颜色对话框。
运行程序后点击相应按钮会弹出一个颜色选择对话框,通过鼠标选择好颜色之后,单击确定可以修改控件相关颜色。
最终效果如下所示
通过案例我们需要学会使用comdlg32.dll
动态库中的ChooseColorA
函数来实现颜色对话框
二、创建程序基本框架
① 新建examplework
工作区
② 新建exampleapp
应用
以上步骤忘记怎么操作的小伙伴可以翻一翻该系列文章的第一篇回忆一下
三、创建nvo_choosecolor
类用户对象
① 添加Custom Class
类用户对象,勾选General
选项上的AutoInstatiate
复选框
② 单击菜单栏上的Insert-->Structure
命令,并根据下面表格建立结构os_choosecolor
变量类型 | 变量名称 |
---|---|
Long | Istructsize |
Unsignedlong | Hwndowner |
Unsignedlong | Hinstance |
Long | Regresult |
Long | Lpcustcolors |
Long | Flags |
Long | Lcustdata |
Long | Lpfnhook |
Long | Lptemplatename |
③ 在类用户对象Declare Instance Variables
选项卡中定义如下实例变量
Private:
os_ChooseColor istr_ChooseColor
long il_CustomInitColors[16]
blob{64} ibl_CustomColors
④ 添加外部动态库引用
在Declare Local External Functions
选项卡中添加如下函数定义
function boolean ChooseColorA( REF os_ChooseColor lpcc ) library "comdlg32.dll"
⑤ 添加of_choosecolor(ref long al_rgbreslut) return boolean
函数
// 定义一个布尔型变量lb_ok用于存储选择颜色对话框的返回结果
boolean lb_ok
// 将istr_ChooseColor结构体中的rgbresult字段赋值给al_rgbresult
istr_ChooseColor.rgbresult = al_rgbresult
// 调用ChooseColorA函数打开颜色选择对话框,istr_choosecolor为传入的参数
lb_ok = ChooseColorA(istr_choosecolor)
// 将用户选择的颜色存储到al_rgbresult中
al_rgbresult = istr_ChooseColor.rgbresult
// 返回选择颜色对话框的结果
return lb_ok
⑥ 将类用户对象保存为nvo_choosecolor
四、新建w_main
窗口
① 新建w_main
窗口
将窗口Title
设置为通过颜色对话框设置颜色
② 创建控件
在w_main
窗口中增加3个CommandButton
按钮控件、1个SingleLineEdit
1个StaticText
-
cb_1
,设置其Text
值为:设置窗口背景颜色 -
cb_2
,设置其Text
值为:设置输入框背景颜色 -
cb_3
,设置其Text
值为:设置输入框内文字颜色 -
cb_4
,设置其Text
值为:设置静态文本字体颜色 -
sle_1
,设置其Text
值为:个人博客:www.xiezhrspace.cn -
st_1
,设置其Text
值为:公众号:XiezhrSpace
③ 保存窗口为w_main
五、编写事件代码
① 在按钮cb_1
的Clicked
事件中添加如下代码
nvo_choosecolor luo_choosecolor
long ll_color
boolean lb_rc
IF luo_choosecolor.of_choosecolor(ll_color) THEN
parent.BackColor = ll_color
ELSE
messagebox("提示","取消操作")
END IF
② 在按钮cb_2
的Clicked
事件中添加如下代码
nvo_choosecolor luo_choosecolor
long ll_color
boolean lb_rc
IF luo_choosecolor.of_choosecolor(ll_color) THEN
parent.sle_1.backcolor = ll_color
ELSE
messagebox("提示","取消操作")
END IF
③ 在按钮cb_3
的Clicked
事件中添加如下代码
nvo_choosecolor luo_choosecolor
long ll_color
boolean lb_rc
IF luo_choosecolor.of_choosecolor(ll_color) THEN
parent.sle_1.textcolor = ll_color
ELSE
messagebox("提示","取消操作")
END IF
④在按钮cb_4
的Clicked
事件中添加如下代码
nvo_choosecolor luo_choosecolor
long ll_color
boolean lb_rc
IF luo_choosecolor.of_choosecolor(ll_color) THEN
parent.st_1.textcolor = ll_color
ELSE
messagebox("提示","取消操作")
END IF
⑤ 双击开发界面左边的System Tree
中的exampleapp
应用对象,在其Open
事件中添加如下代码
open(w_main)
六、运行程序
上面代码都敲完之后,我们来检验下我们的劳动成果
本期内容到这儿就结束了,希望对您有所帮助。★,°:.☆( ̄▽ ̄)/$:.°★ 。
我们下期再见 ヾ(•ω•`)o (●’◡’●)