回复#15 @周山下樵夫 :
你说的论坛的回复不成体系其实有所误解,你要知道我们毕竟不是 python 论坛,也要理解python是一个庞大复杂的开发环境,使用python的每个模块遇到的问题可能都不一样,例如有的模块引用失败是少复制了文件,引用了错误的位置,或者把64位当32位使用了,作为aardio的论坛,很难把使用python可能遇到的所有问题都包含进去,而且目前来说我遇到的询问 python 这类问题的,基本上分析了以后,大多数都发现问题出在 python 本身的使用上面,而不是 aardio 调用 py
很聪明,简单的代码实现了炫酷的效果。
listview.wndproc 其实可以写到扩展库里会更方便, wndproc可以重复赋值,所以不影响控件继续增加 wndproc。
另外这个关于最后一行的判断实际上可以简化,可以这样写:
if( plus.stepProgress(-1,true) ){
:SendMessageInt(winform.listview.hwnd, 0x115/*_WM_VSCROLL*/, 1, 0);
}
plus.stepProgress(-1
这个合成语音,网络原因或者文本较长可能会有一会延时,所以这里改成了多线程,不然可能误解为没有反应 - 然后连续重复提交。
另外智能提示配置中的 !client 更改为了 !aliyunTtsClient , 这种应当使用更准确的名字以避免出现名字冲突( 因为都是全局有效 )
aliyun.tts 已经发布到 aardo 扩展库里了,这是改进后的示例(时间关系比较抢,所以范例未仔细检查,大概地改了一下):
/* http://www.htmlayout.cn/t/374 */ import fonts.fontAwesome; import win.ui; /*DSG{{*/ var winform = win.form(text="阿里云TTS";right=353;bottom=507) winform.add( bk={cls="bk";text="语调";left=19;t感谢分享,非常棒。
有几个小的建议,
库的命名上我们还是要斟酌一下,aardio 的库得益于简洁统一的命名 - 其实让我们轻松了许多。
例如上次的Zint调整到libzint,就是去掉首字母大写(名字空间统一这样命名),使用更精确的名称代替短名称。
类似上面这个扩展库,使用了三个名字空间 aliyun,aliyun.tss,aliyun.util,
据我的了解,aliyun的接口很多(例如我就写过一个aliyun.oss),这样可能会覆盖其他人的代码,而实际上这个扩展库里aliyu
用法示例(需要更新aardio到最新版,因为用到了新版的raw.struct):
import win.ui; /*DSG{{*/ mainForm = win.form(text="Zint条码使用 - 作者:popdes(htmlayout.cn)";right=1145;bottom=788;bgcolor=12639424) mainForm.add( plus={cls="plus";left=31;top=25;right=1082;bottom=755;repeat="scale";z=1} )又做了一些小的修改,最终扩展库如下:
import raw.struct; import gdip.bitmap; class libzint{ ctor(){{ var pSymbol = _dll.ZBarcode_CreateP(); this = ..raw.struct(zintSymbol,pSymbol); this[["#pSymbol"]] = pSymbol; ..table.gc(this,"del因为在 gdip.bitmap 的构造参数中宽、高参数写反了,所以你后面行、列要反过来写,因为行,列反过来写,所以图像必须旋转90度,因为二维码宽高一样,所以只有条码是错的,这种笔误真挺耗时间,看了zint 的源码才注意到这里。
aardio 扩展库最好不要首写大字母,库名同时是名字空间 - 一般小写首字母,保持一致的命名风格更好,所以我改了一下名字改为 libzint。
另外大家注意一下zint虽然是GPL许可证,但libzint这个核心组件却是宽松的BSD许可证,扩展库一般注明这些比较好。
我们可以在库里右键新建一个目录,命名为
回复#7 @sankychen :
标准库是自带的,不需要下载,
扩展库你可以在扩展库管理器里钩选你要下载的库,可以一次下载到本地。扩展库也不需要放到项目里,那么多的库,你每个项目都不必要的复制一份副本,那你项目得有多大?!
我们使用的阿里云的服务器,阿里云还是信得过的。aardio 的服务器提供了十多年的稳定服务,我很少听到不能下载的反馈,所以一般没有必要下载所有的扩展库。
不过无论是你的网络还是我的网络、都不可能保证百分百的稳定不出现短暂的中断,没有一个服务器
app.Preferences.RulerUnits = 1 会先询问PS他要什么类型,而PS这样会报错,
app.Preferences.RulerUnits = com.Variant(1) 这样写aardio会先确定类型,PS这样反而不报错。
在COM接口里,1和com.Variant(1) 的作用是一样的,区别就是确定类型前要不要问过对方(COM的数值有细分为很多类型)
新版针对PS这个做了改进,以后直接写app.Preferences.RulerUnits = 1 就可以了。
回复#6 @wyybeyond :
关于你所说的“完全不知道如何下手,看了下手册,好多东西都是迷迷糊糊的,比如,用单引号和双引号表示字符串,好像都行。语句后面加不加分号,好
该功能已经添加到标准库了,用法更简单了:
//文本框汽泡提示 import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( btnError={cls="button";text="错误";left=280;top=306;right=390;bottom=353;z=2}; btnInfo={cls="button";text="提示";left=539;top=aardio中调用VB编写的控件非常方便,
以上面的3D控件为例,只要一句代码就可以嵌入:
var ec3dG = com.lite("\res\ecGraph3D.ocx").createEmbed(main
系统的edit控件不支持垂直对齐,
winform.plus.editBox.setPadding()的效用一拖动就会消失,
aardio实际上是反复调用这个函数来做修补。
plus控件有更简单的设置方法:
你可以直接在plus控件属性里指定
var res = http.get(url)||{};
if(res.status_code=="0")
类似这种res可能返回为非对象的,可以改用直接下标
if(res[["status_code"]]=="0") 无论res是什么东西,这句代码都可以正常执行,可以省很多代码了。
这个类似javascript,typescript最近炒的很热火的可选链,aardio十几年前就有了。
很不错,
getHotList 函数的title字段可以改为text,这样返回值可以直接作为 tabs.add() 的参数。
创建strip可以直接传入url这些附加字段,一般不需要额外用个表来存。
useragent可以直接作为inet.http或web.rest的构造参数。
web.rest.client本身就是一个http对象,一般可以共用。
缩进乱了,可能是制表符的问题,工具里有个制表符转表格的,一般存源码建议转制表符(减小体积),发表到网页或QQ这些建议转为统一空格。
win.ui.ta
这个是设计时属性,仅限于在窗体设计器中使用。
plus控件的入门教程里详细解释了这个属性的用法,
里面还有截图,再截一次图:
另外在【库函数文档 / 窗口控件 】 有所有这些属性的完整列表和文档,你到入门教程里当然是找不到的,入门教程只是挑重点和基础的讲 - 不是属性手册。
回复#5 @dsp2138 :
border跟其他所有样式都支持check,
不过plus控件其实已经支持你这种需求,前景图像可以设置内边距( 不是margin,是 paddingTop .... 这几个属性 )
所以上面的代码可以简化:
很好的思路,最新版aardio针对这个改进了一下,可以用png直接指定 win.ui.tabs的绘图区域,以上面的工程为例, main.aardio修改如下:
import win.ui; /*DSG{{*/ mainForm = win.form(text="斜角按钮示例";right=1220;bottom=579;bgcolor=0) mainForm.add( plus={cls="plus";text="斜角按钮效果";left=51;top=49;right=352;bottom=186;back
回复#7 @nuck :
《库函数文档》点「内核库 / math 」
《aardio用户手册》点「基础语法/数据类型」
type( v ) == type.string 就是字符串
type( v ) == type.number 就是数值
math.isFinite( v ) 是有效数值
math.isInteger( v ) 就是整数,反之就是浮点数