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

By admin at 2018-05-10 • 0人收藏 • 425人看过

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

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轴不变。

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


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

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

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

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

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

那么只好用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;


登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...