TJvRichEdit未在 Delphi 10下正确设置文本

j13ufse2  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(106)

我正在将一个Delphi2007应用程序移植到Delphi10.3。我的一个表单有一个 * TJvDBRichEdit *,它与一个BLOB子类型文本Firebird3.0/64数据库相关联。两个Delphi版本使用相同的JVCL版本。
我稍后(在另一个模块中)使用字段的内容,使用 * TJvRichEdit *(不是DB)将其转换为HMTL。

Var
 HTML : TStringList;     

JvRichEditcontrol.Text := table.BLOBField.AsString;
JvRichEditToHtml.ConvertToHtmlStrings(JvRichEditcontrol,HTML);

这在2007年的Delphi上运行得很顺利。
'宋体斜体和粗体视图类别'
回读 * JvRichEditcontrol.Text * 后,它返回
'斜体和粗体'
然而,对于Delphi 10.3,返回完全相同的文本
'宋体斜体和粗体视图类别'
然后,* ConvertToHtmlStrings * 返回嵌入了RTF标记的HTML

<P STYLE=3D"text-align: left;">
<SPAN style=3D"color: #000000; font-size: 8pt; font-family: Tahoma;">
{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 Tahoma;}}
<BR>\viewkind4\uc1\pard\lang2058\b\i\f0\fs16 Italic and bold\ul\par
<BR>}
</SPAN>
</P>

它应该会回来

<P STYLE=3D"text-align: left;">
<SPAN style=3D"color: #000000; font-size: 8pt; font-family: Tahoma;">
<BR><b><i>Italic and bold</i></b>  
<BR>  
</SPAN>  
</P>

这是我试过的,结果一样
1.使用 * PlainText * 和 * StreamFormat * 属性
1.使用 * TRichEdit * 代替 * TJvRichEdit *
1.从剪贴板粘贴
1.从文件加载
奇怪的是,* TJvDBRichEdit * 工作正常。从字段中获取文本并正确显示。作为 * TJvRichEdit * 的后代,它应该在某个地方设置文本(我调试了很多,但到目前为止,我还不知道它是如何设置的)
我错过了什么吗?它是否与Delphi 10 * UnicodeString * 有关?

    • 如何正确设置 * TJvRichEdit * 文本属性?**也许我可以使用 * TJvDBRichEdit *,但这意味着将其作为参数或类似参数传递,因为使用其内容(以及其他表单中的许多内容)的代码是处理逻辑的 * TDatamodule *,因此,它当前从字段接收文本(在Delphi 2007和10.3中)
kadbb459

kadbb4591#

过于简化,使用字符串流赋值:
瓦尔
SS:字符串流;
SS:= T字符串流.创建(某个字符串);
JvRichEdit.行.从数据流加载(SS);
纯文本为 * false *,流格式为 * sfDefault *
我仍然不知道问题出在哪里。尽管有指令,设置Text属性在2007和10. 3上都有相同的代码,所以问题应该深埋在运行时中。
//德尔福2007
程序TControl. SetText(常量值:字幕);
Begin
如果获取文本值,则设置文本缓冲区(PChar(值));
结束;
程序T控制.设置文本缓冲区(缓冲区:PChar);开始
执行(WM_SETTEXT,0,长整型(缓冲区));
执行(CM文本更改,0,0);
结束;
//Delphi语言
程序TControl. SetText(常量值:字幕);
Begin
如果获取文本〈〉值,则
{$如果定义(CLR)}
Begin
F文本:=数值;
执行(CM文本更改,0,0);
结束;
{$其他}
设置文本缓冲区(PChar(值));
{$ENDIF}
结束;
{$如果定义(CLR)}
程序T控制.设置文本缓冲区(缓冲区:字符串);
{$其他}
程序T控制.设置文本缓冲区(缓冲区:PChar);
{$ENDIF}开始
执行(WM_SETTEXT,0,缓冲区);
执行(CM文本更改,0,0);
结束;

相关问题