jiakao 发表于 2025-11-23 22:46:12

数据窗口中richtext属性如何使用


各位大咖,请教下,有个试题练习项目,请问pb如何实现类似图片中某些字可带颜色的功能,,pb版本不限。

本人在用PB15:利用datawindow中某字段的edit类型设置为richtext 属性来做,但没有成功!

哪位高手帮忙指点下。

代码如下:


string ls_1

//rtf显示:1313中国人8888

ls_1="{\rtf1\ansi\ansicpg54936\deff0\nouicompat\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}"
ls_1=ls_1+"{\colortbl ;\red255\green0\blue0;}"
ls_1=ls_1+"{\*\generator Riched20 10.0.22621}\viewkind4\uc1"
ls_1=ls_1+"\pard\sa200\sl276\slmult1\b\f0\fs22\lang2052 1313\cf1\'d6\'d0\'b9\'fa\'c8\'cb\cf0 8888\b0\par"
ls_1=ls_1+"}"

long ll_row
dw_1.settransobject(sqlca)
dw_1.retrieve()
ll_row=dw_1.insertrow(0)
dw_1.object.txt=ls_1

pbai 发表于 2026-8-21 15:58:04

方向是对的:PB 支持「列内富文本」,Edit Style 设为 RichTextEdit 后给列赋 RTF 文档就能显示部分字带色。不成功先按这三点定位:


[*]先验证 RTF 串本身:把同一串 RTF 塞进窗口的 RichTextEdit 控件测试——控件能显示红字,说明 RTF 合法、问题在列设置;控件也不显示,说明 RTF 有格式问题(colortbl/\cfN/字体 charset)。
[*]看 DW 里的表现:如果单元格显示的是 {\rtf1\ansi... 原文 → Edit Style 没真正生效(还是普通 Edit,画板改完要保存并重新生成数据窗口对象);如果显示富文本但无色 → 颜色表问题;如果乱码 → 编码/字体问题。
[*]行高要够:RTF 内容高于默认行高时看起来像「没变化」。


最小可验证 RTF(红色「中国人」)——先用 rte 控件隔离问题:


// 适用环境:PB 9+,窗口上放置 RichTextEdit 控件 rte_1
string ls_rtf
// 输入值:RTF 文档(1313 黑色 + 中国人 红色 + 8888 黑色)
ls_rtf = "{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset134 宋体;}}" + &
         "{\colortbl;\red255\green0\blue0;}" + &
         "\viewkind4\uc1\pard 1313\cf1 中国人\cf0 8888\par}"
rte_1.InsertDocument(ls_rtf, true, FileTypeRichText!)
if rte_1.LineCount() > 0 then
    MessageBox("验证", "RTF 已插入:中国人应显示为红色")
else
    MessageBox("验证", "RTF 未生效,请检查格式")
end if


要点:{\colortbl;\red255\green0\blue0;} 第一项前那个分号不能省(索引 0 自动色),\cf1 引用索引 1 即红色,\cf0 切回默认色;字体必须带 \fcharset134(中文 GBK)否则中文乱码。

RTF 验证通过后,再用于 DataWindow 列(Edit Style 已设为 RichTextEdit):


// 适用环境:PB 9+,dw_1 的 txt 列 Edit Style = RichTextEdit(画板列属性 Edit 页)
string ls_rtf
// 输入值:同上一步验证通过的 RTF 文本
ls_rtf = "{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset134 宋体;}}" + &
         "{\colortbl;\red255\green0\blue0;}" + &
         "\viewkind4\uc1\pard 1313\cf1 中国人\cf0 8888\par}"
long ll_row
ll_row = dw_1.InsertRow(0)                  // 新增一行
dw_1.Object.txt = ls_rtf            // 赋完整 RTF 文档
dw_1.Modify("txt.Height = 200")               // 确保行高足够显示
MessageBox("完成", "已写入第 " + string(ll_row) + " 行,检查是否显示红字")


提醒两点:PB 的 RichTextEdit 列是只读显示,适合试题展示;若需要用户编辑富文本,改用窗口 RichTextEdit 控件 + 把 RTF 文本存进数据库字段。原代码里 \ansicpg54936(GB18030)在部分 PB 版本会干扰解析,建议去掉或改 \ansicpg936。

pbai

smallanntse 发表于 2026-8-27 10:00:46

学习了,一直没有用过这种功能:'(
页: [1]
查看完整版本: 数据窗口中richtext属性如何使用

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com