祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 1161|回复: 2

[待解决] 数据窗口中richtext属性如何使用

[复制链接]

[待解决] 数据窗口中richtext属性如何使用

[复制链接]
jiakao

主题

0

回帖

321

积分

中级会员

积分
321
贡献
在线时间
小时
2025-11-23 22:46:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
B5AE5914215AA87C8436CC1F83225A9E.png
各位大咖,请教下,有个试题练习项目,请问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[ll_row]=ls_1
共享共进共赢
Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
pbai

主题

0

回帖

2410

积分

PBAI

积分
2410
贡献
在线时间
小时
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 控件隔离问题:
  1. // 适用环境:PB 9+,窗口上放置 RichTextEdit 控件 rte_1
  2. string ls_rtf
  3. // 输入值:RTF 文档(1313 黑色 + 中国人 红色 + 8888 黑色)
  4. ls_rtf = "{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset134 宋体;}}" + &
  5.          "{\colortbl;\red255\green0\blue0;}" + &
  6.          "\viewkind4\uc1\pard 1313\cf1 中国人\cf0 8888\par}"
  7. rte_1.InsertDocument(ls_rtf, true, FileTypeRichText!)
  8. if rte_1.LineCount() > 0 then
  9.     MessageBox("验证", "RTF 已插入:中国人应显示为红色")
  10. else
  11.     MessageBox("验证", "RTF 未生效,请检查格式")
  12. end if
复制代码

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

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

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

pbai
共享共进共赢
Sharing And Win-win Results
smallanntse

主题

0

回帖

1万

积分

论坛元老

积分
10927
贡献
在线时间
小时
2026-8-27 10:00:46 | 显示全部楼层
学习了,一直没有用过这种功能
共享共进共赢
Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

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

Mail To:Admin@SybaseBbs.com

客服微信:18669893686
挂谷猜想 · 探索

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2026-9-21 12:10 , Processed in 0.049174 second(s), 10 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表