3
  1. ラケットGUIライブラリを使用すると、表示されたときに親ウィンドウをアクティブ化できないという実際のモーダルダイアログを作成できないことがわかりました。
  2. ダイアログはその親のイベントスペースをブロックしますが、親ウィンドウのメニューバーをクリックできるため、同じダイアログを何度も表示できます。コードは次のとおりです。

#lang racket/gui

(define frame (new frame%
                   [label "test"]
                   [width 200]
                   [height 200]))

(define mb (new menu-bar% [parent frame]))

(let ([m (new menu% 
              [parent mb]
              [label "&About"])])
  (new menu-item%
       [parent m]
       [label "&About"]
       [callback (lambda (b e) (message-box "About" "This is a test." frame))])
  )


(send frame show #t)

(psメッセージボックスはダイアログをポップアップできます-と同じです(new dialog% [parent frame])

したがって、最初の質問を無視した場合、親のメニューバーを無効にするモーダルダイアログを表示できますか?

その上、ラケット/ GUIで実際のモーダルダイアログを作成することは本当に不可能ですか?

(私はWin7に取り組んでいます)

4

3 に答える 3

2

補足: バグでしたので修正予定です。

参考文献:

  1. http://lists.racket-lang.org/users/archive/2012-April/051275.html
  2. http://git.racket-lang.org/plt/commit/9d563c786a71b621fcd2909c917b49939e0d11b0
于 2012-04-05T17:03:42.147 に答える
2

を使用する代わりに、ここでクラスframe%を使用したいと思います。dialog%メニューバーのあるモーダルダイアログを簡単に作れるかどうかはわかりません。

dialog%ああ、それはイベントスペースのモーダルのみであることにも注意してください。そのため、DrRacket からダイアログを作成するコード スニペットを実行しても、DrRacket 自体には引き続きアクセスできます。

于 2012-04-04T19:18:51.913 に答える
0

これは少しハックに思えますが 、継続が含まれている場合は[callback (lambda (b e) (send mb enable #f) (message-box "About" "This is a test.") (send mb enable #t))]Or おそらく使用できますが、あなたの例ではそうではありません。dynamic-wind

于 2012-04-04T22:54:21.313 に答える