20px - +
wrap
zh en
-
发信人: allenwu (未注册用户·别理我,烦着呢,滚!!!!), 信区: ANSI 标 题: 6. 彩色id,彩色昵称 发信站: 日月光华 (2003年12月14日00:44:12 星期天), 站内信件 BBS中id或昵称里一般是不允许使用ANSI的。 不过有时候看见某些人发出的文章标题处昵称是彩色的或者有闪烁等效果。 发表的文章,头上那些文章信息是系统加的,不可能人为修改。 做出彩色昵称等效果,其实是利用ANSI的光标控制,用新的内容覆盖掉旧的内容 还是先介绍一下需要用到的控制符: *[H 光标定位, 实际使用时一般为*[m;nH,其中m,n是两个正整数,表示将光标移到第m行第n列 同样不能移出屏幕,所以一般m取1~24,n取1~80 *[s 存储光标位置 *[u 恢复光标位置(回到最近一次*[s所在的地方) *[K 删除到行末(fterm和sterm用当前背景色填充,cterm用默认背景色填充) *[f 作用和用法和*[H完全一样 现在看如何覆盖原来的内容,文章信息大致是这样的: 发信人: ???? (??????), 信区: ?????? 标 题: ??????????????????? 发信站: ??????????? 发信人的id是从第1行第9个字符开始的, 如果在qmd里面写上*[1;9H并跟上自己加上 色彩的id,那么解释到这行时,光标会跳到第1行第9列(id开始处),然后写上后面的内 容,将原先的内容覆盖掉,这样文章发出来,看到的就是彩色的id了 但是光这样还不行,光标移到顶上去了,id是覆盖掉了,可是其后面的内容(比如ip 等)也一同上移了,这可不是我们想要的效果。所以还要考虑把光标移回来,由于不可能 确定在第几行使用qmd,一般的方法是在*[1;1H的前面加上*[s,在适当地方加上*[u恢复 光标位置,例如 *[s*[1;9H相关代码*[u 同样的方式,也可以做出彩色昵称等 注意原有内容是无法修改的,如果覆盖上去的内容长度和原来的不一致,就可能会 有问题,比如正好将原有的某个汉字的左半部分覆盖留下了右半部分,造成乱码等。因 此,如果覆盖上去的内容长度与原来不一致,需要做点处理,比如用空格补齐长度,或 用*[K将光标所在位置直至该行行末的内容全删掉等等,用*[K的注意,fterm和sterm用 当前背景色填充,不是默认背景色的话先用*[m等方法切换为默认背景色 使用这种方法的也有很多弊端,举例来说: 如果文章较长,翻页才解释到光标定位这行,这时候第一行已经不是原来的发信人 等的了,会将其他内容覆盖掉,也有可能造成乱码等 如果别人用r/a引用方式来回你的文章,是会引用你的qmd的,而代码并不认人,还 是会去覆盖第一行内容,明明是他的文章,显示的却是你的id,这就不妙了。而且这是 个没有办法解决的问题,好在默认的方式不会引用你的qmd。(因此注意了,不要在文章 正文里面写这种代码,会影响到回文的人的) 另外提一句,注意代码里面字母的大小写,如果不小心把*[u写成了*[U,会影响到 cterm2000的用户的,那是cterm2000的一个未公开的控制符 -- ※ 来源:·日月光华 bbs.fudan.edu.cn·[FROM: 10.85.24.241]