akb*_*ggs 5 user-interface racket
我正在尝试使用Racket的GUI Toolkit,并尝试在屏幕上使用ASCII艺术品进行酷炫的变色效果.我有一个回调颜色改变,但我似乎无法弄清楚如何调用它来获得适当的结果.
起初我尝试使用消息控件来绘制文本,然后从那里更改文本颜色,但据我所知,没有办法更改消息的文本颜色.所以我继续使用canvas子窗口,但我似乎无法一次绘制多行文本; 新行刚刚删除,ascii艺术作为一长串文本出现.此外,每当窗口调整大小或以其他方式更改时,我用来改变颜色的on-paint回调似乎只会调用,因此如果用户坐着观看,颜色不会改变.
如果我能找到一种方法来使用画布在每个帧上进行回调,我可以循环遍历文本字符串列表并将每个文本字符串绘制到屏幕上,垂直分隔以给出换行符的外观,但我不知道知道画布是否存在这种"帧内"调用.
关于如何使这个工作的任何想法?
可能这里最简单的小部件是文本% 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)