【问题请教】关于toolbar的改用过程中遇到的多线程问题请教。又加了个问题😄

近我者赤 6天前 167

光庆大佬的toolbar库解决了我长时间困扰的一个大问题,我对它作了适用自己问题的一个小改动。

但我对多线程是个一窍不通的菜鸟,在问题中一旦我要加载的符号多了,就很慢,想用多线程加载,但完全不会。请大佬指导。。。

import win.ui;
import godking.vlistEx;
import win.clip;
import godking.vlistEx.toolbar2
/*DSG{{*/
var winform = win.form(text="aardio form";right=824;bottom=562;border="dialog frame";max=false)
winform.add(
vlistEx={cls="vlistEx";text="自定义控件";left=109;top=8;right=267;bottom=188;border=1;z=1}
staticSel={cls="static";left=116;top=389;right=185;bottom=458;align="center";bgcolor=16776958;border=1;center=1;font=LOGFONT(h=-55);z=11};
)
/*}}*/

// 创建实例模板
var toolbar = godking.vlistEx.toolbar2(winform.vlistEx,{
        bkcolor = 0xF1F1F1; /*背景颜色*/
        bkimage = null;
        cellwidth = 35;        /*单元格宽度*/
        cellheight = 35;    /*单元格高度*/
        imgpadding = 0;
        textpadding = 1;     
        font={name="Segoe UI Symbol",h=24,color=0xFF000000};        /*正常字体*/
        hoverfont={name="Segoe UI Symbol",h=26,weight=500;color=0xFF070DFF};    /*鼠标划过字体*/
        lineColorH = 0xf1f1f1;
        lineColorV = 0xffffff;
})

// 添加图片
import inet.http
import godking.paint
var imgs = godking.paint.splitImage("\背景2.png",3,3,0,0,0,0);
for(i=1;#imgs;1){
    toolbar.addImg("img"++i/*图片名称*/,imgs[i]/*图片数据*/);
}

Rows=100;//全部符号的行数,太多刷新慢
Cols=20;//列数

//全部符号
winform.qbFH=function(){
	var t = {}
	import string.html;
	for(j=0;Rows-1;1){
		var tt={}	
		for(k=1;Cols;1){
			ss=j*Cols+k;
			txt="img1|img2|"++string.html.toText("&#"++ss++";");//许多字符可能会因系统问题不能显示
			..table.push(tt,txt)
		}		
		..table.push(t,tt)	
		toolbar.setItemList(t);
	}
	
	winform.vlistEx.width += winform.vlistEx.scrollbarWidth;
	winform.vlistEx.hideScroll(true/*隐藏横向滚动条*/,false/*隐藏纵向滚动条*/,false/*禁用滚轮和键盘滚动*/)
	//设置合适的表格高度,刚好容纳10行。
	winform.vlistEx.fitHeight(10);
	//设置合适的表格宽度,刚好容纳所有列。
	winform.vlistEx.fitWidth();
}
winform.qbFH();
// 定义点击事件
toolbar.onClick = function(row/*行号*/,col/*列号*/,text/*项目文本*/){
	if text===null or text==="" or text===" " return ; 
    //winform.text="您点击了第"++row++"行第"++col++"个:"++text;
	winform.staticSel.text=text;//=chrcodeTostr(winform.editH.text);
	win.clip.write(text);

}

winform.show();
win.loopMessage();


上传的附件:
最新回复 (11)
  • 近我者赤 6天前
    0 2

  • 光庆 5天前
    0 3
    toolbar.setItemList(t); 这句代码,不要放在循环语句内。
  • 近我者赤 5天前
    0 4

    果然好多了。还有一个问题,就是static控件可以显示绝大多数字符,button控件也行,但plus或custom控件就不行,比如𝑨𝑩𝑪𝑫🀇🀈🀉🀊🂡🂢🂣🂤

  • 光庆 5天前
    0 5
    近我者赤 果然好多了。还有一个问题,就是static控件可以显示绝大多数字符,button控件也行,但plus或custom控件就不行,比如𝑨𝑩𝑪𝑫🀇🀈🀉🀊🂡🂢🂣🂤

    找个合适的字体就行了

    import win.ui;
    /*DSG{{*/
    var winform = win.form(text="aardio form";right=759;bottom=469)
    winform.add(
    plus={cls="plus";text='\uD835\uDC68\uD835\uDC69\uD835\uDC6A\uD835\uDC6B\uD83C\uDC07\uD83C\uDC08\uD83C\uDC09\uD83C\uDC0A\uD83C\uDCA1\uD83C\uDCA2\uD83C\uDCA3\uD83C\uDCA4';left=140;top=250;right=620;bottom=300;font=LOGFONT(h=-48;name='Segoe UI Symbol');z=1};
    static={cls="static";text='\uD835\uDC68\uD835\uDC69\uD835\uDC6A\uD835\uDC6B\uD83C\uDC07\uD83C\uDC08\uD83C\uDC09\uD83C\uDC0A\uD83C\uDCA1\uD83C\uDCA2\uD83C\uDCA3\uD83C\uDCA4';left=180;top=110;right=590;bottom=220;font=LOGFONT(h=-48;name='Segoe UI Symbol');transparent=1;z=2}
    )
    /*}}*/
    winform.show();
    win.loopMessage();

  • 近我者赤 5天前
    0 6
    是的我也用了这种字体
  • 近我者赤 5天前
    0 7

    但同样是Tahoma字体,设计时static、plus都显示正常,而运行时static正常,plus却不正常了。

  • 光庆 5天前
    0 8
    近我者赤 但同样是Tahoma字体,设计时static、plus都显示正常,而运行时static正常,plus却不正常了。
    static设计和运行时都使用gdi绘图,会自适应字体,自动切换合适的字体。plus运行时用gdip绘图,只能指定字体,不能自适应,设计时用gdi绘图,原理不一样。
  • 近我者赤 5天前
    0 9
    明白 了,有什么方法解决吗?还是只能如此了?
  • 光庆 5天前
    0 10
    近我者赤 明白 了,有什么方法解决吗?还是只能如此了?
    plus里面也可以用gdi绘制文本,但要自己写代码。不知道你要实现什么功能,根据具体情况选择合适的组件。
  • 光庆 5天前
    0 11
    import win.ui;
    import fonts.fontAwesome
    text = 'abcd1234\uD835\uDC68\uD835\uDC69\uD835\uDC6A\uD835\uDC6B\uD83C\uDC07\uD83C\uDC08\uD83C\uDC09\uD83C\uDC0A\uD83C\uDCA1\uD83C\uDCA2\uD83C\uDCA3\uD83C\uDCA4'
    
    /*DSG{{*/
    var winform = win.form(text="aardio form";right=759;bottom=469)
    winform.add(
    plus={cls="plus";left=24;top=96;right=736;bottom=336;z=1};
    static={cls="static";text=text;left=24;top=24;right=440;bottom=88;font=LOGFONT(h=-32;name='Segoe UI');transparent=1;z=2}
    )
    /*}}*/
    
    winform.plus.onDrawContent = function(graphics,rc,txtColor,rcContent,foreColor){
    	var hdc = graphics.getDc();
    	::SetBkMode(hdc,1);
    	gdi.fillRect(hdc,0xDDFFDD,rc);
    	var font = ::LOGFONT(name="Segoe UI";h=32;color=0x0000FF);
    	..gdi.drawText(hdc,font,text,rc);
    	graphics.releaseDc(hdc);	
    } 
    winform.show();
    winform.plus.update()
    
    win.loopMessage();


  • 近我者赤 5天前
    0 12
    谢谢光庆大佬
返回