//窗体中添加 listbox 控件
msel = true/false 是否允许多选
允许多选
winform.add(
listbox={ bgcolor=16777215;bottom=296;right=222;left=71;
items={"列表内容" };msel=1;z=1;top=95;edge=1;cls="listbox" }
)
不允许多选
winform.add(
listbox={ bgcolor=16777215;bottom=296;right=222;left=71;top=95;
items={ "列表内容"};z=1;edge=1;cls="listbox" }
)
//刷新listview
Refresh_main=function(){
winform.listview.clear();
var db=sqlConnection.getTable("SELECT * FROM file");//db为每行数据组成的数组,db[1].kg表示第一行的kg列数据
//lisetview输出结果最常用的方式
for(i=1;#db;1){ //#db表示对象的数量
winform.listview.addItem(); //只用来创建,设置用下面的set
winform.listview.setItemText(tostring(db[i].id),i,1)
winform.listview.setItemText(tostring(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(tostring(db[i].love),i,5)
}
}
//删除所选数据
delete_db = function(){
for(i=1;winform.listview.count;1){ //注意count属性
//通过for循环判断是否选中,选中则删除
if(winform.listview.getChecked(i)){
var id=winform.listview.getItemText(i,1) //行,列
sqlConnection.exec("DELETE FROM file WHERE id="+id+"")
}
}
win.msgbox("删除成功","系统提示") //弹窗标题为 系统提示
Refresh_main()
}
//listview原地编辑并更新到数据库
winform.listview.onnotify = function(id,code,ptr){
if(code=0xFFFFFFFE/*_NM_CLICK*/ ){ //单击视图控件
var notifyMessage = winform.listview.getNotifyMessage(code,ptr); //code为通知码,指向listview则返回响应点击的对象,iItem为行号,iSubItem 为列号
if( ! notifyMessage.iItem && notifyMessage.iSubItem ) return ;
var edit = winform.listview.editlable //检测有没有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 ){ //后两个参数是对第二个参数的补充,wndproc为窗口进程
if( ( message ==0x8/*_WM_KILLFOCUS*/)
|| message == 0x101/*_WM_KEYUP*/ && wParam == 0xD/*_VK_RETURN*/){ //回车信息用wParam传送
// 按下了回车键或失去焦点,更新listview数据
owner.parent.setItemText( owner.text, owner.listViewNotifyMessage.iItem //注意owner的用法
, owner.listViewNotifyMessage.iSubItem );
//以上为界面部分完成,下面为数据库更新
//获取选中的焦点
var focus=winform.listview.getFocused() //将函数赋给变量focus,获得行号,没有则返回0,即false
if(focus!=0){
var id=winform.listview.getItemText(focus,1);//第x行第一列
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*/ ) //rect结构体对象,有四个属性right,left等
rc.right += 5; rc.bottom += 5; //用;可以连写
edit.setRect(rc);
edit.show();
edit.setFocus();// 获取焦点
}
}
//listview原地编辑并更新到数据库
winform.listview.onnotify = function(id,code,ptr){
if(code==0xFFFFFF4B){// 滚动条
if(!winform.listview.editlable) return ;
edit = winform.listview.editlable;
rc=winform.listview.getItemRect(edit.listViewNotifyMessage.iItem,edit.listViewNotifyMessage.iSubItem,,2/*_LVIR_LABEL*/);
if(rc.top<rc.bottom-rc.top){//选中行向上滚动到了列标题及其以上的位置,不处理的话编辑框会覆盖掉列标题。
rc.top-=math.abs(rc.bottom);rc.bottom=rc.top;
}else {
rc.right += 5; rc.bottom += 5;
}
edit.setRect(rc);
winform.listview.redraw();//经测试,这行会引起滚动条位置变化时listview控件闪烁,如果在意这个问题,请主动给listview控件增加_WS_CLIPCHILDREN样式,可以省略掉这行。
}
if(code=0xFFFFFFFD/*_NM_DBLCLK*/ ){ //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 );//列号
//console.log(owner.text, owner.listViewNotifyMessage.iItem, owner.listViewNotifyMessage.iSubItem) //测试显示数据
var focus=owner.listViewNotifyMessage.iItem
var id=winform.listview.getItemText(focus,1);//focus=第i行,第1列
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*/ ) //最后参数是控制选取范围
winform.msgbox(rc.right)
rc.right += 55; rc.bottom += 55;
edit.setRect(rc);
edit.show();
edit.setFocus();// 获取焦点
}
}
//检查重复项
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)
}
}
}
/* _LVN_BEGINDRAG 鼠标左键正在被触发以便进行拖放操作(当鼠标左键开始拖拽列表视图控件中的项目时产生) _LVN_BEGINRDRAG 鼠标右键正在被触发以便进行拖放操作(当鼠标右键开始拖拽列表视图控件中的项目时产生) _LVN_BEGINLABELEDIT 开始编辑项的文本 _LVN_COLUMNCLICK 单击列(当鼠标单击列表视图控件列标题时产生) _NM_CLICK 当鼠标单击列表视图控件时产生 _LVN_COLUMNCLICK 单击列 _LVN_DELETEALLITEMS 删除所有项 _LVN_DELETEITEM 删除某个项 _NM_DBLCLK 当鼠标双击列表视图控件时产生 _LVN_ENDLABELEDIT 结束对项文本的编辑 _LVN_GETDISPINFO 请求需要显示的信息 _LVN_GETINFOTIP 请求显示在工具提示窗口内的附加的文本信息 _LVN_HOTTRACK 鼠标滑过某个项 _LVN_INSERTITEM 当向列表视图控件插入项目时产生 _LVN_ITEMACTIVATE 激活某个项 _LVN_ITEMCHANGED 某个项已经发生变化 _LVN_ITEMCHANGING 某个项目正在发生变化 _NM_KILLFOCUS 当视表列图控件失去焦点时产生 _LVN_KEYDOWN 某个键被按下 _LVN_MARQUEEBEGIN 开始某个边框选择 _NM_OUTOFMEMORY 当内存溢出时产生 _LVN_ODCACHEHINT 虚拟列表控件的显示区域的内容发生了变化 _LVN_ODSTATECHANGED 虚拟列表的控件的某个项或某个范围内的项已经发生变化 _LVN_ODFINDITEM 需要拥有者查找一个特定的回调项 _NM_RCLICK 当鼠标右键单击列表视图控件时产生 _NM_RDBLCLK 当鼠标右键双击列表视图控件时产生 _NM_SETFOCUS 当列表视图控件获得焦点时产生 _LVN_SETDISPINFO 父窗口必须更新控件为项所维护的信 */ 智能命令提示: 属性列表 1.动态添加内容及删除内容函数 listbox.add(__/*请输入文本*/,1) = 添加列表项到头部, 函数第二个 listbox.add(__/*请输入文本*/) = 添加列表项到尾部 listbox.add(__/*请输入文本*/,-1) = 添加列表项到尾部 listbox.add("添加项",位置) = 添加列表项到指定位置,第二个参数为位置数值 listbox.delete() = 删除当前选中项或第一项,删除后列表内容自动向上 listbox.delete(__) = 删除指定项,参数为位置数值 listbox.clear() = 清除列表框所有内容 2.选择类函数 listbox.items = 列表项集合table对象 listbox.count = 列表项数目 listbox.getItemText(__/*项索引*/) = 获取指定项文本,参数为位置数值 listbox.getItemRect(__/*项索引*/) = 获取指定项区块位置返回::RECT() 结构体 listbox.selIndex = 获取或设置列表框当前选中项(仅在单选模式下有效) 多选模式下请使用 getSelected() setSelected() 函数 listbox.selText = 获取当前选项的文本或根据指定的文本查找并改变选项 listbox.getAt(x,y) = 返回指定客户区坐标所在的项索引. listbox.hitTest(.(x坐标,y坐标,是否屏幕坐标) = 该函数返回指定坐标的句柄,参数三可省略,默认为false.如果不指定任何参数,则自动获取当前消息坐标 3.控制类函数 listbox.hwnd = 控件句柄 listbox.id = 控件ID listbox._parentForm = 控件所在的父窗口(指win.form对象)winform. listbox.getParent() = 返回父窗口static. listbox.setParent(__/*控件对象*/) = 改变父窗口 listbox.addCtrl = @.addCtrl( edit ={ cls="edit";left=0;top=0;right=50;bottom=50;autoResize=false ;hide=1;edge=1; }) 位置属性 listbox.left = 左侧坐标 listbox.right = 右侧坐标 listbox.top = 顶部坐标 listbox.bottom = 底部坐标 listbox.width = 宽度 listbox.height = 高度 listbox.getFont() = 控件字体(::LOGFONT结构体)logfont. listbox.setFont(__/*指定字体*/) = 指定LOGFONT字体对象,或逻辑字体句柄 listbox.setFont(混入字体属性) = @.setFont(point=10;name="宋体"); listbox.clientRect = 获取控件客户区块位置(::RECT结构体) listbox.theme = 外观主题,例如winform.button.theme = "Explorer"winform.button.theme = false listbox.redraw() = 刷新 listbox.disabled = 是否禁用 listbox.show(true__) = 显示控件 listbox.close() = 关闭控件窗 listbox.selectRange(1,__) = 选中指定范围如果不指定任何参数,取消选区 listbox.setSelected(1__/*项索引*/) = 选中指定项,索引为0则选定全部该函数仅在开启控件多选模式下有效单选模式下请使用selIndex属性替代 listbox.setSelected(1__/*项索引*/,false) = 取消选中指定项,索引为0则取消全选 listbox.getSelected(1__/*项索引*/) = 是否选中 listbox.findEx(__/*请输入文本*/) = 精确查找指定的项找不到返回0 listbox.find(__/*请输入文本*/) = 在列表框里查找指定的项找不到返回0 listbox.addfile(__/*请输入路径*/) = 向列表框里增加一个文件(包括目录) listbox.getRect() = 控件区块位置(::RECT结构体) listbox.getRect(true) = 控件屏幕区块位置(::RECT结构体) listbox.setRect(rc) = 设置控件区块位置(::RECT结构体) listbox.setRect(rc,true) = 设置控件屏幕区块位置(::RECT结构体) listbox.getClientRect() = 控件客户区块位置(::RECT结构体)rect. listbox.modifyStyle(.(remove,add) = 如果指定第三个参数,则使用此参数调用::SetWidnowPos listbox.modifyStyleEx(.(remove,add) = 如果指定第三个参数,则使用此参数调用::SetWidnowPos listbox.capture = 是否捕获全局鼠标消息 listbox.invalidate(__/*可选使用::RECT()对象指定客户区*/) = 使窗口绘图区无效 listbox.invalidate(__/*可选使用::RECT()对象指定客户区*/,0) = 使窗口绘图区无效不刷新背景 listbox.update() = 重绘invalidate函数指定的区块 listbox.setFocus() = 设置焦点 listbox.setPos(.(x坐标,y坐标,宽,高,插入位置,参数) = 调整窗口位置或排序,所有参数可选同时指定x,y坐标则移动位置同时指定宽高则改变大小指定插入位置(句柄或_HWND前缀常量)则调整Z序 listbox.getPos() = 返回相对坐标,宽,高x,y,cx,cy=win.getPos(hwnd) listbox.onMeasureItem(measureItem) = @.onMeasureItem = function(measureItem){measureItem.itemHeight = 51; } listbox.onDrawItem(drawItem) = @.onDrawItem = function(drawItem){ }
原文:https://www.cnblogs.com/yaoyue68/p/10486199.html