3

長時間実行されるスクリプトを作成し、それに次のコードでプログレスバーを追加しました。

function StartProgressBar()
   gaugeProgress = iup.gaugeProgress{}
   gaugeProgress.show_text = "YES"
   gaugeProgress.expand = "HORIZONTAL"
   dlgProgress = iup.dialog{gaugeProgress; title = "Note Replacement in Progress"}
   dlgProgress.size = "QUARTERxEIGHTH"
   dlgProgress.menubox = "NO"  --  Remove Windows close button and menu.
   dlgProgress:showxy(iup.CENTER, iup.CENTER)  --  Put up Progress Display 
   return dlgProgress
end

これはループの前に呼び出され、ループ中にプログレスバーが更新されます(私はMainLoopを呼び出していません)。プロセスの最後に、dlgProgress.destroyを呼び出してクリアします。

プログレスバーからフォーカスを取得しない限り、問題なく動作しますが、フォーカスが失われるとプログラムがクラッシュするため、これを間違った方法で行っていると確信しています。誰かが正しい方法を教えてもらえますか?詳細なグーグルは私にiup、luaプログレスバーの例を見つけませんでした。

前もって感謝します。

4

1 に答える 1

2

これが実際のサンプルです。

「iuplua」が必要

ローカルキャンセルフラグ
ローカルゲージプログレス

ローカル関数StartProgressBar()
    cancelbutton = iup.button {
        title = "キャンセル"、
        action = function()
            キャンセルフラグ=true
            iup.CLOSEを返します
        終わり
    }
    ゲージプログレス=iup.progressbar{expand = "HORIZONTAL"}
    dlgProgress = iup.dialog {
        title = "メモの置換が進行中です"、
        dialogframe = "YES"、border = "YES"、
        iup.vbox {
            ゲージプログレス、
            キャンセルボタン、
    }
    }
    dlgProgress.size = "QUARTERxEIGHTH"
    dlgProgress.menubox="NO"-Windowsの閉じるボタンとメニューを削除します。
    dlgProgress.close_cb = cancelbutton.action
    dlgProgress:showxy(iup.CENTER、iup.CENTER)-進行状況表示を表示
    dlgProgressを返します
終わり


dlg = StartProgressBar()
ゲージプログレス値=0.0

i = 0,10000の場合、
    -長い計算で一歩踏み出す
    -何らかの意味のある方法で進捗状況を更新します
    ゲージプログレス値=i/ 10000
    -ダイアログがメッセージを処理できるようにします
    iup.LoopStep()
    -ユーザーがキャンセルして意味のあることをしたいと思っていることに注意してください
    キャンセルフラグの場合はブレークエンド
終わり

-フラグを調べて、キャンセルと終了を区別します
print( "cancled:"、cancelflag)

ここでは、IUP3.0とその標準のLuaバインディングを使用しました。ゲージコントロールはiup.progressbarIUP3.0で名前が付けられiup.gaugeており、以前のバージョンで名前が付けられていました。以前のバージョンでは、拡張コントロールライブラリにも含まれていた可能性があります。

私はこれをWindowsでテストしました。他のプラットフォームでも同様の動作をしていると想定されますが、マイレージは異なる場合があります。

于 2010-09-04T22:30:10.647 に答える