aardio选项与菜单函数

1. 清理列表框

1 winform.btnClear.oncommand = function(id,event){
2     winform.listbox.clear(); 清空
3     winform.static.text = "";
4     winform.redraw(); 刷新
5 }

2. 字符串简单格式化

1 winform.static.text =  string.format( '您选中了第%d项\n总计%d项\n项名:%s',winform.listbox.selIndex,winform.listbox.count,winform.listbox.text);
2 后面依次为参数

3.列表框添加项

1 winform.btnAdd.oncommand = function(id,event){
2     str = winform.edit.text;
3     winform.listbox.add(str)
4     winform.combobox.add(str)
5     winform.combobox.selText =  str 
6     winform.listbox.selIndex = winform.listbox.count;
7 }

4. 右键菜单

 1 //右键菜单
 2 import win.ui;
 3 import win.ui.menu; //菜单库
 4 
 5 winform.listbox.wndproc = function(hwnd,message,wParam,lParam){
 6     select( message ) { 
 7         case 0x205/*_WM_RBUTTONUP*/{
 8             var x,y = win.getMessagePos();   //获得鼠标位置
 9             var item = winform.listbox.hitTest(x,y,true); //返回屏幕坐标句柄,第三个参数表示是否是屏幕坐标
10             if( item ){
11                 winform.listbox.selIndex = item; //设置选中的索引
12                 popmenu.popup(x,y,true)  //popup弹出坐标,第三个参数如上
13             }
14         } 
15     }
16 }
17 
18 //创建弹出菜单
19 popmenu = win.ui.popmenu(winform); 
20 popmenu.add('删除',function(id){  //add(标题,回调函数)
21         winform.listbox.delete()
22 } ) 
23 
24 
25 
26 winform.show() 
27 win.loopMessage();

 5. checklist 响应

 1 //checklist响应点选
 2 import win.ui;
 3 
 4 
 5 winform.checklist.items = { "测试项目";"测试项目2";"测试项目3" }   
 6 winform.checklist.addItem("测试项目4")  
 7 winform.checklist.addItem("测试项目5")  
 8 
 9 import win.ui.menu;
10 winform.checklist.onnotify = function(id,code,ptr){  
11       if( code == 0xFFFFFF9B/*_LVN_ITEMCHANGED*/ ){ 
12           var nmListView = winform.checklist.getNotifyMessage(code,ptr);
13           if( !nmListView )
14               return;
15               
16           if( nmListView.uNewState & 0xF000/*_LVIS_STATEIMAGEMASK*/){
17               var selIndex = nmListView.iItem;
18               if( winform.checklist.getChecked( selIndex ) )
19                   winform.static.text = "选中:" + selIndex
20               else {
21                   winform.static.text = "取消选中:" + selIndex
22               } 
23           }  
24       }
25       elseif( code = 0xFFFFFFFB/*_NM_RCLICK*/ ){
26       
27           var x,y = win.getMessagePos();  
28           var nmListView = winform.checklist.getNotifyMessage(code,ptr);
29           //创建弹出菜单
30         var popmenu = win.ui.popmenu(winform); 
31         popmenu.add('删除',function(id){ 
32                 winform.checklist.delItem( nmListView.iItem )
33         } ) 
34         popmenu.popup(x,y,true);
35         popmenu.close();
36       }
37 }
38  
39 winform.show() 
40 win.loopMessage();

6. 编辑listview

 1 //编辑listview
 2 
 3 import win.ui;
 4 /*DSG{{*/
 5 var winform = ..win.form(text="aardio form";right=343;bottom=244;parent=...)
 6 winform.add(
 7 btnEdit={cls="button";text="编辑当前选中项";left=175;top=191;right=283;bottom=223;z=2};
 8 listview={cls="listview";left=25;top=23;right=310;bottom=182;bgcolor=16777215;edge=1;editable=true;z=1}
 9 )
10 /*}}*/
11 
12 //注意在上面的listview属性中,一定要指定 editable=true
13 
14 winform.listview.insertColumn("测试项",300) // 插入列,宽度300
15 winform.listview.items = {"鼠标点这里,稍候再点击一次";"鼠标单击选中项则进入编辑模式"}
16 
17 winform.btnEdit.oncommand = function(id,event){
18     winform.listview.editLable()  //点击进入编辑
19 }
20 
21 winform.listview.onnotify = function(id,code,ptr){
22      if(code = 0xFFFFFF97/*_LVN_BEGINLABELEDIT*/ ){ 
23          return false; //允许编辑项
24      }
25      if( code == 0xFFFFFF96/*_LVN_ENDLABELEDIT*/ ){
26          var dispInfo = winform.listview.getNotifyDispInfo(code,ptr); 
27          if( dispInfo ? dispInfo.item.text ) {
28             winform.listview.setItemText( dispInfo.item.text, dispInfo.item.iItem,dispInfo.item.iSubItem );
29          }
30      }
31 }
32 
33 winform.show()  
34 win.loopMessage();

 

oncommand 是普通窗口控件的命令消息(例如按钮) 
onnotify 是通用控件的通知消息(例如tab控件),实际上是命令消息的一个增强版本,本质一样,只不过能够在消息中传送更多的附加数据。

 

wndproc是消息回调,可以处理所有发给控件的消息,例如鼠标在控件上移动的_WM_MOUSEMOVE消息。至于每一个消息的wParam,lParam都有不同的含义,具体应用可以到MSDN或百度百科查一下,都非常详细。

 

wndproc是处理“我正在做什么…………”的消息,是内部实现。 
oncommand,onnotify是处理“我被怎么怎么样了………..”的消息,即与用户交互,是与外部交互。

 

用得最多的是命令与通知, 一般用不到消息回调, 除非是要修改控件的一些默认行为

 7.listview响应

  1 //listview响应事件
  2 import win.ui;
  3 import win.ui.menu;
  4 /*DSG{{*/
  5 var winform = ..win.form(text="aardio form";right=349;bottom=249;parent=...)
  6 winform.add(
  7 listview={cls="listview";left=37;top=36;right=303;bottom=207;acceptfiles=1;asel=false;bgcolor=16777215;dl=1;dr=1;edge=1;font=LOGFONT( name='SimSun' );fullRow=1;gridLines=1;msel=false;z=1};
  8 static={cls="static";text="请使用鼠标左键、鼠标右键点击列表项";left=37;top=10;right=310;bottom=28;transparent=1;z=2}
  9 )
 10 /*}}*/
 11 
 12 winform.popmenu = win.ui.popmenu(winform);//创建弹出菜单
 13 winform.popmenu.add('删除',function(id){
 14     //在下面输入菜单响应代码
 15     winform.listview.delItem( winform.listview.selIndex )
 16 });
 17 
 18 //双击listview控件添加下面的代码
 19 import mouse;
 20 import win.util.tray;
 21 winform.listview.onnotify = function(id,code,ptr){ 
 22     
 23     select(code) {
 24         case  0xFFFFFF9B/*_LVN_ITEMCHANGED*/ {
 25             var nm = winform.listview.getgetNotifyMessage(code,ptr)   //返回受点击的项的对象
 26             if(winform.listview.selIndex){
 27                 winform.static.text = "选中了" +  winform.listview.getItemText(nm.iItem,nm.iSubItem)
 28                 win.util.tray.pop( winform.static.text )
 29             }
 30         }
 31         case 0xFFFFFF94/*_LVN_COLUMNCLICK*/ {
 32             winform.static.text = "请实现排序"
 33             win.util.tray.pop("请实现排序")
 34         }
 35         case 0xFFFFFFFB/*_NM_RCLICK*/  {
 36             var x,y = mouse.getPos()
 37             winform.popmenu.popup(x,y,true);//弹出菜单
 38         }
 39     }
 40     
 41 }
 42 
 43 //接受拖放文件并修改指定列
 44 winform.listview.wndproc = function(hwnd,message,wParam,lParam){
 45     select(message) { 
 46         case 0x233/*_WM_DROPFILES*/{ 
 47             var path = win.getDropFile(wParam )[1];  
 48             var row,col = winform.listview.hitTest();
 49             winform.listview.setItemText(path,row,col);
 50         } 
 51     }
 52 }
 53 
 54 //自适应列宽度 
 55 winform.listview.adjust = function(cx,cy){
 56     winform.listview.fillParent(/*列序号*/);
 57 } 
 58  
 59 winform.listview.insertColumn("列标题2",100,,0x0/*_LVCFMT_LEFT*/) //没有这句话,listview就不能用
 60 winform.listview.insertColumn("列标题1",100,,0x0/*_LVCFMT_LEFT*/) //第二列开始可以使用_LVCFMT_CENTER居中
 61 
 62 winform.listview.addItem( { 
 63     text={"第一行内容";"yes"} 
 64 } )
 65 winform.listview.addItem("第二行内容")
 66 winform.listview.addItem("第三行内容") 
 67 
 68 winform.listview.setItemText("改变第三行",3)
 69 winform.listview.setItemText( {
 70     "改变第二行";"第二列"
 71 },2);
 72  
 73 
 74 winform.show() 
 75 win.loopMessage();
 76 
 77 /*
 78 _LVN_BEGINDRAG 鼠标左键正在被触发以便进行拖放操作(当鼠标左键开始拖拽列表视图控件中的项目时产生)
 79 _LVN_BEGINRDRAG 鼠标右键正在被触发以便进行拖放操作(当鼠标右键开始拖拽列表视图控件中的项目时产生)
 80 _LVN_BEGINLABELEDIT 开始编辑项的文本
 81 _LVN_COLUMNCLICK 单击列(当鼠标单击列表视图控件列标题时产生)
 82 _NM_CLICK 当鼠标单击列表视图控件时产生
 83 _LVN_COLUMNCLICK 单击列
 84 _LVN_DELETEALLITEMS 删除所有项
 85 _LVN_DELETEITEM 删除某个项
 86 _NM_DBLCLK 当鼠标双击列表视图控件时产生
 87 _LVN_ENDLABELEDIT 结束对项文本的编辑
 88 _LVN_GETDISPINFO 请求需要显示的信息
 89 _LVN_GETINFOTIP 请求显示在工具提示窗口内的附加的文本信息
 90 _LVN_HOTTRACK 鼠标滑过某个项
 91 _LVN_INSERTITEM 当向列表视图控件插入项目时产生
 92 _LVN_ITEMACTIVATE 激活某个项
 93 _LVN_ITEMCHANGED 某个项已经发生变化
 94 _LVN_ITEMCHANGING 某个项目正在发生变化
 95 _NM_KILLFOCUS 当视表列图控件失去焦点时产生
 96 _LVN_KEYDOWN 某个键被按下
 97 _LVN_MARQUEEBEGIN 开始某个边框选择
 98 _NM_OUTOFMEMORY 当内存溢出时产生
 99 _LVN_ODCACHEHINT 虚拟列表控件的显示区域的内容发生了变化
100 _LVN_ODSTATECHANGED 虚拟列表的控件的某个项或某个范围内的项已经发生变化
101 _LVN_ODFINDITEM 需要拥有者查找一个特定的回调项
102 _NM_RCLICK 当鼠标右键单击列表视图控件时产生
103 _NM_RDBLCLK 当鼠标右键双击列表视图控件时产生
104 _NM_SETFOCUS 当列表视图控件获得焦点时产生
105 _LVN_SETDISPINFO 父窗口必须更新控件为项所维护的信
106 */ 

 listview 总结:

函数有 

.getChecked() 是否选中

.addItem() 

.setItemText()

 综合练习:listview综合运用

       

import win.ui;
import sqlite;
import console;
/*DSG{{*/
var winform = ..win.form(text="AAuto Form";right=596;bottom=433;parent=...)
winform.add(
btn_adddb={cls="button";text="添加中数据到数据库";left=416;top=12;right=555;bottom=67;z=11};
btnDelete={cls="button";text="删除表中数据";left=473;top=388;right=560;bottom=415;z=2};
ed_age={cls="edit";left=277;top=10;right=369;bottom=32;edge=1;z=6};
ed_kg={cls="edit";left=279;top=48;right=371;bottom=70;edge=1;z=5};
ed_love={cls="edit";left=108;top=53;right=200;bottom=73;edge=1;z=4};
ed_name={cls="edit";left=109;top=13;right=201;bottom=37;edge=1;z=3};
listview={cls="listview";left=31;top=100;right=561;bottom=369;bgcolor=16777215;edge=1;fullRow=1;gridLines=1;items={};z=1};
static={cls="static";text="name:";left=49;top=18;right=91;bottom=38;transparent=1;z=7};
static2={cls="static";text="age:";left=218;top=14;right=260;bottom=34;transparent=1;z=8};
static3={cls="static";text="kg:";left=219;top=52;right=261;bottom=72;transparent=1;z=9};
static4={cls="static";text="love:";left=48;top=55;right=90;bottom=70;transparent=1;z=10}
)
/*}}*/

winform.listview.setExtended(0x4/*_LVS_EX_CHECKBOXES*/); //指定listview的样式,有单击选中,全行选中等等
winform.listview.insertColumn("id",50,1)
winform.listview.insertColumn("name",100,2) //插入列,(名称,宽度,位置,样式)
winform.listview.insertColumn("age",150,3)
winform.listview.insertColumn("kg",100,4)
winform.listview.insertColumn("love",100,5)


//打开数据库链接
sqlConnection=sqlite("\db.db")
if(not sqlConnection.existsTable("file")){        
            sqlConnection.exec("CREATE TABLE file( 
                     id INTEGER PRIMARY KEY AUTOINCREMENT,  
                     name,
                     age,
                     kg,
                     love
                    );"
            )
            win.msgbox("创建表成功","AAuto")
            //创建索引利于查询
            //sqlConnection.exec("create index 索引名字 on 表名字(索引字段名字)")
            
}else {

                var db=sqlConnection.getTable("SELECT * FROM file");
//lisetview输出结果最常用的方式
for(i=1;#db;1){ winform.listview.addItem(); //只用来创建,设置用下面的set winform.listview.setItemText(tostring(db[i].id),i,1) winform.listview.setItemText(db[i].name,i,2) winform.listview.setItemText(tostring(db[i].age),i,3) winform.listview.setItemText(tostring(db[i].kg),i,4) winform.listview.setItemText(db[i].love,i,5) } } //刷新listview Refresh_main=function(){ winform.listview.clear(); var db=sqlConnection.getTable("SELECT * FROM file"); for(i=1;#db;1){ winform.listview.addItem(); winform.listview.setItemText(tostring(db[i].id),i,1) winform.listview.setItemText(db[i].name,i,2) winform.listview.setItemText(tostring(db[i].age),i,3) winform.listview.setItemText(tostring(db[i].kg),i,4) winform.listview.setItemText(db[i].love,i,5) } } //删除所选数据 delete_db = function(){ for(i=1;winform.listview.count;1){ if(winform.listview.getChecked(i)){ var id=winform.listview.getItemText(i,1) sqlConnection.exec("DELETE FROM file WHERE id="+id+"") } } win.msgbox("删除成功","系统提示") Refresh_main() } //查询表中相同的并删除 delete_thesame = function(name){ sqlConnection.exec("DELETE FROM file where name not in(select max(id) from file group by name)") } //查询表中相同姓名 select_db = function(name){ return sqlConnection.getTable("select name from file where name='"+name+"'"); } //查询表中有相同数据的便覆盖掉 the_same = function(name,age,kg,love){ var num = sqlConnection.exec("insert into file(name,age,kg,love) select '"+name+"','"+age+"','"+kg+"','"+love+"' where not exists(select * from file where name='"+name+"');") win.msgbox("添加成功","系统提示") Refresh_main() } //修改表中数据 update_db = function(id,name,age,kg,love){ var doubt=win.msgboxTest("确定修改并且更新到数据库?","系统提示"); if(doubt){ sqlConnection.exec("UPDATE file SET name='"+name+"',age='"+age+"',kg='"+kg+"',love='"+love+"' WHERE id ='"+id+"'"); } } //添加 add_db =function(name,age,kg,love){ var add=sqlConnection.exec("insert into file (name,age,kg,love) values('"+name+"','"+age+"','"+kg+"','"+love+"')") win.msgbox("添加成功","系统提示") Refresh_main(); } //listview原地编辑并更新到数据库 winform.listview.onnotify = function(id,code,ptr){ if(code=0xFFFFFFFE/*_NM_CLICK*/ ){ var notifyMessage = winform.listview.getNotifyMessage(code,ptr); if( ! notifyMessage.iItem && notifyMessage.iSubItem ) return ; var edit = winform.listview.editlable if( ! edit ){ winform.listview.addCtrl( editlable = { cls="edit";font = LOGFONT( h = 11 );left = 0;top = 0; right = 50;bottom = 50;autoResize = false ;hide = 1;edge = 1; wndproc = function( hwnd, message, wParam, lParam ){ if( ( message = 0x8/*_WM_KILLFOCUS*/) || message == 0x101/*_WM_KEYUP*/ && wParam == 0xD/*_VK_RETURN*/){ // 按下了回车键或失去焦点,更新listview数据 owner.parent.setItemText( owner.text, owner.listViewNotifyMessage.iItem , owner.listViewNotifyMessage.iSubItem ); //获取选中的焦点 var focus=winform.listview.getFocused() if(focus!=0){ var id=winform.listview.getItemText(focus,1);//第i行第一列 var name=winform.listview.getItemText(focus,2); var age=winform.listview.getItemText(focus,3); var kg=winform.listview.getItemText(focus,4); var love=winform.listview.getItemText(focus,5); console.log(id,name,age,kg,love) //更新语句update update_db(id,name,age,kg,love); //调用刷新 Refresh_main(); } owner.show(false); } } } ) edit = winform.listview.editlable; } edit.listViewNotifyMessage = notifyMessage; edit.text=winform.listview.getItemText(notifyMessage.iItem,notifyMessage.iSubItem); var rc=winform.listview.getItemRect( notifyMessage.iItem,notifyMessage.iSubItem,,2/*_LVIR_LABEL*/ ) rc.right += 5; rc.bottom += 5; edit.setRect(rc); edit.show(); edit.setFocus();// 获取焦点 } } //删除所选数据 winform.btnDelete.oncommand = function(){ win.util.tooltip.pop("这是一个提示",,,2000) var bool=win.msgboxTest("确定删除?","系统提示") if(bool){ delete_db(); } } //添加数据到db winform.btn_adddb.oncommand = function(){ var name=winform.ed_name.text; var age =winform.ed_age.text; var kg =winform.ed_kg.text; var love=winform.ed_love.text; var name_01; var num=select_db(name); for(i=1;#num;1){ name_01=num[i].name; } if(name_01!=null){ win.msgbox("该名称数据库已经存在","系统提示") }else { if(name!="" ? age!=null ? kg!=null ? love!=""){ add_db(name,age,kg,love) } } } winform.show() win.loopMessage(); return winform;

 

posted @ 2015-10-07 15:59  遥月  阅读(4083)  评论(0编辑  收藏  举报