2012-04-04 4 views
3
  1. ラケットGUIライブラリを使用すると、実際のモーダルダイアログが表示されないことがわかります。表示されているときに、親ウィンドウをアクティブにすることは不可能です。
  2. ダイアログは親のイベントスペースをブロックしますが、親ウィンドウのメニューバーをクリックすると、同じダイアログが繰り返し表示されます。

    Racket/GUIで親のメニューバーを無効にするモーダルダイアログ?

    我々は最初の質問を無視するならば、私達ことができるように -

#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) 

(new dialog% [parent frame])と同じPSメッセージボックスがダイアログをポップアップ表示することができます):コードを以下に示します親のメニューバーを無効にするモーダルダイアログを表示しますか?

さらに、racket/guiで実際のモーダルダイアログを作成することは本当に不可能ですか?

(私がWin7の上で働いている)

+0

良い質問!メーリングリストでこの質問をするほうがよいでしょう:http://lists.racket-lang.org/users/、あなたはここでラッキーになるかもしれません。 –

+0

私に思い出させていただきありがとうございます!私はそれから尋ねます。 – Ladace

答えて

2

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

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

+0

最初は間違ったコードを残念に思っています。私はそれを変更しました。今度は(メッセージボックス "コンテンツ"フレームについて)は、その親がフレームであるダイアログを作成します。これを実行すると、aboutメッセージボックスはフレーム内のメニューバーを無効にしません。 – Ladace

+0

あなたはどのプラットフォームにいますか? Linuxではこのような現象は発生しません(メニューバーはクリックできません)。いずれにしても、プラットフォーム固有のバグであれば、バグ報告を送るべきです。 –

+0

私はWindows 7で作業しています。今はプラットフォーム固有のバグです。 – Ladace

0

これはちょっと頭がおけないようですが、[callback (lambda (b e) (send mb enable #f) (message-box "About" "This is a test.") (send mb enable #t))]と一緒にやってもいいかもしれません。続行が関係する場合は、dynamic-windを使用してください。

+0

それはおそらく解決策です。バグがラケット/ GUIにあるようです。 – Ladace

関連する問題