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

近我者赤 1月前 309

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

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

Code AardioLine:71复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
    • 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)
    • 近我者赤 1月前
      0 2

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

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

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

      找个合适的字体就行了

      Code AardioLine:10复制
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
      • 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();

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

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

    • 光庆 1月前
      0 8
      近我者赤 但同样是Tahoma字体,设计时static、plus都显示正常,而运行时static正常,plus却不正常了。
      static设计和运行时都使用gdi绘图,会自适应字体,自动切换合适的字体。plus运行时用gdip绘图,只能指定字体,不能自适应,设计时用gdi绘图,原理不一样。
    • 近我者赤 1月前
      0 9
      明白 了,有什么方法解决吗?还是只能如此了?
    • 光庆 1月前
      0 10
      近我者赤 明白 了,有什么方法解决吗?还是只能如此了?
      plus里面也可以用gdi绘制文本,但要自己写代码。不知道你要实现什么功能,根据具体情况选择合适的组件。
    • 光庆 1月前
      0 11
      Code AardioLine:24复制
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
    • 17.
    • 18.
    • 19.
    • 20.
    • 21.
    • 22.
    • 23.
    • 24.
      • 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();


    • 近我者赤 1月前
      0 12
      谢谢光庆大佬
    返回