2

有没有办法在 Clarion 中以编程方式触发按钮单击事件?我尝试了以下方法,但没有奏效:

! Doesn't work:
?ResetInput

! Also doesn't work:
?ResetInput:Accepted
4

1 回答 1

3

经过几个小时的搜索,我想出了一个解决方案:

POST(EVENT:Accepted, ?ResetInput)

如果有更正确的方法,请发布任何其他答案。


以下是 Clarion 帮助文档中有关 POST 功能的信息:

POST事件[,控制] [,线程] [,位置])

event:包含事件编号的整数常量、变量、表达式或 EQUATE。400h 到 0FFFh 范围内的值是用户定义的事件。

control:一个整数常量、EQUATE、变量或表达式,包含受事件影响的控件的字段编号。如果省略,则事件与字段无关。

thread : 一个整数常量、EQUATE、变量或表达式,包含其 ACCEPT 循环将处理事件的执行线程号。如果省略,则将事件发布到当前线程。

position:一个整数常量、EQUATE、变量或包含零 (0) 或一 (1) 的表达式。如果为一 (1),则事件消息被放置在事件消息队列的前面。如果省略或为零 (0),则事件消息将放置在事件消息队列的末尾。

POST 将事件发布到指定线程的当前活动的 ACCEPT 循环。这可能是用户定义的事件或任何其他事件。用户定义的事件编号可以定义为 400h 和 0FFFh 之间的任何整数。任何带有指定控件的事件都是特定于字段的事件,而没有指定控件的事件是与字段无关的事件。

发布事件会导致 ACCEPT 循环触发,但不会导致事件“发生”。例如,POST(EVENT:Selected,?MyControl) 为 ?MyControl 执行 EVENT:Selected 中的任何代码,但不会导致 ?MyControl 获得焦点。

例子:

Win1 WINDOW('Tools'),AT(156,46,32,28),TOOLBOX
    BUTTON('Date'),AT(0,0,,),USE(?Button1)
    BUTTON('Time'),AT(0,14,,),USE(?Button2)
END

CODE
    OPEN(Win1)
    ACCEPT

    ! Detect user-defined event:        
    IF EVENT() = EVENT:User THEN BREAK END

    CASE ACCEPTED()
    OF ?Button1
        POST(EVENT:User,,UseToolsThread)  !Post field-independent event to other thread
    OF ?Button2
        POST(EVENT:User) ! Post field-independent event to this thread
    END
END

CLOSE(Win1)
于 2014-07-23T20:37:29.987 回答