IBM Reflection 编程- MoveCursor 函数问题
IBM Reflection programming- MoveCursor function issue
在 IBM Reflection 主机中,我正在尝试 运行 一个 VBA 宏来遍历不同的屏幕并填写所需的信息(在屏幕的预定义模板类型中)以在系统.
在此过程中,我尝试利用函数- "Session.MoveCursor" 和 "Session.CursorRow", "Session.CursorColumn" 将光标移动到所需位置,然后读取光标位置信息(在主机屏幕上写入数据之前验证位置)
代码:
Dim currRowPos as Integer
Dim currColPos as Integer
Session.MoveCursor targetRowPos, targetColPos ' move cursor position
DoEvents ' custom logic to wait or inlcude delay 1 sec or more, mentioned only single code statement here
currRowPos = Session.CursorRow 'get cursor current row position
currColPos = Session.CursorColumn 'get cursor current column position
'check current cursor position and write data onto HOST screen
If targetRowPos = currRowPos And targetColPos = currColPos Then
Session.TransmitANSI "xyz" 'write xyz on HOST screen
End If
我正在尝试在所需的光标位置向主机写入一些信息,然后遍历到下一个屏幕。在正当程序中,我将来回填写多个项目的信息(一次一个)。
有时我会遇到执行上述逻辑(代码)并且光标仍处于旧位置(不在所需的新行,列位置)并且程序开始在旧位置写入数据而不是比所需/目标位置导致编程错误(即 'Session.CursorRow' 和 'Session.CursorColumn' 正在输出新的所需光标位置,而实时光标位于主机屏幕上的旧位置)。
如果有人以前遇到过这个问题和/或有任何解决方案,请分享一下。谢谢。
Pasted Code from comments below
这里是vba程序代码
中使用的延迟函数
Public Sub DelayScript(Seconds As Integer)
Dim PauseTime, START
PauseTime = Seconds
START = Timer ' Set start time.
Do While Timer < START + PauseTime
DoEvents ' Yield to other processes.
Loop
End Sub
IBM HOST编程参考:http://docs.attachmate.com/reflection/14.x/prog-ref/ibm/
如果我对你的问题的理解正确,底层连接的延迟会干扰你的代码计时。通常,您应该使用 Wait*
方法,而不是 DoEvents
或计时代码,并让 Reflection 为您 处理计时 。我的猜测是你需要更多这样的东西:
With Session
.MoveCursor targetRowPos, targetColPos
'10 second timeout.
.WaitForEvent rcEnterPos, "10", "", targetRowPos, targetColPos
'Verify that you didn't time out.
If targetRowPos = .CursorRow And targetColPos = .CursorColumn Then
Session.TransmitANSI "xyz" 'write xyz on HOST screen
End If
End With
或者(假设它是一个字段)您在 rcEnterField
而不是 rcEnterPos
上等待。见 documentation here.
在 IBM Reflection 主机中,我正在尝试 运行 一个 VBA 宏来遍历不同的屏幕并填写所需的信息(在屏幕的预定义模板类型中)以在系统.
在此过程中,我尝试利用函数- "Session.MoveCursor" 和 "Session.CursorRow", "Session.CursorColumn" 将光标移动到所需位置,然后读取光标位置信息(在主机屏幕上写入数据之前验证位置)
代码:
Dim currRowPos as Integer
Dim currColPos as Integer
Session.MoveCursor targetRowPos, targetColPos ' move cursor position
DoEvents ' custom logic to wait or inlcude delay 1 sec or more, mentioned only single code statement here
currRowPos = Session.CursorRow 'get cursor current row position
currColPos = Session.CursorColumn 'get cursor current column position
'check current cursor position and write data onto HOST screen
If targetRowPos = currRowPos And targetColPos = currColPos Then
Session.TransmitANSI "xyz" 'write xyz on HOST screen
End If
我正在尝试在所需的光标位置向主机写入一些信息,然后遍历到下一个屏幕。在正当程序中,我将来回填写多个项目的信息(一次一个)。
有时我会遇到执行上述逻辑(代码)并且光标仍处于旧位置(不在所需的新行,列位置)并且程序开始在旧位置写入数据而不是比所需/目标位置导致编程错误(即 'Session.CursorRow' 和 'Session.CursorColumn' 正在输出新的所需光标位置,而实时光标位于主机屏幕上的旧位置)。
如果有人以前遇到过这个问题和/或有任何解决方案,请分享一下。谢谢。
Pasted Code from comments below
这里是vba程序代码
中使用的延迟函数Public Sub DelayScript(Seconds As Integer)
Dim PauseTime, START
PauseTime = Seconds
START = Timer ' Set start time.
Do While Timer < START + PauseTime
DoEvents ' Yield to other processes.
Loop
End Sub
IBM HOST编程参考:http://docs.attachmate.com/reflection/14.x/prog-ref/ibm/
如果我对你的问题的理解正确,底层连接的延迟会干扰你的代码计时。通常,您应该使用 Wait*
方法,而不是 DoEvents
或计时代码,并让 Reflection 为您 处理计时 。我的猜测是你需要更多这样的东西:
With Session
.MoveCursor targetRowPos, targetColPos
'10 second timeout.
.WaitForEvent rcEnterPos, "10", "", targetRowPos, targetColPos
'Verify that you didn't time out.
If targetRowPos = .CursorRow And targetColPos = .CursorColumn Then
Session.TransmitANSI "xyz" 'write xyz on HOST screen
End If
End With
或者(假设它是一个字段)您在 rcEnterField
而不是 rcEnterPos
上等待。见 documentation here.