我正在尝试使用Racket's GUI Toolkit,并尝试在屏幕上使用ASCII艺术品进行酷炫的变色效果。我有一个回调颜色,但我似乎无法弄清楚如何调用它来获得适当的结果。
起初我尝试使用message control绘制文本,然后从那里更改文本颜色,但据我所知,无法更改消息的文本颜色。所以我继续使用canvas subwindow,但我似乎无法一次绘制多行文本;新行刚刚删除,ascii艺术作为一长串文本出现。此外,每当窗口调整大小或以其他方式更改时,我用来改变颜色的on-paint回调似乎只会被调用,因此如果用户坐着观看,颜色不会改变。
如果我能找到一种方法来使用画布在每个帧上进行回调,我可以遍历一个文本字符串列表并将每个字符串绘制到屏幕上,垂直分隔以给出换行符的外观,但是我不知道画布是否存在这种“框架内”调用。
有关如何使其发挥作用的任何想法?
答案 0 :(得分:7)
这里使用的最简单的小部件可能就是text%类(你也需要一个editor-canvas%)。查看change-style及相关方法,了解如何更改特定文本的样式。
示例:
#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)
答案 1 :(得分: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)