ExDUI -SVG图片框代码
<火山程序 类型 = "通常" 版本 = 1 />类 _组件_svg代码图片框 <公开 基础类 = 动态图片框 折叠
@视窗.窗口组件 = "icon=\"@55\"\r\ndefault_size = \"120, 100\"\r\ncategory = \"DIY组件\"">
{
变量 _SVG代码 <公开 类型 = 文本型 @属性变量 = 真>
变量 _创建图片后销毁svg <公开 类型 = 逻辑型 @属性变量 = 真>
变量 _svg句柄 <公开 类型 = 整数>
变量 _pic句柄 <公开 类型 = 整数>
变量 _SVG字节集 <公开 类型 = 字节集类 @属性变量 = 真>
方法 类_清理
{
_销毁资源 ()
}
方法 _初始化svg <公开>
{
_pic句柄 = _SVG_代码转图片句柄 (_SVG代码, 本对象.宽度, 本对象.高度, _svg句柄, _创建图片后销毁svg)
本对象.置图片 (_pic句柄)
调试输出 (_pic句柄, "SVG句柄")
}
方法 _销毁资源 <公开 折叠>
{
_SVG字节集.清空字节集 ()
SVG_销毁 (_svg句柄)
图片_销毁 (_pic句柄)
调试输出 (_pic句柄, "SVG销毁资源")
}
#
方法 _组件_svg代码图片框_组件创建完毕 <接收事件 类型 = 整数 注释 = "当组件被创建完毕后发送此事件" 折叠>
参数 来源对象 <类型 = _组件_svg代码图片框 注释 = "提供事件产生的具体来源对象">
参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
参数 父组件 <类型 = 窗口组件 注释 = "提供组件所处的父组件,必定有效且已经成功创建."
注释 = "可以使用\"属于\"操作符判断具体的父组件数据类型,如: \"如果 (父组件 属于 窗口容器组件)\","
注释 = "\"如果 (父组件 属于 图片框)\" 等. 判断清楚具体数据类型后,可以使用强制转换将其转换到具体的" 注释 = "窗口组件类对象,如: \"(窗口容器组件)父组件\"">
参数 组件ID <类型 = 整数 注释 = "提供组件在所处父组件中的ID值">
{
_初始化svg ()
返回 (0)
}
方法 销毁 <公开 注释 = "销毁本窗口组件,本方法调用后如欲继续使用本对象,必须再次创建." @虚拟方法 = 可覆盖>
{
_销毁资源 ()
父对象.销毁 ()// 调用基础类中的被覆盖虚拟方法
}
}
<火山程序 类型 = "通常" 版本 = 1 />
类 _图片画布_操作类 <公开 @全局类 = 真>
{
方法 _SVG_创建 <公开 静态 类型 = 整数 折叠>
参数 SVG代码 <类型 = 文本型>
{
变量 svg句柄 <类型 = 整数>
变量 SVG字节集 <类型 = 字节集类>
SVG字节集 = 文本到多字节 (SVG代码, )
SVG_创建 (SVG字节集.取字节集指针 (), svg句柄)
返回 (svg句柄)
}
方法 _SVG_代码转图片句柄 <公开 静态 类型 = 整数 折叠>
参数 SVG代码 <类型 = 文本型>
参数 图片宽度 <类型 = 整数 @默认值 = 64>
参数 图片高度 <类型 = 整数 @默认值 = 64>
参数 svg句柄接收变量 <类型 = 整数 @需求类型 = 可写入变量>
参数 销毁svg句柄 <类型 = 逻辑型 @默认值 = 真>
{
变量 svg句柄 <类型 = 整数>
变量 pic句柄 <类型 = 整数>
svg句柄 = _SVG_创建 (SVG代码)
svg句柄接收变量 = svg句柄
图片_创建自SVG句柄 (svg句柄, 图片宽度, 图片高度, pic句柄)
如果真 (销毁svg句柄)
{
SVG_销毁 (svg句柄)
}
返回 (pic句柄)
}
方法 _画布_保存图片 <公开 静态 类型 = 逻辑型 折叠>
参数 画布句柄 <类型 = 整数>
参数 保存路径 <类型 = 文本型>
{
变量 pic <类型 = 整数>
变量 结果 <类型 = 逻辑型>
图片_创建自画布句柄 (画布句柄, pic)
结果 = 图片_保存到文件 (pic, 保存路径)
图片_销毁 (pic)
返回 (结果)
}
方法 _画布_置底色 <公开 静态 类型 = 逻辑型 注释 = "请自行开始/结束 绘制" 折叠>
参数 画布句柄 <类型 = 整数>
参数 底色 <类型 = 整数 注释 = "argb">
参数 左边起点 <类型 = 整数 @默认值 = 0>
参数 顶边起点 <类型 = 整数 @默认值 = 0>
参数 限制宽度 <类型 = 整数 @默认值 = 0>
参数 限制高度 <类型 = 整数 @默认值 = 0>
{
变量 画刷 <类型 = 变整数>
变量 宽 <类型 = 整数>
变量 高 <类型 = 整数>
变量 结果 <类型 = 逻辑型>
画布_取尺寸 (画布句柄, 宽, 高)
如果真 (宽 == 0 || 高 == 0)
{
调试输出 ("_画布_置底色:画布尺寸无效!")
返回 (假)
}
画刷 = 画刷_创建 (底色)
如果真 (画刷 == 0)
{
调试输出 ("_画布_置底色:创建画刷失败!")
返回 (假)
}
如果真 (限制宽度 > 0)
{
宽 = 限制宽度
}
如果真 (限制高度 > 0)
{
高 = 限制高度
}
结果 = 画布_填充矩形 (画布句柄, 画刷, 左边起点, 顶边起点, 宽 + 左边起点, 高 + 顶边起点)
画刷_销毁 (画刷)
返回 (结果)
}
方法 _画布_创建带底色 <公开 静态 类型 = 整数 折叠>
参数 组件句柄 <类型 = 整数>
参数 底色 <类型 = 整数 注释 = "argb" "">
参数 图片宽度 <类型 = 整数 注释 = "<1为取组件尺寸" @默认值 = -1>
参数 图片高度 <类型 = 整数 注释 = "<1为取组件尺寸" @默认值 = -1>
参数 结束绘制 <类型 = 逻辑型 @默认值 = 真>
{
如果真 (图片宽度 < 1 || 图片高度 < 1)
{
变量 矩形 <类型 = RECT>
组件取矩形 (组件句柄, 矩形)
如果真 (图片宽度 < 1)
{
图片宽度 = 矩形.right - 矩形.left
}
如果真 (图片高度 < 1)
{
图片高度 = 矩形.bottom - 矩形.top
}
}
变量 底色画布 <类型 = 整数>
底色画布 = 画布_创建自组件句柄 (组件句柄, 图片宽度, 图片高度, 画布标识.画布抗锯齿)
如果真 (底色 != 数值范围.最小整数值)
{
变量 底色画刷 <类型 = 变整数>
画布_开始绘制 (底色画布)
底色画刷 = 画刷_创建 (底色)
画布_填充矩形 (底色画布, 底色画刷, 0, 0, 图片宽度, 图片高度)
如果真 (结束绘制)
{
画布_结束绘制 (底色画布)
}
画刷_销毁 (底色画刷)
}
返回 (底色画布)
}
方法 _画布_取容器子组件合并画布 <公开 静态 类型 = 整数 折叠>
参数 容器组件句柄 <类型 = 整数>
参数 左边距 <类型 = 整数 @默认值 = 0>
参数 右边距 <类型 = 整数 @默认值 = 0>
参数 上边距 <类型 = 整数 @默认值 = 0>
参数 下边距 <类型 = 整数 @默认值 = 0>
参数 底色 <类型 = 整数 @默认值 = 0>
参数 底色圆角 <类型 = 整数 @默认值 = 0>
参数 绘制混合模式 <类型 = 混合模式 注释 = "拷贝会清除矩形范围内的原本内容" @默认值 = 混合模式.覆盖>
参数 "//是否进行粘贴优化" <类型 = 逻辑型>
{
变量 容器矩形 <类型 = RECT>
变量 子组件数组 <类型 = 整数数组类>
变量 画布 <类型 = 整数>
组件取矩形 (容器组件句柄, 容器矩形)
画布 = 画布_创建自组件句柄 (容器组件句柄, 容器矩形.right - 容器矩形.left + 左边距 + 右边距, 容器矩形.bottom - 容器矩形.top + 上边距 + 下边距, 画布标识.文本抗锯齿)
画布_开始绘制 (画布)
如果真 (底色 != 0)
{
变量 画刷 <类型 = 变整数>
画刷 = 画刷_创建 (底色)
画布_填充圆角矩形 (画布, 画刷, 0, 0, 容器矩形.right - 容器矩形.left + 左边距 + 右边距, 容器矩形.bottom - 容器矩形.top + 上边距 + 下边距, 底色圆角, 底色圆角)
画刷_销毁 (画刷)
}
// 如果真 (左边距 != 0 || 右边距 != 0 || 上边距 != 0 || 下边距 != 0)
{
// 画布_置剪辑区 (画布, 左边距, 上边距, 左边距 + 容器矩形.right - 容器矩形.left, 上边距 + 容器矩形.bottom - 容器矩形.top)
}
// 图片_创建 (容器矩形.right - 容器矩形.left + 左右边距, 容器矩形.bottom - 容器矩形.top + 上下边距, pic)
// 图片_粘贴 (pic, (整数)组件取数值 (容器组件句柄, EOL_HCANVAS), 左右边距, 上下边距, pic)
// 图片_创建自画布句柄 ((整数)组件取数值 (容器组件句柄, EOL_HCANVAS), pic)
子组件数组 = _组件_枚举子组件 (容器组件句柄, , )
子组件数组.枚举循环 ()
{
变量 子组件句柄 <类型 = 整数>
变量 子组件矩形 <类型 = RECT>
变量 子组件画布 <类型 = 整数>
子组件句柄 = 子组件数组.取枚举值 ()
如果真 (组件是否可视 (子组件句柄))
{
组件取矩形 (子组件句柄, 子组件矩形)
子组件画布 = _画布_组件取画布句柄 (子组件句柄)
// 画布_画画布 (画布, 子组件画布, 左边距 + 子组件矩形.left, 上边距 + 子组件矩形.top, 左边距 + 子组件矩形.right, 上边距 + 子组件矩形.bottom, 0, 0, 255, 绘制混合模式)
_画布_画画布 (画布, 子组件画布, 左边距 + 子组件矩形.left, 上边距 + 子组件矩形.top, 绘制混合模式)
// 图片_销毁 (子组件pic)
// 图片_保存到文件 (子组件pic, "d:\\测试\\" + 到文本 (子组件数组.取枚举索引 ()) + ".png")
}
}
// 如果真 (左边距 != 0 || 右边距 != 0 || 上边距 != 0 || 下边距 != 0)
{
// 画布_重置剪辑区 (画布)
}
画布_结束绘制 (画布)
返回 (画布)
}
方法 _画布_画画布 <公开 静态 类型 = 逻辑型 折叠>
参数 结果画布 <类型 = 整数>
参数 来源画布 <类型 = 整数>
参数 左边起点 <类型 = 整数 @默认值 = 0>
参数 顶边起点 <类型 = 整数 @默认值 = 0>
参数 绘制混合模式 <类型 = 混合模式 注释 = "拷贝会清除矩形范围内的原本内容" @默认值 = 混合模式.覆盖>
{
变量 来源宽度 <类型 = 整数>
变量 来源高度 <类型 = 整数>
画布_取尺寸 (来源画布, 来源宽度, 来源高度)
返回 (画布_画画布 (结果画布, 来源画布, 左边起点, 顶边起点, 左边起点 + 来源宽度, 顶边起点 + 来源高度, 0, 0, 255, 绘制混合模式))
}
方法 _画布_组件取画布句柄 <公开 静态 类型 = 整数 折叠>
参数 组件句柄 <类型 = 整数>
{
返回 ((整数)组件取数值 (组件句柄, 窗口组件.EOL_HCANVAS))
}
方法 "//_图片_取子组件图片" <公开 类型 = 整数 折叠>
参数 容器组件句柄 <类型 = 整数>
参数 是否进行粘贴优化 <类型 = 逻辑型>
{
变量 pic <类型 = 整数>
变量 容器矩形 <类型 = RECT>
变量 左右边距 <类型 = 整数 值 = 0>
变量 上下边距 <类型 = 整数 值 = 0>
变量 子组件数组 <类型 = 整数数组类>
组件取矩形 (容器组件句柄, 容器矩形)
图片_创建 (容器矩形.right - 容器矩形.left + 左右边距, 容器矩形.bottom - 容器矩形.top + 上下边距, pic)
// 图片_粘贴 (pic, (整数)组件取数值 (容器组件句柄, EOL_HCANVAS), 左右边距, 上下边距, pic)
// 图片_创建自画布句柄 ((整数)组件取数值 (容器组件句柄, EOL_HCANVAS), pic)
子组件数组 = _组件_枚举子组件 (容器组件句柄, , )
子组件数组.枚举循环 ()
{
变量 子组件句柄 <类型 = 整数>
变量 子组件pic <类型 = 整数>
变量 矩形 <类型 = RECT>
子组件句柄 = 子组件数组.取枚举值 ()
组件取矩形 (子组件句柄, 矩形)
子组件pic = 0
图片_创建自画布句柄 ((整数)组件取数值 (子组件句柄, EOL_HCANVAS), 子组件pic)
// 调试输出 (子组件数组.取枚举索引 (), 组件取文本2 (子组件句柄), )
如果 (是否进行粘贴优化)
{
pic = _图片_粘贴2 (pic, 子组件pic, 矩形.left, 矩形.top)
}
否则
{
图片_粘贴 (pic, 子组件pic, 矩形.left, 矩形.top, pic)
}
// 图片_保存到文件 (子组件pic, "d:\\测试\\" + 到文本 (子组件数组.取枚举索引 ()) + ".png")
// 图片_销毁 (子组件pic)
}
返回 (pic)
}
方法 _图片_创建带底色 <公开 静态 类型 = 整数 折叠>
参数 宽度 <类型 = 整数>
参数 高度 <类型 = 整数>
参数 rgba底色 <类型 = 整数>
{
变量 pic <类型 = 整数>
图片_创建 (宽度, 高度, pic)
计次循环 (宽度)
{
变量 左 <类型 = 整数>
左 = 取循环索引 ()
计次循环 (高度)
{
图片_置点像素 (pic, 左, 取循环索引 (), rgba底色)
调试输出 (取循环索引 (), 左)
}
}
返回 (pic)
}
方法 _图片_置保存字节集预分配尺寸 <公开 静态 注释 = "图片_取宽度(图片句柄)*图片_取高度(图片句柄)*4" 折叠>
参数 图片句柄 <类型 = 整数>
参数 字节集 <类型 = 字节集类 @需求类型 = 可写入变量>
{
字节集.重分配字节集 (图片_取宽度 (图片句柄) * 图片_取高度 (图片句柄) * 4)
}
方法 _图片_粘贴2 <公开 静态 类型 = 整数 注释 = "比原版多了 大小判断及进行裁剪" 折叠>
参数 目标图片句柄 <类型 = 整数 注释 = "大图">
参数 源图句柄 <类型 = 整数 注释 = "小图">
参数 粘贴到大图横坐标 <类型 = 整数>
参数 粘贴到大图纵坐标 <类型 = 整数>
{
变量 大图宽度 <类型 = 整数>
变量 大图高度 <类型 = 整数>
变量 小图宽度 <类型 = 整数>
变量 小图高度 <类型 = 整数>
变量 超出宽度 <类型 = 整数>
变量 超出高度 <类型 = 整数>
变量 被粘贴图片句柄 <类型 = 整数>
变量 结果图片句柄 <类型 = 整数>
变量 "//结果" <类型 = 逻辑型>
图片_取尺寸 (目标图片句柄, 大图宽度, 大图高度)
图片_取尺寸 (源图句柄, 小图宽度, 小图高度)
超出宽度 = 粘贴到大图横坐标 + 小图宽度 - 大图宽度
超出高度 = 粘贴到大图纵坐标 + 小图高度 - 大图高度
// 调试输出 (超出宽度, 超出高度)
如果 (超出宽度 > 0 || 超出高度 > 0)
{
变量 保留宽度 <类型 = 整数>
变量 保留高度 <类型 = 整数>
保留宽度 = 大图宽度 - 粘贴到大图横坐标
保留高度 = 大图高度 - 粘贴到大图纵坐标
如果真 (保留宽度 > 小图宽度)
{
保留宽度 = 小图宽度
}
如果真 (保留高度 > 小图高度)
{
保留高度 = 小图高度
}
如果 (图片_裁剪 (源图句柄, 0, 0, 保留宽度, 保留高度, 被粘贴图片句柄))
{
// 调试输出 ("AAA", 大图宽度, 大图高度, 小图宽度, 小图高度, 保留宽度, 保留高度)
}
否则
{
// 调试输出 ("BBB", 大图宽度, 大图高度, 小图宽度, 小图高度, 保留宽度, 保留高度)
}
}
否则
{
被粘贴图片句柄 = 源图句柄
}
图片_粘贴 (目标图片句柄, 被粘贴图片句柄, 粘贴到大图横坐标, 粘贴到大图纵坐标, 结果图片句柄)
如果真 (被粘贴图片句柄 != 源图句柄)
{
图片_销毁 (被粘贴图片句柄)
}
返回 (结果图片句柄)
}
方法 _画布_填充圆角矩形_自RECT矩形 <公开 静态 类型 = 逻辑型 折叠>
参数 画布句柄 <类型 = 整数>
参数 画刷句柄 <类型 = 变整数>
参数 RECT矩形 <类型 = RECT "">
参数 圆角radiusX <类型 = 单精度小数 注释 = "实际需求: 单精度小数" "">
参数 圆角radiusY <类型 = 单精度小数 注释 = "实际需求: 单精度小数" "">
{
返回 (画布_填充圆角矩形 (画布句柄, 画刷句柄, RECT矩形.left, RECT矩形.top, RECT矩形.right, RECT矩形.bottom, 圆角radiusX, 圆角radiusY))
}
}
直接在www.iconfon**找到喜欢的图标,赋值SVG,在IDE里输入SVG代码就行了
页:
[1]