├── README.md ├── default.aproj ├── dlg ├── main1.aardio └── main2.aardio ├── img ├── 1586052994767863.gif ├── Now-Playing.png ├── Queue.png ├── bo.png ├── d1.jpg ├── d2.jpg ├── d3.jpg ├── d4.jpg ├── d5.jpg ├── d6.jpg ├── d7.jpg ├── left.png ├── left3.png ├── left4.png ├── left5.png ├── pic.png ├── pic2.png └── right.png ├── lib ├── config.aardio ├── fonts │ └── semibold.aardio └── listboxExx.aardio └── main.aardio /README.md: -------------------------------------------------------------------------------- 1 | # aardio-musicPlayerUI 2 | aardio界面练习-音乐播放器 3 | ![image](https://github.com/popde/aardio-musicPlayerUI/blob/main/img/1586052994767863.gif) 4 | 现在手机的ui好多, 今天仿一个不错的音乐播放器ui 界面. 5 | 6 | 下面的程序只用到了aardio中的plus / listbox控件来实现. 7 | 8 | 演示了plus贴图/进度条 9 | 10 | 演示了listbox自绘界面和无滚动条滚动 11 | 12 | 因为播放按钮UI作者未提供其他状态图片,所以未演示此处贴图,其实和1的原理一样 13 | 14 | 有类似列表需求的可以参考listboxExx自绘扩展库代码, 稍微修修改改即可变为另一个样子了 15 | 16 | 注: 界面上所用的字体,已打包在工程的lib/font文件夹里, 工程会自动安装该字体 17 | 18 | 如果列表界面滑动会闪烁, 就去这个mainform.aardio界面里开启双缓冲即可! 19 | 首发在: https://chengxu.xyz/t/371 20 | -------------------------------------------------------------------------------- /default.aproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /dlg/main1.aardio: -------------------------------------------------------------------------------- 1 | import fonts.fontAwesome; 2 | import win.ui; 3 | /*DSG{{*/ 4 | var winform = win.form(text="music demo";right=374;bottom=666;bgcolor=16711422;border="none";max=false;min=false;mode="popup";sysmenu=false;title=false) 5 | winform.add( 6 | Formclose={cls="plus";text='\uF00D';left=23;top=23;right=39;bottom=41;color=14737632;font=LOGFONT(h=-18;name='FontAwesome');notify=1;z=2}; 7 | open={cls="plus";text='\uF03C';left=331;top=22;right=359;bottom=48;color=14737632;font=LOGFONT(h=-21;name='FontAwesome');notify=1;z=3}; 8 | plus11={cls="plus";left=246;top=566;right=299;bottom=619;background="\img\right.png";font=LOGFONT(h=-60;name='FontAwesome');iconColor=16777215;z=15}; 9 | plus3={cls="plus";left=48;top=80;right=327;bottom=359;background="\img\pic.png";border={radius=4};z=4}; 10 | plus8={cls="plus";left=76;top=566;right=129;bottom=619;background="\img\left.png";font=LOGFONT(h=-60;name='FontAwesome');iconColor=16777215;iconStyle={align="left";font=LOGFONT(h=-40;name='FontAwesome');padding={left=26}};z=13}; 11 | plus9={cls="plus";left=145;top=547;right=230;bottom=637;background="\img\bo.png";font=LOGFONT(h=-60;name='FontAwesome');iconColor=14900666;z=14}; 12 | progress={cls="plus";left=24;top=491;right=351;bottom=495;bgcolor=14803425;forecolor=12015585;z=9}; 13 | static={cls="static";text="Now Playing";left=0;top=0;right=375;bottom=64;align="center";center=1;color=4473665;font=LOGFONT(h=-24;name='Sofia Pro Semi Bold Condensed');notify=1;transparent=1;z=1}; 14 | static2={cls="static";text="This Girl";left=32;top=416;right=343;bottom=442;align="center";center=1;color=4473665;font=LOGFONT(h=-27;name='Sofia Pro Semi Bold Condensed');transparent=1;z=6}; 15 | static3={cls="static";text="Kung";left=90;top=445;right=284;bottom=469;align="center";center=1;color=11775914;font=LOGFONT(h=-19;name='Sofia Pro Semi Bold Condensed');transparent=1;z=7}; 16 | static4={cls="static";text="1:12";left=21;top=503;right=62;bottom=518;center=1;color=11775914;font=LOGFONT(h=-16;name='Sofia Pro Semi Bold Condensed');transparent=1;z=10}; 17 | static5={cls="static";text="-2:04";left=310;top=503;right=351;bottom=518;align="right";center=1;color=11775914;font=LOGFONT(h=-16;name='Sofia Pro Semi Bold Condensed');transparent=1;z=11}; 18 | xihuan={cls="plus";text='\uF004';left=24;top=430;right=48;bottom=454;color=14737632;font=LOGFONT(h=-18;name='FontAwesome');notify=1;z=5}; 19 | 乱序={cls="plus";text='\uF074';left=28;top=581;right=52;bottom=605;color=12015585;font=LOGFONT(h=-18;name='FontAwesome');notify=1;z=12}; 20 | 单曲循环={cls="plus";text='\uF021';left=327;top=581;right=351;bottom=605;color=14737632;font=LOGFONT(h=-18;name='FontAwesome');notify=1;z=16}; 21 | 更多={cls="plus";text='\uF141';left=331;top=430;right=355;bottom=454;color=14737632;font=LOGFONT(h=-18;name='FontAwesome');notify=1;z=8} 22 | ) 23 | /*}}*/ 24 | 25 | //按钮的皮肤 26 | var bskin = { 27 | color={ 28 | default=0xFFE0E0E0; 29 | hover=0xFFB757E1; 30 | active=0xFFB757E1; 31 | }; 32 | //被选中状态 33 | checked = { 34 | color={ 35 | default=0xFFB757E1; 36 | }; 37 | } 38 | } 39 | //应用皮肤 40 | winform.Formclose.setParent(winform.static); 41 | winform.open.setParent(winform.static); 42 | winform.Formclose.skin(bskin); 43 | winform.open.skin(bskin); 44 | winform.xihuan.skin(bskin); 45 | winform.更多.skin(bskin); 46 | winform.乱序.skin(bskin); 47 | winform.单曲循环.skin(bskin); 48 | //头部拖动 49 | winform.static.wndproc = function(hwnd,message,wParam,lParam){ 50 | if(message == 0x201/*_WM_LBUTTONDOWN*/){ 51 | winform.hitCaption() 52 | } 53 | } 54 | //窗体关闭 55 | winform.Formclose.onMouseClick = function(wParam,lParam){ 56 | //有父窗体就关闭它 57 | if(winform.parent){ 58 | mainForm.close(); 59 | }else { 60 | winform.close(); 61 | } 62 | } 63 | 64 | //模拟演示切换到右侧 65 | winform.open.oncommand = function(id,event){ 66 | publish("切换右",) 67 | } 68 | //设置进度区间,可自动切换到进度条显示模式 69 | winform.progress.setProgressRange(1,100); 70 | winform.progress.progressPos = 30; 71 | winform.progress.startProgress(500,3); 72 | 73 | winform.乱序.checked = true; 74 | 75 | winform.show(); 76 | win.loopMessage(); 77 | return winform; -------------------------------------------------------------------------------- /dlg/main2.aardio: -------------------------------------------------------------------------------- 1 | import fonts.fontAwesome; 2 | import win.ui; 3 | /*DSG{{*/ 4 | var winform = win.form(text="music demo";right=374;bottom=666;bgcolor=16711422;border="none";max=false;min=false;mode="popup";sysmenu=false;title=false) 5 | winform.add( 6 | Formclose={cls="plus";text='\uF00D';left=23;top=23;right=39;bottom=41;color=14737632;font=LOGFONT(h=-18;name='FontAwesome');notify=1;z=2}; 7 | bk={cls="bk";left=0;top=571;right=375;bottom=667;bgcolor=16711422;z=6}; 8 | listbox={cls="listbox";left=0;top=107;right=375;bottom=568;items={};ownerDraw=1;z=5}; 9 | open={cls="plus";text='\uF144';left=331;top=22;right=359;bottom=48;color=14737632;font=LOGFONT(h=-21;name='FontAwesome');notify=1;z=3}; 10 | plus={cls="plus";left=16;top=587;right=80;bottom=651;background="\img\pic2.png";z=9}; 11 | plus2={cls="plus";left=286;top=587;right=318;bottom=619;background="\img\left4.png";font=LOGFONT(h=-60;name='FontAwesome');iconColor=16777215;notify=1;z=12}; 12 | plus3={cls="plus";left=327;top=587;right=359;bottom=619;background="\img\left5.png";font=LOGFONT(h=-60;name='FontAwesome');iconColor=16777215;z=13}; 13 | plus8={cls="plus";left=244;top=587;right=276;bottom=619;background="\img\left3.png";font=LOGFONT(h=-60;name='FontAwesome');iconColor=16777215;iconStyle={align="left";font=LOGFONT(h=-40;name='FontAwesome');padding={left=26}};z=11}; 14 | progress={cls="plus";left=88;top=646;right=359;bottom=650;bgcolor=14803425;forecolor=12015585;z=10}; 15 | static={cls="static";text="Queue";left=0;top=0;right=375;bottom=64;align="center";center=1;color=4473665;font=LOGFONT(h=-24;name='Sofia Pro Semi Bold Condensed');notify=1;transparent=1;z=1}; 16 | static2={cls="static";text="Up Next";left=16;top=70;right=164;bottom=102;center=1;color=4473665;font=LOGFONT(h=-32;name='Sofia Pro Semi Bold Condensed');notify=1;transparent=1;z=4}; 17 | static3={cls="static";text="This Girl";left=88;top=587;right=186;bottom=613;center=1;color=4473665;font=LOGFONT(h=-27;name='Sofia Pro Semi Bold Condensed');transparent=1;z=7}; 18 | static4={cls="static";text="Kung";left=88;top=612;right=161;bottom=636;center=1;color=11775914;font=LOGFONT(h=-19;name='Sofia Pro Semi Bold Condensed');transparent=1;z=8} 19 | ) 20 | /*}}*/ 21 | 22 | //按钮皮肤 23 | var bskin = { 24 | color={ 25 | default=0xFFE0E0E0; 26 | hover=0xFFB757E1; 27 | active=0xFFB757E1; 28 | }; 29 | //选中状态 30 | checked = { 31 | color={ 32 | default=0xFFB757E1; 33 | }; 34 | } 35 | } 36 | //应用皮肤 37 | winform.Formclose.setParent(winform.static); 38 | winform.open.setParent(winform.static); 39 | winform.Formclose.skin(bskin); 40 | winform.open.skin(bskin); 41 | //头部拖动 42 | winform.static.wndproc = function(hwnd,message,wParam,lParam){ 43 | if(message == 0x201/*_WM_LBUTTONDOWN*/){ 44 | winform.hitCaption() 45 | } 46 | } 47 | 48 | //设置进度区间,可自动切换到进度条显示模式 49 | winform.progress.setProgressRange(1,100); 50 | winform.progress.progressPos = 10; 51 | //模拟进度再走动 52 | winform.progress.startProgress(500,3); 53 | 54 | //导入listbox扩展自绘库 55 | import listboxExx; 56 | //应用自绘 57 | var libox = listboxExx(winform.listbox,64,0xFEFEFE,0xF2F2F2,0xEBEBEB); 58 | //模拟初始数据 59 | var i = 1; 60 | for(j=1;15;1){ 61 | var sstab = {}; 62 | table.mixin(sstab,{ iImage = "\img\d"++math.random(1,7)++".jpg"; text = "star boy"++i; size = "The week day,daft ring!" }); 63 | winform.listbox.add(table.tostring(sstab)) 64 | i++; 65 | } 66 | //创建弹出菜单 67 | var menuFile = win.ui.popmenu(winform); 68 | menuFile.add( 69 | "打开", 70 | function(id){ 71 | winform.msgbox("打开音乐") 72 | } 73 | ) 74 | 75 | //调用扩展库自定义的功能 76 | libox.clickFunc = function(index){ 77 | menuFile.popup(); 78 | } 79 | 80 | //窗体关闭 81 | winform.Formclose.onMouseClick = function(wParam,lParam){ 82 | winform.progress.stopProgress(); 83 | if(winform.parent){ 84 | mainForm.close(); 85 | }else { 86 | winform.close(); 87 | } 88 | } 89 | //模拟切换到左侧 90 | winform.open.oncommand = function(id,event){ 91 | publish("切换左",) 92 | } 93 | 94 | winform.show(); 95 | win.loopMessage(); 96 | return winform; -------------------------------------------------------------------------------- /img/1586052994767863.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/1586052994767863.gif -------------------------------------------------------------------------------- /img/Now-Playing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/Now-Playing.png -------------------------------------------------------------------------------- /img/Queue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/Queue.png -------------------------------------------------------------------------------- /img/bo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/bo.png -------------------------------------------------------------------------------- /img/d1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/d1.jpg -------------------------------------------------------------------------------- /img/d2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/d2.jpg -------------------------------------------------------------------------------- /img/d3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/d3.jpg -------------------------------------------------------------------------------- /img/d4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/d4.jpg -------------------------------------------------------------------------------- /img/d5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/d5.jpg -------------------------------------------------------------------------------- /img/d6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/d6.jpg -------------------------------------------------------------------------------- /img/d7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/d7.jpg -------------------------------------------------------------------------------- /img/left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/left.png -------------------------------------------------------------------------------- /img/left3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/left3.png -------------------------------------------------------------------------------- /img/left4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/left4.png -------------------------------------------------------------------------------- /img/left5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/left5.png -------------------------------------------------------------------------------- /img/pic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/pic.png -------------------------------------------------------------------------------- /img/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/pic2.png -------------------------------------------------------------------------------- /img/right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/popde/aardio-musicPlayerUI/267996944ac66ca89bdb3de1653bc115c776d315/img/right.png -------------------------------------------------------------------------------- /lib/config.aardio: -------------------------------------------------------------------------------- 1 | //config 配置文件 2 | import fsys.config; 3 | config = fsys.config("/config/"); 4 | //config = fsys.config( io.appData("/软件作者/应用程序名/") ); 5 | 6 | //不需要序列化的配置名字前请添加下划线 7 | namespace config { 8 | __appName = "应用程序名"; 9 | __appVersion = "1.0.0.01"; 10 | __appDescription = "这是一个测试程序"; 11 | __website = "http://www.aardio.com/"; 12 | } 13 | 14 | /**intellisense(config) 15 | __appName = 应用程序名 16 | __appVersion = 应用程序内部版本号 17 | __appDescription = 程序说明 18 | __website = 官方网站 19 | ? = 配置文件名,\n读写配置并序列化为一个表对象,\n表的成员值可以是支持序列化的普通变量,支持table对象\n配置文件在首次使用时自动加载,退出程序时自动保存\n!fsys_table. 20 | end intellisense**/ -------------------------------------------------------------------------------- /lib/fonts/semibold.aardio: -------------------------------------------------------------------------------- 1 | import fonts; 2 | 3 | namespace fonts.semibold{ 4 | family = ..fonts.addFamily($"/lib/fonts/.res/semibold.ttf") 5 | } 6 | 7 | /**intellisense() 8 | fonts.semibold = 导入图标字体,\n所有图标请参考aardio工具->文本文件->图标字体 9 | fonts.semibold.family = GDI+字样集合,可用于plus控件,gdip等库函数,\n!gdipfamily. 10 | end intellisense**/ -------------------------------------------------------------------------------- /lib/listboxExx.aardio: -------------------------------------------------------------------------------- 1 | //自绘列表 2 | //listbox自绘 3 | import win.imageList; 4 | import gdi; 5 | import fonts.fontAwesome; 6 | import com.picture; 7 | class listboxExx{ 8 | ctor( winform,Iheight=51,backColor=0xFFFFFF,activedColor=0xFFF5E2,hoverColor=0xEEB7FF ){ 9 | //先设置行高(自绘用) 10 | winform.onMeasureItem = function(measureItem){ 11 | measureItem.itemHeight = Iheight; 12 | }; 13 | //在行间开始自绘 14 | winform.onDrawItem = function(drawItem){ 15 | ..gdi.selectBrush( 16 | function(hdc,pen,brush){ 17 | //获取并分解需要显示的数据(字符串转表) 18 | var str = winform.getItemText(drawItem.itemID + 1); 19 | if(!str){ 20 | return; 21 | } 22 | var strTab = eval(str) 23 | var rc = drawItem.rcItem; 24 | ..gdi.fillRect(hdc,backColor,rc); 25 | 26 | if (drawItem.itemState & 1/*_ODS_SELECTED*/) { 27 | ..gdi.fillRect(hdc,activedColor,rc); 28 | }else { 29 | if(listboxsel == (drawItem.itemID+1)){ 30 | ..gdi.fillRect(hdc,hoverColor,rc); 31 | } 32 | } 33 | 34 | //删除文件 35 | if(colorsel){ 36 | var x,y = ..win.getMessagePos(); 37 | var item = winform.hitTest(x,y,true); 38 | 39 | if((drawItem.itemID+1) == item){ 40 | font = ::LOGFONT(weight=500;color=0x6112FF;name='FontAwesome';h=-20); 41 | ..gdi.textOut(hdc,font,'\uF141',/*rc.width()/2+345*/rc.right-40, rc.top+Iheight/2); 42 | }else { 43 | font = ::LOGFONT(weight=500;color=0x9C9C9C;name='FontAwesome';h=-20); 44 | ..gdi.textOut(hdc,font,'\uF141',/*rc.width()/2+345*/rc.right-40, rc.top+Iheight/2); 45 | } 46 | }else { 47 | font = ::LOGFONT(weight=500;color=0x9C9C9C;name='FontAwesome';h=-20); 48 | ..gdi.textOut(hdc,font,'\uF141',/*rc.width()/2+345*/rc.right-40, rc.top+Iheight/2); 49 | } 50 | 51 | 52 | //文件图标 53 | //..win.imageList.shell( 0/*_SHIL_LARGE*/ ).draw(strTab.iImage,hdc,rc.left+20,rc.top+10); 54 | //九宫格贴图 55 | var bitmap = ..com.picture.loadBitmap(strTab.iImage) 56 | var bmpRC = ..table.clone(rc); 57 | bmpRC.left = bmpRC.left+16; 58 | bmpRC.top = bmpRC.top+8; 59 | bmpRC.right = bmpRC.left+48; 60 | bmpRC.bottom = bmpRC.bottom-8; 61 | ..gdi.drawBitmap(hdc,bitmap,bmpRC,0,0,0,0); 62 | //::DeleteObject(bitmap) 63 | //文件名 64 | font = ::LOGFONT(weight=400;color=0x000000); 65 | ..gdi.textOut(hdc,font,strTab.text,bmpRC.right+10, rc.top+10); 66 | //文件大小 67 | font = ::LOGFONT(weight=300;color=0xB0B0B0); 68 | ..gdi.textOut(hdc,font,strTab.size,bmpRC.right+10, rc.top+30); 69 | 70 | },drawItem.hDC,0xF5FDFF/*背景色*/,0xEEEEEE/*画笔色*/) 71 | }; 72 | winform.wndproc = function(hwnd,message,wParam,lParam){ 73 | select(message) { 74 | case 0x200/*_WM_MOUSEMOVE*/ { 75 | var x,y = ..win.getMessagePos(); 76 | var item = winform.hitTest(x,y,true); 77 | if(item == null){ 78 | return ; 79 | } 80 | 81 | if(listboxsel == item){ /* 若鼠标在同一行item内游动 */ 82 | x,y = ..win.toClient(winform.hwnd,x,y); 83 | 84 | var delrc = winform.getItemRect(item); 85 | delrc.left = delrc.right-40; 86 | delrc.top = delrc.top+20; 87 | delrc.bottom = delrc.bottom-20 ; 88 | //判断鼠标游动的区间是不是在[删除]按钮范围 89 | if( ::PtInRect(delrc,x,y) ){ 90 | if(colorsel == false){ //鼠标从[删除]按钮外部移动到内部区域 91 | colorsel = true; 92 | //设置更新区,并更新 93 | winform.invalidate(winform.getItemRect(item)) 94 | winform.update(); 95 | } 96 | }else { 97 | if(colorsel == true){ //鼠标从内到外 98 | colorsel = false; 99 | //设置更新区,并更新 100 | winform.invalidate(winform.getItemRect(item)) 101 | winform.update(); 102 | } 103 | } 104 | }else { 105 | colorsel = false; 106 | //设置hover效果 107 | listboxsel = item; 108 | if(beforesel == null){ //第一次执行,初始化 109 | beforesel = listboxsel; 110 | 111 | }else { 112 | //先关闭上次绘制区域 113 | if(beforesel){ 114 | winform.invalidate(winform.getItemRect(beforesel),0) 115 | } 116 | beforesel = listboxsel; 117 | } 118 | //绘制当前区域 119 | winform.invalidate(winform.getItemRect(item)); 120 | winform.update(); 121 | } 122 | } 123 | case 0x202/*_WM_LBUTTONUP*/ { 124 | //删除功能 125 | if(colorsel){ /* 若鼠标在删除按钮区域内单击了 */ 126 | if(this.clickFunc){ 127 | this.clickFunc(winform.selIndex); 128 | } 129 | return ; 130 | }; 131 | } 132 | case 0x20A/*_WM_MOUSEWHEEL*/{ //滚轮消息 133 | var wheelDelta = ..raw.convert({int wParam=wParam },{word vk;word delta}).delta; 134 | if( wheelDelta > 0 ){ 135 | ::SendMessageInt(winform.hwnd, 0x115/*_WM_VSCROLL*/, 0, 0); 136 | }else { 137 | ::SendMessageInt(winform.hwnd, 0x115/*_WM_VSCROLL*/, 1, 0); 138 | } 139 | return 0; 140 | }; 141 | else { 142 | } 143 | } 144 | } 145 | return this; 146 | }; 147 | } 148 | -------------------------------------------------------------------------------- /main.aardio: -------------------------------------------------------------------------------- 1 | import fonts.fontAwesome; 2 | import win.ui; 3 | /*DSG{{*/ 4 | mainForm = win.form(text="music demo";right=374;bottom=666;bgcolor=16711422;border="none";composited=1;max=false;min=false;mode="popup";sysmenu=false;title=false) 5 | mainForm.add( 6 | custom={cls="custom";text="自定义控件";left=0;top=0;right=375;bottom=667;db=1;dl=1;dr=1;dt=1;repeat="tile";z=1} 7 | ) 8 | /*}}*/ 9 | 10 | //初始化 11 | var cform = mainForm.custom.loadForm("\dlg\main1.aardio"); 12 | //加载右侧界面 13 | subscribe("切换右",function(...){ 14 | 15 | mainForm.custom.loadForm("\dlg\main2.aardio"); 16 | } ) 17 | //加载左侧界面 18 | subscribe("切换左",function(...){ 19 | 20 | mainForm.custom.loadForm("\dlg\main1.aardio"); 21 | } ) 22 | 23 | //加载字体 24 | import fonts 25 | ..fonts.addFamily( 26 | ..io.appData("aardio/std/semibold.otf",$"~/lib/fonts/.res/semibold.otf"),"semibold" 27 | ) 28 | 29 | mainForm.show(); 30 | return win.loopMessage(); --------------------------------------------------------------------------------