以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  (已解决) 模式窗口置于顶层后,如何设置为活动窗口?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=54364)

--  作者:bahamute
--  发布时间:2014/7/26 15:32:00
--  (已解决) 模式窗口置于顶层后,如何设置为活动窗口?
模式窗口采用e.Form.baseform.topmost = true方法置于顶层后,如何设置为活动窗口?
虽然显示于顶层,但有时会变成非活动窗口,还得用鼠标点击窗口,才能输入数据,
如何用代码使其始终保持在活动窗口,这样可以避免用户敲击了一堆字符,结果却没输进去的尴尬。

[此贴子已经被作者于2014-7-26 18:56:43编辑过]

--  作者:狐狸爸爸
--  发布时间:2014/7/26 16:11:00
--  
怎么会这样的呢,按道理打开模式窗口,默认就会成为激活窗口的哦。
--  作者:bahamute
--  发布时间:2014/7/26 16:18:00
--  
比如说,超时锁定窗口,10分钟未操作,则弹出,但这时往往屏幕保护也会作用,屏保消失后,有时就会出现窗口的确显示在最顶层,但却不接受键盘输入。也就是说窗口处于非活动状态。
[此贴子已经被作者于2014-7-26 16:20:50编辑过]

--  作者:狐狸爸爸
--  发布时间:2014/7/26 16:22:00
--  

这种问题,随它去吧


--  作者:bahamute
--  发布时间:2014/7/26 16:24:00
--  
百度了一下,貌似采用SetForegroundWindow函数可以解决,请狐爸帮忙看一下,能否实现,谢谢。
SetForegroundWindow  函数功能:该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。系统给创建前台窗口的线程分配的权限稍高于其他线程。
  函数原型:BOOL SetForegroundWindow()
  SetForegroundWindow()函数本身是不带参数的,具体激活某个窗口的方法可以用:
  pWnd->SetForegroundWindow();//这里的pWnd即所要激活窗口的句柄。
  返回值:如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零。
  备注:前台窗口是z序顶部的窗口,是用户的工作窗口。在一个多任务优先抢占环境中,应让用户控制前台窗口。

--  作者:狐狸爸爸
--  发布时间:2014/7/26 16:26:00
--  

http://www.foxtable.com/help/topics/2713.htm

 


--  作者:bahamute
--  发布时间:2014/7/26 18:35:00
--  
经解决,供有需要狐友参考。

全局代码:

Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long


窗口计时器代码:

SetForegroundWindow(e.Form.baseform.Handle)



--  作者:lsy
--  发布时间:2014/7/26 18:49:00
--  
以下是引用bahamute在2014-7-26 18:35:00的发言:
经解决,供有需要狐友参考。

全局代码:

Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long


窗口计时器代码:

SetForegroundWindow(e.Form.baseform.Handle)


谢谢

先收藏,免得用时找不着。


--  作者:lsy
--  发布时间:2014/7/26 19:04:00
--  

好像这样也行:

e.Form.Controls("TextBox1").Select   \'要成为活动窗口,可以选定其中的控件

 

这个最简便:

e.Form.Show

[此贴子已经被作者于2014-7-26 19:13:29编辑过]

--  作者:bahamute
--  发布时间:2014/7/26 19:08:00
--  
这个更简单,回头试试,谢谢!