(原标题:《利用gdip.chart库制作磁盘使用情况的图表》 本来只想介绍一下gdip.chart,奈何内容浮浅没有营养,光庆大神关于comoboxEx控件的讨论成了本帖的亮点)
aardio最近的版本增加了gdip,chart库,现在做简单图表非常方便了,简单试用了一下(用到了光神的godking.comboboxEx库),分享给初学者,图表的显示效果很不错!

import win.ui;
import godking.comboboxEx;
import sys.volume;
import fsys.info;
/*DSG{{*/
var winform = win.form(text="gdip.chart - 练习";right=903;bottom=583)
winform.add(
comboboxEx={cls="comboboxEx";left=32;top=32;right=280;bottom=66;bgcolor=0x008000;dl=1;dt=1;mode="dropdown";z=1};
plus={cls="plus";left=32;top=88;right=872;bottom=552;bgcolor=0xFFFFFF;db=1;dl=1;dr=1;dt=1;edge=1;z=2};
static={cls="static";text="磁盘使用信息";left=304;top=40;right=872;bottom=64;center=1;dl=1;dr=1;dt=1;transparent=1;z=3}
)
/*}}*/
// 导入饼图类
import gdip.chart.pie;
var chartPie = gdip.chart.pie(winform.plus)
chartPie.dataset = {
//pie
data = [0, 0];
labels = ["未使用", "已使用"];
colors = [0xFF00f930/*绿色*/, 0xFFE67E22/*紫色*/];
showPercentage = true;
};
//下拉磁盘列表
import win.imageList;
var imglst = win.imageList(32, 32)
var driveNames = {}
var driveValues = {}
var localDrives = sys.volume.getLogicalDrives();
for (i=1; #localDrives; 1) {
//加text、value
var info = sys.volume.getInfo(localDrives[i]);
var driveName = info.drive;
table.push(driveNames, driveName ++ " (" ++ ((#info.label)?info.label:"本地磁盘") ++ ")")
table.push(driveValues, driveName)
//加icon
var sfi = fsys.info.get(driveName, 0x100/*_SHGFI_ICON*/ | 0/*_SHGFI_LARGEICON*/);
var handle = sfi.hIcon
imglst.addBitmap( gdip.bitmap(handle,1).copyHandle(32,32) )
}
winform.comboboxEx.setImageList(imglst)
winform.comboboxEx.setFont(h=-16;name="宋体");
winform.comboboxEx.setItems(driveNames,,driveValues)
winform.comboboxEx.text ="👇 请下拉选择一个驱动器"
//选中下拉选项后触发该事件
winform.comboboxEx.onOk = function(){
if( owner.text !== owner.selText) {
// 获取分区空间信息
var deviceData = sys.volume.getSpaceSize(owner.getItem(owner.selIndex).value);
var totalB = deviceData.totalSize;
var freeB = deviceData.freeSize;
var usedB = totalB-freeB;
winform.static.text = "【"
winform.static.text += owner.getItem(owner.selIndex).value ++ "\ 】 ";
winform.static.text += " 总大小:" ++ math.size64(totalB).format();
winform.static.text += " (已使用:" ++ math.size64(usedB).format();
winform.static.text += " / 剩余:" ++ math.size64(freeB).format() ++ ")";
//更新pie图中的数据
chartPie.dataset.data = [freeB, usedB]
winform.plus.redrawTransparent()
thread.invoke(function(winform){
winform.plus.setFocus();
},winform)
}
}
winform.show();
win.loopMessage();