5

私はRacketのGUIToolkitを試していて、画面上のASCIIアートでクールな色を変える効果を得ようとしています。色を変更するコールバックがありますが、適切な結果を得るためにそれを呼び出す方法がわからないようです。

最初はメッセージコントロールを使用してテキストを描画しようとしましたが、そこからテキストの色を変更しましたが、私が知る限り、メッセージのテキストの色を変更する方法はありません。そこで、キャンバスサブウィンドウの使用に移りましたが、一度に複数行のテキストを描画できないようです。改行が削除され、アスキーアートが1行の長いテキストとして表示されます。さらに、色を変更するために使用していたオンペイントコールバックは、ウィンドウのサイズが変更されるか、その他の方法で変更されるたびに呼び出されるように見えるため、ユーザーが座って見ている場合でも色は変更されません。

キャンバスを使用して各フレームでコールバックを実行する方法を見つけることができれば、テキスト文字列のリストをループして、改行のように垂直に分離して各文字列を画面に描画できますが、私はしません。そのような「オンフレーム」呼び出しがcanvasに存在するかどうかはわかりません。

これを機能させる方法について何かアイデアはありますか?

4

2 に答える 2

7

おそらくここで使用するのが最も簡単なウィジェットはtext%クラスです(エディターが必要です-canvas%も必要です)。変更スタイルおよび関連するメソッドを調べて、特定のテキストのスタイルを変更する方法を確認してください。

例:

#lang racket/gui

(define frame (new frame% [label "Test"] [width 300] 
                                         [height 300]))
(define text (new text%))
(define canvas (new editor-canvas% [parent frame] 
                                   [editor text]))

(define style-delta (make-object style-delta% 
                                 'change-normal-color))

;; do some red
(send style-delta set-delta-foreground "red")
(send text change-style style-delta)
(send text insert "Hello world in red\n")

;; do some blue
(send style-delta set-delta-foreground "blue")
(send text change-style style-delta)
(send text insert "Now available in blue")

(send frame show #t)
于 2012-08-21T02:57:38.783 に答える
0

change-commandを指定する必要はありません。

単純なもの:

#lang racket/gui

(define frame (new frame% [label "Test"] [width 300] 
                                         [height 300]))
(define text (new text%))
(define canvas (new editor-canvas% [parent frame] 
                                   [editor text]))

(define style-delta (make-object style-delta%))

;; do some red
(send style-delta set-delta-foreground "red")
(send text change-style style-delta)
(send text insert "Hello world in red\n")

;; do some blue
(send style-delta set-delta-foreground "blue")
(send text change-style style-delta)
(send text insert "Now available in blue\n")

;; do some modern
(send style-delta set-delta-foreground "black")
(send style-delta set-family 'modern)
(send text change-style style-delta)
(send text insert "Now available in modern\n(fixed width)")

(send frame show #t)
于 2015-01-14T01:41:32.647 に答える