2012-03-29 17 views
1

這是我的問題: 在啓動按鈕的觸發器上我想執行一個模塊。當我按下STOP按鈕時,它應該停止執行。在啓動按鈕的TRIGER使用REPEAT塊直到事件發生?

如 :

REPEAT: 
    message "hai". 
END. 

,當我按下停止按鈕應該停止。我應該給REPEAT塊添加什麼額外的條件?最好我不想在停止按鈕Triger中寫入條件。請給出建議。

+0

你的WAIT-FOR在哪裏? – 2012-03-29 12:14:56

+0

你究竟想要完成什麼? – 2012-03-29 13:03:10

回答

2

進度不是多線程的。

所以你必須仔細考慮通過哪些代碼段需要在什麼情況下執行以僞造它。 (比我最初的「無法完成」的迴應更仔細。)

由於「firhang」指出「PROCESS EVENTS」可用於檢查排隊的事件並準備好執行操作。

因此,您可以在事件處理程序中運行循環並讓該事件處理程序監聽其他事件。

我認爲有以下滿足原來的問題和工作在GUI和性格的客戶:

define variable i as integer no-undo. 

define variable bStop as logical no-undo. 

define button butStart label "Start". 
define button butStop label "Stop". 

form butStart butStop with frame but-frame row 1. 

on choose of butStop bStop = true. 

on choose of butStart do: 

    bStop = false. 

    do while bStop = false: 
    i = i + 1. 
    process events. 
    message i. 
    end. 

    message "Paused". 

end. 

enable butStart butStop with frame but-frame. 

pause 0 before-hide. 

wait-for window-close of current-window. 
+0

完美的人...不止我need..thanks .. – 2012-04-19 11:56:03

0
DEFINE VARIABLE bStop AS LOGICAL NO-UNDO. 

DEFINE BUTTON butStop LABEL "Stop". 

FORM butStop WITH FRAME but-frame ROW 1. 

ON CHOOSE OF butStop bStop = TRUE. 

ENABLE butStop WITH FRAME but-frame. 

REPEAT: 
    PROCESS EVENTS. 
    MESSAGE "hai". 
    IF bStop THEN LEAVE. 
END. 

MESSAGE "stoped". 

WAIT-FOR WINDOW-CLOSE OF CURRENT-WINDOW. 
+1

此代碼不起作用。重複繼續執行,WAIT-FOR從不執行。因此,ON CHOOSE沒有機會執行。 – 2012-03-29 22:09:49

+0

你試過了嗎?您應該閱讀關於PROCESS EVENTS命令的內容。 ;) – firhang 2012-04-13 20:54:42

+0

是的,我確實嘗試過。這就是爲什麼我說這不起作用。 – 2012-04-13 23:04:04

1

處理事件聲明 處理所有重要事件而不阻塞用戶輸入。

語法

處理事件

例 在您選擇停止此過程計數到1000:

R-proevs.p

DEFINE VARIABLE ix  AS INTEGER NO-UNDO. 
DEFINE VARIABLE stop-sel AS LOGICAL NO-UNDO. 
DEFINE BUTTON stop-it LABEL "STOP". 
DISPLAY stop-it. 
ON CHOOSE OF stop-it 
    stop-sel = TRUE. 
ENABLE stop-it. 
DO ix = 1 TO 1000: 
    DISPLAY ix VIEW-AS TEXT. 
    PROCESS EVENTS. 
    IF stop-sel THEN LEAVE. 
END. 

在每次通過循環,該過程顯示ix的新值,然後檢查是否有任何事件正在等待處理。如果沒有事件發生,則繼續執行並循環迭代。如果選擇了STOP按鈕,則會更改stop-sel的值來處理該事件。當執行繼續時,程序退出循環。

如果循環不包含PROCESS EVENTS語句,那麼choose事件不會處理,循環迭代直到ix等於1,000。

註釋 WAIT-FOR語句處理所有未決事件並阻止所有其他執行,直到發生指定事件。 PROCESS EVENTS語句處理所有未決事件,並立即繼續執行下一個語句。 如果有任何已收到PROCEDURE-COMPLETE事件但尚未處理的異步請求,則此語句按WAIT-FOR語句所述處理這些事件。 您無法在ABL中調用.NET方法system.Windows.Forms.Application:DoEvent()。 PROCESS EVENTS語句執行此方法的功能。 當執行此語句時,.NET會在ABL會話的上下文中引發異常。

+0

這是工作..感謝,但它會奏效高達1000所以我只給做的:IX = 1至IX + 1:這只是以使其可無限次...謝謝.. – 2012-04-19 11:48:40

相關問題