tabs中新增的adjust()和getpos()的使用,tabs选项卡之间函数的相互调用

By admin at 2018-05-10 • 1人收藏 • 1560人看过

jacen大人新增的这两个函数,非常的实用。

adjust()是tabs选项卡自适应, 这样如果你新增了或者删除了某一选项卡,就会自动调用这个函数,来达到一些目的,比如:

blob.png

这个+号,要一直贴边,这个功能可以利用adjust()实现

先定义这个函数要实现的功能:

headTabs.adjust = function(){
    var x,y,cx,cy = owner.getPos(); 
  	mainForm.plus.setPos(x+cx+2,y);
}
headTabs.adjust();

上面的意思是:获取tabs的整个位置信息,x+cx就是整个tabs在maifnorm中的位置,+2之后设置这个【+】号x轴就是这个位置,y轴不变。

设置完成之后,初始化的时候调用一次,以后就可以不管他了,它自己就可以自适应。


批量添加选项卡的代码:这里多谢jacen的指导

headTabs.addStrip = function(title,...){
	return headTabs.add({
		text=title;
		hasCloseButton = true;
	},...)	
}

headTabs.addStrip("TestA","\res\TestA.aardio")
headTabs.addStrip("TestB","\res\TestB.aardio")
headTabs.addStrip("TestC","\res\TestC.aardio")
headTabs.addStrip("TestD","\res\TestD.aardio")


4 个回复 | 最后更新于 2018-11-21
2018-05-10   #1

编写的过程中,希望点击【+】号直接能够像浏览器一样输入网址,然后自动打开这个网址,这样就更像个浏览器了。。。。

所以我在+号点击事件里添加:

import win.inputBox;
var stipWidth = headTabs.strips[1].width;
mainForm.plus.oncommand = function(id,event){
	var inputForm = win.inputBox(mainForm)
	var retStr = inputForm.doModal();
	//如果有收到数据
	if(retStr){
	        //判断是不是网址
		if( string.startWith(retStr,"http://",true) ){
			var x,y,cx,cy = headTabs.getPos(); 
    		if((mainForm.width-stipWidth) <= (x+cx)){
        		mainForm.msgbox("超出界面了!")
    			return;
    		}
    		        //添加选项卡
			headTabs.addStrip("NewPage","\res\default.aardio");
			//设置选中这个选项卡(最新即最后一个)显示
			headTabs.selIndex = #headTabs.strips;
			//调用模版界面里面的openurl()函数
			headTabs.forms[#headTabs.strips].openUrl(retStr);
			var x,y,cx,cy = headTabs.getPos(); 
			mainForm.plus.setPos(x+cx+2,y);	
		}else {
			mainForm.msgbox("请输入网址以 http:// 开头!")
		}		
	}
	
}

这样之后,输入网址,然后就添加了选项卡并且自动打开了网址浏览。

2018-05-10   #2

jacen的作业要求:有选项卡界面之间的通信....

第一时间想到的就是winform.func() 这样的,但是选项卡之间应该怎么通信?

两个任意的选项卡貌似只有mainform这个是一致的,其他都是独立的,而且jacen说界面之间不应该相互直接干扰...

那么只好用mainfrom做个中间人,其他人都和它通话,它在转发给通话方,额。貌似效率低点,但是好理解。

定一个中转站:

//全局访问中转站
mainForm.childGlobalFun = function(name,fun){
	var curForm,idx = headTabs.query( text = name );
	if(curForm){
			if(curForm[fun]){
				var ret,str = call(curForm[fun]);
				return str;	
			}else {
				return "调用函数未找到!";
			}
			
	}else {
		return "Tabs名称错误!";
	}
	
}

name是tabs的选项卡的text名,fun是准备调用那个tabs选项卡里面的函数名。

查找到要调用的选项卡窗体之后,判断存不存在这个函数,如果存在那么就call()调用这个函数,这里要注意call()后先返回是否成功调用标志,后面的才是返回的咱们需要的真实值。

被调用的函数如下:TestA选项卡界面中

winform.ccfun = function(){
	return "调用了TestA中的函数成功,并返回了此条信息!123456789"; 
}

调用的使用:TestB选项卡界面中

//调用TestA窗体中的函数
	var textStr = mainForm.childGlobalFun("TestA","ccfun");
	winform.msgbox(textStr);


2018-05-10   #3

完整的作业工程下载:

https://pan.baidu.com/s/1nuZYRvN

名字就是:作业v0.2


2018-05-10   #4

忘了记录一下那个网址打开的界面的代码:

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=1097;bottom=570;bgcolor=16777215;parent=...)
winform.add()
/*}}*/

//创建web窗体
import web.form;
var wb = web.form( winform, , , ,true/*securityTrusted*/ );
wb.noScriptErr = true;

winform.openUrl = function(url){
	wb.go(url) 
}

winform.enableDpiScaling();
winform.show();

win.loopMessage();
return winform;


登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...