2012-04-04 8 views
3
  1. Mit Racket GUI-Bibliothek, ich finde ich kann nicht eine echte modale Dialog, wenn es angezeigt wird, ist es unmöglich, das übergeordnete Fenster zu aktivieren.
  2. Obwohl der Dialog den Ereignisbereich des übergeordneten Elements blockiert, kann die Menüleiste im übergeordneten Fenster angeklickt werden, sodass derselbe Dialog immer wieder angezeigt werden kann. Es folgt der Code:

#lang racket/guiModaler Dialog, der die Menüleiste seines Elternteils in Racket/GUI deaktiviert?

(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 die Message-Box und ein Dialogfenster kann - genauso wie (new dialog% [parent frame]))

Wenn wir also die erste Frage ignoriert, können wir einen modalen Dialog anzeigen, der die Menüleiste der Eltern deaktiviert?

Außerdem ist es wirklich unmöglich, einen echten modalen Dialog in Racket/GUI zu machen?

(Ich arbeite an Win7)

+0

Gute Frage! Sie sind wahrscheinlich besser dran, diese Frage auf der Mailingliste zu stellen: http://lists.racket-lang.org/users/, obwohl Sie hier vielleicht Glück haben könnten. –

+0

Danke für die Erinnerung! Ich werde dann fragen. – Ladace

Antwort

2

Statt eine frame% zu verwenden, ich glaube, Sie hier eine dialog% Klasse verwenden möchten. Ich bin mir nicht sicher, ob Sie einen modalen Dialog mit einer Menüleiste erstellen können.

Achte auch darauf, dass dialog% nur modal für seinen Eventspace ist. Wenn Sie also ein Code-Snippet von DrRacket ausführen, das einen Dialog erstellt, ist DrRacket selbst weiterhin verfügbar.

+0

Sorry für den falschen Code zuerst. Ich habe es geändert. Jetzt '(Message-Box" über "" Inhalt "Rahmen)' ist ein Dialog erstellen, dessen Eltern der Rahmen ist. Führen Sie es aus, und die InfoBox deaktiviert die Menüleiste im Rahmen nicht. – Ladace

+0

Auf welcher Plattform bist du? Unter Linux sehe ich dieses Verhalten nicht (d. H. Die Menüleiste ist nicht anklickbar). In jedem Fall, wenn es sich um einen plattformspezifischen Fehler handelt, sollten Sie einen Fehlerbericht senden. –

+0

Ich arbeite an Windows 7. Jetzt bin ich sicher, dass es ein plattformspezifischer Bug ist. – Ladace

0

Dies scheint ein wenig hackish, aber Sie könnten es selbst tun mit [callback (lambda (b e) (send mb enable #f) (message-box "About" "This is a test.") (send mb enable #t))] Oder vielleicht dynamic-wind verwenden, wenn Fortsetzungen beteiligt sind, die in Ihrem Beispiel nicht sind.

+0

Vielleicht ist es eine Lösung. Es scheint ein Fehler in Schläger/GUI zu sein. – Ladace

Verwandte Themen