如何更改Racket GUI应用程序中多行文本的颜色?

akb*_*ggs 5 user-interface racket

我正在尝试使用Racket的GUI Toolkit,并尝试在屏幕上使用ASCII艺术品进行酷炫的变色效果.我有一个回调颜色改变,但我似乎无法弄清楚如何调用它来获得适当的结果.

起初我尝试使用消息控件来绘制文本,然后从那里更改文本颜色,但据我所知,没有办法更改消息的文本颜色.所以我继续使用canvas子窗口,但我似乎无法一次绘制多行文本; 新行刚刚删除,ascii艺术作为一长串文本出现.此外,每当窗口调整大小或以其他方式更改时,我用来改变颜色的on-paint回调似乎只会调用,因此如果用户坐着观看,颜色不会改变.

如果我能找到一种方法来使用画布在每个帧上进行回调,我可以循环遍历文本字符串列表并将每个文本字符串绘制到屏幕上,垂直分隔以给出换行符的外观,但我不知道知道画布是否存在这种"帧内"调用.

关于如何使这个工作的任何想法?

Asu*_*awa 7

可能这里最简单的小部件是文本% class(你也需要一个编辑器画布%).查看更改样式和相关方法,以了解如何更改特定文本的样式.

例:

#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)
Run Code Online (Sandbox Code Playgroud)