搜索
查看: 1510|回复: 2

控件orphanWindow()之后会影响窗口上其他控件的焦点,请问怎样处理?

[复制链接]

8

主题

43

帖子

358

积分

培训班

积分
358
发表于 2018-4-7 20:39:32 | 显示全部楼层 |阅读模式
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="重现窗体";right=479;bottom=480;bgcolor=16777215;parent=...)
  4. winform.add(
  5. editBrand={cls="edit";left=94;top=96;right=219;bottom=118;dl=1;dt=1;edge=1;font=LOGFONT(name='微软雅黑');hidesel=1;tabstop=1;z=4};
  6. editName={cls="edit";left=320;top=41;right=445;bottom=63;dl=1;dt=1;edge=1;font=LOGFONT(name='微软雅黑');hidesel=1;tabstop=1;z=2};
  7. editNum={cls="edit";left=94;top=41;right=219;bottom=63;dl=1;dt=1;edge=1;font=LOGFONT(name='微软雅黑');hidesel=1;tabstop=1;z=1};
  8. editUnit={cls="edit";text="个";left=318;top=75;right=443;bottom=97;dl=1;dt=1;edge=1;font=LOGFONT(name='微软雅黑');hidesel=1;tabstop=1;z=3};
  9. listview2={cls="listview";left=319;top=64;right=587;bottom=163;dl=1;dt=1;edge=1;hide=1;z=9};
  10. static={cls="static";text="配件编号:";left=24;top=45;right=92;bottom=65;align="right";dl=1;dt=1;font=LOGFONT(name='微软雅黑');transparent=1;z=5};
  11. static2={cls="static";text="配件名称:";left=250;top=45;right=318;bottom=65;align="right";dl=1;dt=1;font=LOGFONT(name='微软雅黑');transparent=1;z=6};
  12. static3={cls="static";text="单 位:";left=248;top=78;right=316;bottom=98;align="right";dl=1;dt=1;font=LOGFONT(name='微软雅黑');transparent=1;z=7};
  13. static5={cls="static";text="品 牌:";left=24;top=100;right=92;bottom=120;align="right";dl=1;dt=1;font=LOGFONT(name='微软雅黑');transparent=1;z=8}
  14. )
  15. /*}}*/

  16. winform.listview2.orphanWindow();
  17. winform.listview2.insertColumn("测试标题",150);

  18. winform.listview2.wndproc = function(hwnd,message,wParam,lParam){
  19.         if(message == 0x8/*_WM_KILLFOCUS*/){
  20.                 winform.listview2.hide = true;
  21.         }
  22. }

  23. winform.editName.wndproc = function(hwnd,message,wParam,lParam){
  24.         if(message == 0x7/*_WM_SETFOCUS*/){
  25.                 winform.listview2.hide = false;
  26.         }
  27. }

  28. winform.show()
  29. win.loopMessage();
复制代码


点一次名称后面的edit之后,点一下其他位置,orphanWindow()的控件隐藏,再点名称后面的edit,edit就获取不到焦点,好像被什么盖住了。
光标放在单位后面的edit里,鼠标来回在界面上晃几下。这个edit里光标的位置会自动变换。
请问要怎样处理 ?
回复

使用道具 举报

8

主题

43

帖子

358

积分

培训班

积分
358
 楼主| 发表于 2018-4-7 21:14:18 | 显示全部楼层
  1. winform.editName.wndproc = function(hwnd,message,wParam,lParam){
  2.         if(message == 0x7/*_WM_SETFOCUS*/){
  3.                 win.setTimeout(
  4.                         function(){
  5.                                 winform.listview2.hide = false;
  6.                         }
  7.                 )
  8.         }
  9. }
复制代码

得到kio1大神的帮助,已经没有问题了 。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2018-4-7 22:51:34 | 显示全部楼层
先让 _WM_SETFOCUS 正常执行完,再切换焦点,
也可以在 oncommand 事件弹出listview
import win.ui;
/*DSG{{*/
var winform = win.form(text="重现窗体";right=479;bottom=480;bgcolor=16777215;parent=...)
winform.add(
editBrand={cls=
"edit";left=94;top=96;right=219;bottom=118;dl=1;dt=1;edge=1; hidesel=1;tabstop=1;z=4};
editName={cls=
"edit";left=320;top=41;right=445;bottom=63;dl=1;dt=1;edge=1; hidesel=1;tabstop=1;z=2};
editNum={cls=
"edit";left=94;top=41;right=219;bottom=63;dl=1;dt=1;edge=1; hidesel=1;tabstop=1;z=1};
editUnit={cls=
"edit";text="个";left=318;top=75;right=443;bottom=97;dl=1;dt=1;edge=1; hidesel=1;tabstop=1;z=3};
listview2={cls=
"listview";left=319;top=64;right=587;bottom=163;dl=1;dt=1;edge=1;hide=1;z=9};
static={cls=
"static";text="配件编号:";left=24;top=45;right=92;bottom=65;align="right";dl=1;dt=1; transparent=1;z=5};
static2={cls=
"static";text="配件名称:";left=250;top=45;right=318;bottom=65;align="right";dl=1;dt=1; transparent=1;z=6};
static3={cls=
"static";text="单 位:";left=248;top=78;right=316;bottom=98;align="right";dl=1;dt=1; transparent=1;z=7};
static5={cls=
"static";text="品 牌:";left=24;top=100;right=92;bottom=120;align="right";dl=1;dt=1; transparent=1;z=8}
)
/*}}*/

winform.listview2.orphanWindow();
winform.listview2.insertColumn(
"测试标题",150);

winform.listview2.wndproc =
function(hwnd,message,wParam,lParam){
   
if(message == 0x8/*_WM_KILLFOCUS*/){
        winform.listview2.hide =
true;
    }
}

winform.editName.oncommand =
function(id,event){
   
if( event == 0x100/*_EN_SETFOCUS*/)
        winform.listview2.show(0x4
/*_SW_SHOWNOACTIVATE*/)
   
elseif( event == 0x200/*_EN_KILLFOCUS*/){
        
if( win.getRoot(win.getFocus()) != winform.listview2.hwnd )
            winform.listview2.hide =
true;
    }
}

winform.show();
win.loopMessage();


listview最好弄个custom做容器,不然处理不了事件




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-15 21:16 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表