aardio 文档
aardio 范例: GDI+ 自绘进度条
import win.ui;
import gdip.graphics;
/*DSG{{*/
var winform = win.form(text="aardio - GDI+ 自绘进度条";right=602;bottom=188;border="none")
winform.add(
plus={cls="plus";text="100%";left=46;top=76;right=550;bottom=116;db=1;dl=1;dr=1;dt=1;font=LOGFONT(h=-16);notify=1;z=1}
)
/*}}*/
// 自绘动画状态
winform.plus.lightPos = -0.5; // 流光位置控制
winform.plus.progress = 0; // 当前进度 0-100
// 核心自绘逻辑
winform.plus.onDrawContent = function(graphics,rc,txtColor,rcContent,foregroundColor,font){
var progress = owner.progress;
var lightPos = owner.lightPos;
var x,y,w,h = rc.xywh();
var barW = (progress / 100) * w;
var radius = h / 2; // 圆角半径
// 1. 绘制背景槽 (深色半透明)
var pathBg = gdip.path();
pathBg.addRoundRect(rc, radius);
var brushBg = gdip.solidBrush(0x40000000);
graphics.fillPath(brushBg, pathBg);
brushBg.delete();
if(barW > 5){
// 2. 绘制进度条主体渐变
var rcBar = ::RECTF(x, y, barW, h);
var pathBar = gdip.path();
pathBar.addRoundRect(rcBar, radius);
// 创建线性渐变:青色 -> 紫色
var brushBar = gdip.lineBrush(rcBar, 0xFF00f2fe, 0xFF7117ea, 0);
graphics.fillPath(brushBar, pathBar);
// 3. 绘制霓虹外发光 (通过多层半透明描边模拟)
for(i=1; 5){
var penGlow = gdip.pen(gdi.ARGB(113, 23, 234,20 - i*3/*Alpha*/), i * 2);
graphics.drawPath(penGlow, pathBar);
penGlow.delete();
}
// 4. 绘制流光效果 (Sweep Light)
graphics.setClipPath(pathBar); // 只在进度条内部绘制
var lightX = x + (lightPos * barW * 2);
var rcLight = ::RECTF(lightX, y, barW * 0.4, h);
var brushLight = gdip.lineBrush(rcLight, 0x00FFFFFF, 0x90FFFFFF, 0);
brushLight.gammaCorrection = true;
graphics.fillRectangle(brushLight, rcLight);
brushLight.delete();
graphics.resetClip();
brushBar.delete();
pathBar.delete();
}
// 释放资源
pathBg.delete();
}
winform.plus.onDrawString = function(graphics,text,font,rectf,strformat,brush){
var strPercent = math.floor(owner.progress) + "%";
// 文字阴影
var brushShadow = gdip.solidBrush(0x80000000);
graphics.drawString(strPercent, font,::RECTF(rectf).offset(2,2), strformat, brushShadow);
// 文字主体
var brushText = gdip.solidBrush(0xFFFFFFFF);
graphics.drawString(strPercent, font, rectf, strformat, brushText);
brushShadow.delete();
brushText.delete();
}
// 动画逻辑
winform.plus.onAnimation = function(state,beginning,change,timestamp,duration){
// 流光移动逻辑
winform.plus.lightPos = winform.plus.lightPos + 0.02;
if(winform.plus.lightPos > 1.5) winform.plus.lightPos = -0.5;
// 进度增加逻辑
winform.plus.progress = winform.plus.progress + 0.3;
if( winform.plus.progress > 100) {
winform.close(true/*异步*/);
return;// 返回 null 停止动画
}
return state;
}
// 启动动画 (每 20 毫秒刷新一次)
winform.plus.startAnimation(15);
//设为分层透明窗口
import win.ui.layered;
win.ui.layered(winform)
winform.show();
win.loopMessage();
Markdown 格式