首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

搞PB5年了,今遇到一个难题,100分求解决办法

2012-03-17 
搞PB5年了,今遇到一个难题,100分求解决方法!我有一个popup的窗口,想让它像弹出式窗口一样(在这个窗口打开

搞PB5年了,今遇到一个难题,100分求解决方法!
我有一个popup的窗口,想让它像弹出式窗口一样(在这个窗口打开时不能点击其他窗口),但是又不能像弹出式窗口一样让程序停止在那里等待响应(其他窗口需要继续执行代码)。
换一种说话就是我的popup的窗口想要有像弹出式窗口一样不能失去焦点的功能。

[解决办法]

response类型窗口是不是和楼主要求的功能类似?


[解决办法]
这个有点难度哦。要用到钩子函数吧,要钩住并阻止让父窗口激活的所有消息,又要让你的后续代码的消息得到正常处理,有些难度。
[解决办法]

我有一个转Excel的程序,就是用的popup,打开该窗口可以执行后续的代码也不失去焦点,如果不想做其它的操作试试:

setpointer(HourGlass!)
[解决办法]
用response窗口是等待响应并且不能将焦点转移

但是并不影响原来已经打开窗口程序的正常运行


比如我在一个窗口的timer事件中

st_1.text=string(today(),'yyyy-mm-dd hh:mm:ss')
st_2.text=string(long(st_2.text) +1)

if mod(long(st_2.text),11)=0 then

dw_1.reset()
end if

if mod(long(st_2.text),16)=0 then
dw_1.retrieve()
end if

我打开此窗口后,又打开了一个其它的窗口,最后在其它窗口中打开respone窗口


在respone窗口打开后,我可以看到 时间不停在走,数字不停的累加,每到数据到11整数倍时,清除数据窗口内容,到16整数倍后数据窗口内容会重新retrieve()
[解决办法]
试下用API接管鼠标消息
在CSDN中搜一下“鼠标的离开事件”应该可以搜到如何接管鼠标消息的贴子
[解决办法]

探讨
用response窗口是等待响应并且不能将焦点转移

但是并不影响原来已经打开窗口程序的正常运行


比如我在一个窗口的timer事件中

st_1.text=string(today(),'yyyy-mm-dd hh:mm:ss')
st_2.text=string(long(st_2.text) +1)

if mod(long(st_2.text),11)=0 then

dw_1.reset()
end if

if mod(long(st_2.text),16)=0 then
dw_1.retrieve()
end if

我打开此窗口后,又打开了一个其它的窗口,最后在其…

[解决办法]
在其它对象里检查 popup的窗口 是否打开,已打开的话不能就不能获得焦点,并使popup的窗口获得焦点.

比如在Window对象的Activate事件里:

IF IsValid(w_popup) THEN
w_popup.SetFocus()
END IF

未测试的,你试试看。
[解决办法]
探讨
在其它对象里检查 popup的窗口 是否打开,已打开的话不能就不能获得焦点,并使popup的窗口获得焦点.

比如在Window对象的Activate事件里:

IF IsValid(w_popup) THEN
w_popup.SetFocus()
END IF

未测试的,你试试看。

[解决办法]
这样可以,已测试的. 

在其它对象里检查 popup的窗口 是否打开,已打开的话不能就不能获得焦点,并使popup的窗口获得焦点. 

比如在Window对象的Activate事件里: 

IF IsValid(w_popup) THEN 
w_popup.POST SetFocus()
END IF 

[解决办法]
把其它打开的窗口全部 enabled = false 就搞定了。
[解决办法]
探讨
这样可以,已测试的.

在其它对象里检查 popup的窗口 是否打开,已打开的话不能就不能获得焦点,并使popup的窗口获得焦点.

比如在Window对象的Activate事件里:

IF IsValid(w_popup) THEN
w_popup.POST SetFocus()
END IF

[解决办法]
感觉有点像always on top的功能,lz这个叫always has focus
[解决办法]
在窗口的deactivate()事件里写以下语句就可以了:
messagebox('','你想干嘛?不要乱点!')
this.setfocus()
[解决办法]
在open前 设置 enabled= false
open(window)

当窗口关闭时 在设置 enabled= true
------解决方案--------------------


这样行不?

一个主窗口 w_main

再创建一个 主窗口 w_fu。

再创建一个response窗口w_p。

给w_fu写一个事件,uo_open,内容就是open(w_p)

在需要显示这个窗口时

int i

open(w_fu)//打开辅助窗口,可以把窗口的大小弄成0,也就是不显示

w_fu.PostEvent("uo_open")//让他来触发response窗口

for i = 1 to 1000
 st_1.text = string(i)
next

这样应该就不会中断事件的运行了。
[解决办法]

引用楼主 tiantanglyz 的帖子:
我有一个popup的窗口,想让它像弹出式窗口一样(在这个窗口打开时不能点击其他窗口),但是又不能像弹出式窗口一样让程序停止在那里等待响应(其他窗口需要继续执行代码)。
换一种说话就是我的popup的窗口想要有像弹出式窗口一样不能失去焦点的功能。

[解决办法]
楼上说的不错,之前也有一位说了timer()其实只是一个缩影。你可以试想Open(xx)这前当前代码不动了,但不受打开窗口判断的影响,那何不让你要运行的代码用Post方式抛到独立函数或事件中在Open之前一句就执行呢。
[解决办法]
这个我认为还是用主窗口enabled = false这个方法比较好
前面他们说的timer post 都是要知道你当前在做什么的情况下
如果你是设备通讯的话到是可以用timer 或多线程
[解决办法]
其实这样做的真正好处确实不在保持焦点上,想做到这个办法多的是。关键还是在于响应式窗口打开后导致原窗口的代码不能继续往下执行,都用 timer() 来解决是够烦的,所以最好一劳永逸地解决掉这个问题,把所有打开的窗口引用都记录到一个全局数组变量里,模拟的响应窗口一打开,立即把其它窗口禁用就 ok 了。只是要注意,在模拟响应窗口再 open 另一个模拟响应窗口要进行检查,保证每个模拟响应窗口只打开一次,而不能像普通窗口那样切来切去,否则会很混乱的!
[解决办法]
以前玩.net05的时候碰过和LZ一样的问题!

用多线程搞定的,PB还没写过!


[解决办法]
关注
[解决办法]
关注
[解决办法]
获取焦点,可以不设定窗体类型为popup,设为normal ,同时置窗体在最前面就可以了,置窗体可采用pb函数或者api
[解决办法]
即然timer事件可以执行,把你后面的语句放到timer事件中,不可以吗,在打开response窗口这前,启动定时器。把定时器时间设为一秒
[解决办法]
看到很多创意,mark
[解决办法]
上面有很多正解,我的程序就是这样实现的
[解决办法]
把父窗口设为enabled = false 就可以了
[解决办法]
你可以写两个事件
一个里面带参数打开response窗口,传入第二个事件名称
一个写后续要做的代码
resopoinse里写if isvalid(原窗口) then 原窗口.triggerevent (as_parm)
当然如果你传递的参数包括原窗口则通用性就更强了,可以考虑做个结构传递参数
[解决办法]
脚印脚印
[解决办法]
不是技术问题,而是思路问题。在response里调用目标代码不就行了
[解决办法]
remark

热点排行