customPlus 开启双缓冲 鼠标滑过元素(会有边框)时 出现元素闪烁现象

htstore 2023-9-18 814

  1. customPlus 开启双缓冲,鼠标滑过元素(会有边框)时,出现元素闪烁现象

    如果不开双缓冲的话 我有多个子页面 ,进行 子页面.show() 时 子页面会白屏闪烁 ( 和大佬您的库没关系

2. customPlus 选中后会有边框,而我切换其他tab时 再切回来时,那个元素仍会为选中状态,请问有什么办法能将他重置吗?

最新回复 (8)
  • 光庆 2023-9-18
    0 2
    update() 试试行不行。如果有代码能再现上面的问题,发代码上来测试一下
  • htstore 2023-9-18
    0 3

    依旧有问题 主页面

    import win.ui;
    /*DSG{{*/
    mainForm = win.form(cls="AokManger";text="AokManger 点位管理器";right=579;bottom=599;bgcolor=5522235;border="dialog frame";max=false;minimize=1)
    mainForm.add(
    choice={cls="plus";text="    未选择";left=134;top=574;right=324;bottom=593;align="left";bgcolor=4667698;border={color=-6250332;width=1};color=15793151;font=LOGFONT(name='微软雅黑');z=17};
    custom={cls="custom";left=116;top=72;right=556;bottom=512;z=1};
    getpath={cls="plus";text="浏览";left=484;top=24;right=556;bottom=51;bgcolor=4667698;border={color=-32768;width=1};color=11844285;font=LOGFONT(name='微软雅黑');notify=1;z=5};
    pathshow={cls="plus";text="  点击右侧按钮以选择您的文件夹";left=116;top=24;right=476;bottom=51;align="left";bgcolor=4667698;border={color=-32768;width=1};color=11844285;font=LOGFONT(name='微软雅黑');notify=1;z=3};
    reload={cls="plus";text="装载";left=116;top=536;right=208;bottom=568;bgcolor=4667698;border={color=-32768;width=1};color=11844285;font=LOGFONT(h=-24;name='微软雅黑');notify=1;z=16};
    strip1={cls="plus";text="传送点";left=0;top=0;right=100;bottom=50;align="left";bgcolor=4667698;clip=1;color=11844285;dl=1;dt=1;notify=1;textPadding={left=5};z=2};
    strip10={cls="plus";text="矿物";left=0;top=450;right=100;bottom=500;align="left";bgcolor=-12109518;clip=1;color=11844285;dl=1;dt=1;textPadding={left=5};z=14};
    strip11={cls="plus";text="动物";left=0;top=500;right=100;bottom=550;align="left";bgcolor=-12109518;clip=1;color=11844285;dl=1;dt=1;textPadding={left=5};z=6};
    strip12={cls="plus";text="木材";left=0;top=550;right=100;bottom=600;align="left";bgcolor=-12109518;clip=1;color=11844285;dl=1;dt=1;textPadding={left=5};z=9};
    strip2={cls="plus";text="贵重收集物";left=0;top=50;right=100;bottom=100;align="left";bgcolor=4667698;clip=1;color=11844285;dl=1;dt=1;notify=1;textPadding={left=5};z=8};
    strip3={cls="plus";text="露天宝箱";left=0;top=100;right=100;bottom=150;align="left";bgcolor=-12109518;clip=1;color=11844285;dl=1;dt=1;notify=1;textPadding={left=5};z=4};
    strip4={cls="plus";text="解谜宝箱";left=0;top=150;right=100;bottom=200;align="left";bgcolor=4667698;clip=1;color=11844285;dl=1;dt=1;textPadding={left=5};z=11};
    strip5={cls="plus";text="区域特产";left=0;top=200;right=100;bottom=250;align="left";bgcolor=4667698;clip=1;color=11844285;dl=1;dt=1;textPadding={left=5};z=13};
    strip6={cls="plus";text="见闻";left=0;top=250;right=100;bottom=300;align="left";bgcolor=-12109518;clip=1;color=11844285;dl=1;dt=1;textPadding={left=5};z=15};
    strip7={cls="plus";text="敌人";left=0;top=300;right=100;bottom=350;align="left";bgcolor=-12109518;clip=1;color=11844285;dl=1;dt=1;textPadding={left=5};z=12};
    strip8={cls="plus";text="背包/素材";left=0;top=350;right=100;bottom=400;align="left";bgcolor=-12109518;clip=1;color=11844285;dl=1;dt=1;textPadding={left=5};z=10};
    strip9={cls="plus";text="垂钓";left=0;top=400;right=100;bottom=450;align="left";bgcolor=-12109518;clip=1;color=11844285;dl=1;dt=1;textPadding={left=5};z=7};
    stripid={cls="plus";text="1";left=116;top=574;right=135;bottom=593;bgcolor=4667698;border={color=-6250332;width=1};color=15793151;font=LOGFONT(name='微软雅黑');z=18}
    )
    /*}}*/
    
    import win.ui.tabs;
    var tabs = win.ui.tabs(mainForm.strip1, mainForm.strip2, mainForm.strip3, mainForm.strip4, mainForm.strip5, mainForm.strip6, mainForm.strip7, mainForm.strip8, mainForm.strip9, mainForm.strip10, mainForm.strip11);
     
    tabs.skin(
        background = {
            default = 0xFF323947;
            focus = 0xFF3B4354
        }
    )
    
    // 先给strip1设置特色颜色
    mainForm.strip1.skin(
        background = {
            default = 0xFF3B4354;
        }
    )
    
    mainForm.strip12.skin(
        background = {
            default = 0xFF323947;
            focus = 0xFF3B4354
        }
    )
    
    
    //下面创建托盘图标
    import win.util.tray;
    
    mainForm.tray = win.util.tray(mainForm)
    mainForm.tray.tip = "AokManger" //设置鼠标提示 
    mainForm.tray.pop("欢迎使用 AokManger
    购卡 HackTools.Store")
    
    mainForm.onTrayMessage = {
    	[0x205 /*_WM_RBUTTONUP*/ ] = function(wParam) {
            //弹出托盘菜单以前,一定要前置主窗口中,避免不点击菜单不会消失,父窗口隐藏也要这样做
            win.setForeground(mainForm.hwnd)
            
            /*
            下面创建托盘弹出菜单。
            如果程序要开机启动到托盘,最好在这里创建菜单,在用户点击前不要创建菜单,
            避免系统启动时 DPI 缩放前创建的菜单字体偏小(出现这情况的机率很小)。
            如果不想重复创建菜单最好写到一个库里,然后在这里 import 即可避免上述问题。
            */
            import win.ui.menu;
            
            mainForm.popmenu = win.ui.popmenu(mainForm); //创建弹出菜单
            mainForm.popmenu.add('&退出', function(id) {
                mainForm.close()
            })
            
            mainForm.popmenu.popup();
            mainForm.popmenu.close();
        };
    	[0x202 /*_WM_LBUTTONUP*/ ] = function(wParam) {
            
        };
    	[0x203 /*_WM_LBUTTONDBLCLK*/ ] = function(wParam) {
            
        };
    	[0x404 /*_PARAM_DESTROY*/ ] = function(wParam) {
            
        };
    	[0x405 /*_PARAM_CLICKED*/ ] = function(wParam) {
            
        };
    }
    
    p1 = mainForm.custom.loadForm("D:\Program Files\aardio\project\AokManger\dlg\strip1.aardio")
    p2 = mainForm.custom.loadForm("D:\Program Files\aardio\project\AokManger\dlg\strip2.aardio")
    p1.show()	
    
    // 给strip设置亮颜色,并让其他strip初始化颜色。
    var function set_strip_color(a){
    	select(a) {
    		case 1 {
                mainForm.strip1.skin(
    		        background = {
                       default = 0xFF3B4354;
                    // focus = 0xFF3B4354
    				})
                mainForm.strip2.skin(
    		        background = {
                       default = 0xFF323947;
                       focus = 0xFF3B4354
    				})
    		}
    		case 2 {
                mainForm.strip1.skin(
    		        background = {
                       default = 0xFF323947;
                       focus = 0xFF3B4354
    				})
                mainForm.strip2.skin(
    		        background = {
                       default = 0xFF3B4354;
                    // focus = 0xFF3B4354
    				})
    		}
    		else {
    		  // ..win.msgboxErr("StripID 错误,请联系开发者。")
    		}
    	}
    }
    
    mainForm.strip1.oncommand = function(id,event){
    	p1.update()
    	p1.show()
    	mainForm.stripid.text = "1"
    	set_strip_color(tonumber(mainForm.stripid.text))
    }
    
    mainForm.strip2.oncommand = function(id,event){
    	p2.update()
    	p2.show()
    	mainForm.stripid.text = "2"
    	set_strip_color(tonumber(mainForm.stripid.text))
    }
    
    // 获取目录
    mainForm.getpath.skin(
    	background = { 
    		hover = "/res/images/btn-hover.png";
    		focus = "/res/images/btn-focus.jpg";
    		active = "/res/images/btn-active.png";
    		disabled = "/res/images/btn-disabled.png"; 
    	}
    )
    
    import fsys.dlg.dir;
    mainForm.getpath.oncommand = function(id,event){
    	path = fsys.dlg.dir()
    	if(path != null){
    		mainForm.pathshow.text = " " + path;
    	}
    }
    
    // 复制文件
    mainForm.reload.skin(
    	background = { 
    		hover = "/res/images/btn-hover.png";
    		focus = "/res/images/btn-focus.jpg";
    		active = "/res/images/btn-active.png";
    		disabled = "/res/images/btn-disabled.png"; 
    	}
    )
    
    mainForm.reload.oncommand = function(id,event){
    	..win.msgbox(choice)
    }
    
    mainForm.show();
    win.loopMessage();

    子页面

    import win.ui;
    /*DSG{{*/
    var winform = win.form(text="贵重收集物";right=439;bottom=439;bgcolor=5522235;border="dialog frame";max=false;mode="popup")
    winform.add(
    plus={cls="plus";left=0;top=0;right=440;bottom=440;clipBk=false;db=1;dl=1;dr=1;dt=1;notify=1;z=1}
    )
    /*}}*/
    
    winform.show(); 
    
    // 定义项目模板
    var itemModel = {
            {   
                type="rect", 
                rectf={x=3;y=3;width=-3;height=-3},
                click=true;
                check=true; 
                width=2, 
                round=2, 
                color=0xFF323947,
                fillcolor=0xBF323947,   
                hovercolor=0xBBD3BC8E,
                itemselectedcolor=0xBBD3BC8E,
                cur=32649,
            }
            {   
                type="img", 
                name="png",
                rectf={x=6;y=6;width=44;height=44},
                scale=true,
            }
    }
    
    //生成项目列表
    var itemList = {
    	{
    		id=1,
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\风神瞳.png"
    	}
    	{
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\岩神瞳.png"
    	}
    	{
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\雷神瞳.png"
    	}
    	{
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\草神瞳.png"
    	}
    	{
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\水神瞳.png"
    	}
    	{
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\绯红玉髓.png"
    	}
        {
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\键纹Ⅱ.png"
    	}
    	 {
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\键纹Ⅲ.png"
    	}
    	 {
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\键纹Ⅳ.png"
    	}
    	 {
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\圣章石.png"
    	}
    	 {
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\老石.png"
    	}
    	 {
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\旋曜玉帛.png"
    	}
    	 {
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\棋盘棋子.png"
    	}
        {
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\神秘的石板.png"
    	}
    	{
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\「棋子」激活器件.png"
    	}
    	{
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\净光翎.png"
    	}
    	{
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\忧昙花.png"
    	}
    	{
    		png="D:\Program Files\aardio\project\AokManger\res\贵重收集物\灵光铭文的残片.png"
    	}
    }
    
    //构造组件
    import godking.customPlus
    var list = godking.customPlus(winform.plus,itemModel,itemList,{
    	itemWidth=55, 	/*项目最小宽度,为0时根据colnum自动计算,所以不能与colnum同时=0*/
    	itemHeight=55,	/*项目最小高度,为0时根据rownum自动计算,所以不能与rownum同时=0*/
    	autoSizeWidth=false,	/*为true则自动将项目总宽度拉伸填满plus宽度,每个项目宽度不小于itemWidth*/
    	autoSizeHeight=false,	/*为true则自动将项目总高度拉伸填满plus高度,每个项目高度不小于itemHeight*/
    	rownum=0, 	/*项目行数,为0时根据itemHeight自动计算,所以不能与itemHeight同时=0*/
    	colnum=0, 	/*项目列数,为0时根据itemWidth自动计算,所以不能与itemWidth同时=0*/
    	padLeft=0,	/*plus左边空白距离*/
    	padTop=0,	/*plus顶边空白距离*/
    	padRight=0,	/*plus右边空白距离*/
    	padBottom=0, /*plus底边空白距离*/
    	autoFit=false, 	/*是否自动调整plus组件宽度或高度(其中之一),保证能刚好显示全部行或列*/
    					/*当 itemHeight>0 且 colnum>0 且 rownum=0 时,自动调整plus高度,以能显示全部行*/
    					/*当 itemWidth>0 且 rownum>0 且 colnum=0 时,自动调整plus宽度,以能显示全部列*/
    	vertical=false, /*是否将项目设置为竖向排列,行滚动方向设置为横向*/
    	bkcolor=0xFF3b4354, /*背景颜色*/
    	bkimg=null, /*背景图像*/
    })
     
    list.onClick = function(itemIndex){
    	select(itemIndex) {
    		case 1 {
    			mainForm.choice.text = "  /贵重收集物/风神瞳"
    		}
    		case 2 {
    			mainForm.choice.text = "  /贵重收集物/岩神瞳"
    		}
    		case 3 {
    			mainForm.choice.text = "  /贵重收集物/雷神瞳"
    		}
    		case 4 {
    			mainForm.choice.text = "  /贵重收集物/草神瞳"
    		}
    		case 5 {
    			mainForm.choice.text = "  /贵重收集物/水神瞳"
    		}
    		case 6 {
    			mainForm.choice.text = "  /贵重收集物/绯红玉髓"
    		}
    		case 7 {
    			mainForm.choice.text = "  /贵重收集物/键纹Ⅱ"
    		}
    		case 8 {
    			mainForm.choice.text = "  /贵重收集物/键纹Ⅲ"
    		}
    		case 9 {
    			mainForm.choice.text = "  /贵重收集物/键纹Ⅳ"
    		}
    		case 10 {
    			mainForm.choice.text = "  /贵重收集物/圣章石"
    		}
    		case 11 {
    			mainForm.choice.text = "  /贵重收集物/老石"
    		}
    		case 12 {
    			mainForm.choice.text = "  /贵重收集物/旋曜玉帛"
    		}
    		case 13 {
    			mainForm.choice.text = "  /贵重收集物/棋盘棋子"
    		}
    		case 14 {
    			mainForm.choice.text = "  /贵重收集物/神秘的石板"
    		}
    		case 15 {
    			mainForm.choice.text = "  /贵重收集物/「棋子」激活器件"
    		}
    		case 16 {
    			mainForm.choice.text = "  /贵重收集物/净光翎"
    		}
    		case 17 {
    			mainForm.choice.text = "  /贵重收集物/忧昙花"
    		}
    		case 18 {
    			mainForm.choice.text = "  /贵重收集物/灵光铭文的残片"
    		}
    		else {
    			..win.msgboxErr("错误,请联系开发者。")
    		}
    	}
    }
    
    winform.adjust = function( cx,cy,wParam ) {	 
    	list.init()  
    };
     
    win.loopMessage();

    感谢大佬

    上传的附件:
  • 光庆 2023-9-18
    0 4

    解决方案一:

    1、strip1、strip2 等窗口中加入如下代码:

    winform.clear = function(){
    	list.selectedIndex=0
    }

    2、主窗口中这样调用:

    mainForm.strip1.oncommand = function(id,event){
    	p1.clear()
    	p1.show()
    	mainForm.stripid.text = "1"
    	set_strip_color(tonumber(mainForm.stripid.text))
    }
    
    mainForm.strip2.oncommand = function(id,event){
    	p2.clear()
    	p2.show()
    	mainForm.stripid.text = "2"
    	set_strip_color(tonumber(mainForm.stripid.text))
    }


    方案二:

    1、strip1、strip2 等窗口中,list声明为窗口成员,而不要用var声明为局部变量,如下:

    winform.list = godking.customPlus(winform.plus,itemModel,itemList,{

    相应的,代码内所有的list调用,也要改用winform.list调用。

    2、主窗口中这样调用:

    mainForm.strip1.oncommand = function(id,event){
    	p1.list.selectedIndex=0
    	p1.show()
    	mainForm.stripid.text = "1"
    	set_strip_color(tonumber(mainForm.stripid.text))
    }
    
    mainForm.strip2.oncommand = function(id,event){
    	p2.list.selectedIndex=0
    	p2.show()
    	mainForm.stripid.text = "2"
    	set_strip_color(tonumber(mainForm.stripid.text))
    }

    方案三:

    1、strip1、strip2 等窗口中,添加如下代码:

    winform.onPosChanged = function(flags,hwndInsertAfter,x,y,cx,cy){ 
    		list.selectedIndex = 0	
    }

    2、主窗口中这样调用:

    mainForm.strip1.oncommand = function(id,event){
    	p1.show()
    	mainForm.stripid.text = "1"
    	set_strip_color(tonumber(mainForm.stripid.text))
    }
    
    mainForm.strip2.oncommand = function(id,event){
    	p2.show()
    	mainForm.stripid.text = "2"
    	set_strip_color(tonumber(mainForm.stripid.text))
    }


  • 光庆 2023-9-18
    0 5

    另:解决切换窗口会闪烁的问题:

    给主窗口的tbs容器custom设置一个背景,跟主窗口背景一致就行了。

    custom={cls="custom";left=116;top=72;right=556;bottom=512;bgcolor=5522235;z=1};


  • 光庆 2023-9-18
    0 6

    改好的代码,见附件。

    上传的附件:
  • htstore 2023-9-19
    0 7
    光庆 改好的代码,见附件。
    感谢大佬
返回