我目前正在将我们的软件解决方案从Delphi 7迁移到2010年.大多数情况下,这些变化很简单,只剩下少量的障碍.
在表单上我们使用TRichEdit,它显示从MSSQL数据库中的blob字段中获取的rtf文本.这是它在Delphi 7中的工作方式:
//Get RTF text from Blob field using TADOQuery
rtfStream := sql.CreateBlobStream(sql.FieldByName('rtftext'), BmRead) as TMemoryStream;
//Load into TRichEdit
RichEdit.PlainText := False;
RichEdit.Lines.LoadFromStream(rtfStream);
Run Code Online (Sandbox Code Playgroud)
这将在TRichEdit组件中按预期显示RTF,但Delphi 2010中的相同代码将RTF显示为纯文本,每个字符之间带有选项卡.我认为这与从Ansi到Unicode的变化有很大关系,但我没有任何运气来纠正这个问题.
任何有助于此工作的帮助将非常感激.谢谢
您可能会说在stackOverflow中有很多关于此的讨论,但是大多数都比我需要的更复杂,主要用于其他语言.
我有一个MySQL远程数据库,其中我有一个"帮助"表,其中包含用于填充使用此数据库的动态网站的帮助页面的代码.
我决定制作一个Delphi应用程序来管理该网站,而不是通过网站本身来提高速度和安全性.
我想用一个TRichEdit来制作帮助文本并使用简单的东西,如对齐,粗体,斜体和带下划线的样式.我不想使用图片和字体.
如何选择丰富的样式文本并将其转换为HTML以放入远程数据库中的BLOB字段,然后如果我想再次编辑它,则重新转换为富文本?
我在FireFox 3中使用contentEditable时遇到问题。在单击鼠标后,光标将出现在div上方或仅部分出现在div中(直到我开始输入时,它才能正常工作)。关于如何阻止这种情况的任何想法?
HTML:
<html>
<head> <title>测试页</ title> </ head>
<身体>
<div id =“ editor” style =“ position:absolute; left:157px; top:230px; width:120px; height:30px”>
<div id =“ input” style =“ width:100%; height:100%; border:1px纯黑色;轮廓:无” contentEditable =” true“> </ div>
</ div>
</ body>
</ html>

richedit richtextbox richtextediting contenteditable richtext
添加一行后,我需要将RichEdit滚动到最后.我有一个单独的RichEdit形式,我不想得到任何关注.我经常尝试建议解决方案:
RichEdit.Lines.Add(someText);
RichEdit.SelStart:=RichEdit.GetTextLen;
SendMessage(RichEdit.handle, EM_SCROLLCARET, 0, 0);
Run Code Online (Sandbox Code Playgroud)
但这对我不起作用.但是,当我在调用SendMessage使用之前关注RichEdit时,RichEdit.SetFocus;它可以正常工作.然而,这破坏了我对应用程序的其他需求.
我正在使用XE2.谢谢
我正在使用在线富文本编辑器,类似于WordPress页面创建者或Stack Overflow后创建者.有人指出,有两种不同类型的在线富文本编辑器:
我正在构建第二种类型.不幸的是,<textarea>也没有使用contenteditable是HTML富文本编辑非常方便.
这个问题<textarea>(如在这里堆栈溢出使用)是你不能显示文本级语义在编辑栏.您不能只突出显示一个单词并使其变为粗体,您必须插入某种标记(例如*****bold*****).不是非常用户友好,也不是真正的"丰富"文本.
另一方面,使用contenteditable解决了这些问题但引入了控制问题.浏览器将插入各种HTML和CSS以使编辑字段看起来很好.如果你点击Enter,浏览器将插入<p>,或<div>,或<br>,或<div><br></div>...取决于浏览器.如果您粘贴从HTML复制的几个段落,您会得到大量过多的标记 - 甚至超过源HTML中的标记.例如,以下源代码:
<p>This is one paragraph!</p>
<p>This is another.</p>
Run Code Online (Sandbox Code Playgroud)
在网站上显示为:
This is one paragraph!
This is another.
Run Code Online (Sandbox Code Playgroud)
...如果你复制并粘贴到contenteditable表格中,可以给你这样的东西:
<p style="line-height: 1em; color: rgb(34, 34, 34); font-size: 12px;
white-space: normal;">This is one paragraph!</p>
<p style="line-height: 1em; color: rgb(34, 34, 34); font-size: 12px;
white-space: normal;">This is another.</p>
Run Code Online (Sandbox Code Playgroud)
...带来内联样式,在某些情况下还有其他HTML.
wysiwyg richedit contenteditable rich-text-editor richeditabletext
我需要将MSWord文件加载到嵌入式编辑器(onlyoffice),修改它,然后作为MSWord文件上传到我的服务器.我已经在我的电脑上安装了onlyoffice. https://api.onlyoffice.com/editors/demopreview#text
当我运行JavascriptExample并按下编辑时,不允许编辑,如何启用文档编辑?是否可以通过http将修改后的文件(按保存后)上传到我的网络服务器的URL?可能是没有使用OnlyOffice的其他解决方案.
全部,
是否可以获得程序使用的 RichEdit 控件的版本?
| Version | Class name | Library | Shipped with | New features
|------------|---------------|--------------|-----------------|
| 1.0 | "RICHEDIT" | Riched32.dll | Windows 95 |
| 2.0 | "RichEdit20W" | Riched20.dll | Windows 98 | ITextDocument
| 3.0 | "RichEdit20W" | Riched20.dll | Windows 2000 | ITextDocument2
| 3.1 | "RichEdit20W" | Riched20.dll | Server 2003 |
| 4.1 | "RICHEDIT50" | Msftedit.dll | Windows XP SP1 | tomApplyTmp
| 7.5 | "RICHEDIT50" | Msftedit.dll | Windows …Run Code Online (Sandbox Code Playgroud) 最近更新:
好吧,我找到了某种罪魁祸首.我改变了控制,RichEdit20W从50W它的朝鲜语(韩语)现在显示.我没有必要更改除init之外的任何其他代码,添加了AfxInitRichEdit2(),并注释掉了LoadLibrary(L"MsftEdit.dll").AfxInitRichEdit5()不适用于VS2010.所有事情都是平等的,Rich Edit 4.1自VS2005开始就已经可以使用了.我现在无法升级到VS2015所以我卡住了.我会为任何可以使韩文工作50W和VS2010的人提供赏金.
我有一个似乎无法解决的困境.
我有一个使用CEdit和CRicheditCtrl的mfc Unicode应用程序.
Rich Edit是50W,从MsftEdit.dllSpy ++ 加载并验证
类名为RICHEDIT50W.
我的问题:
我Courier New对CEdit和CRichEditCtrl使用相同的Font .
作为测试,我使用了一些韩文符号来查看两个
控件的输出.
CEdit输出, ?????????
而
CRichEditCtrl box为每个字符输出a ,就像没有字形一样.
如果他们使用相同的字体,我不应该看到相同的输出字符?
我认为字体绑定不是问题,两者都有相同的默认字体.
任何人都可以解决这个谜语吗?
提前致谢!
请注意,这也适用于其他一些字符集,而不仅仅是韩文
更新
我查看了VS2010写字板示例,它使用CRichEditView,但它
提供了访问嵌入式CRichEditCtrl的包装器.
我以为我可以收集一些信息,但我看不出他们是如何进行
Rich Edit控制调用的.
这就是我为两个控件生成字体的方式.
但是,我正在专门展示Rich Edit部分.
文档说明Font绑定应该处理从默认
字体切换到当前插入点的字体.
我主要是在最后使用插入
ctrl.SetSel(-1,-1);
ctrl.ReplaceSel( str );
并且,根据文档,
如果不是默认字体,这应该根据需要更改为正确的字体.
在写字板示例中,如果我粘贴韩文文本,则字体会切换到
Gulim.
这是我的代码:
LOGFONT lf;
int pitch = 10;
memset(&lf, 0, sizeof(LOGFONT));
HDC hdc = …Run Code Online (Sandbox Code Playgroud) 该RichEdit控件有这个很烦人的功能。每次用户尝试将光标移过其“ 端点 ”时都会发出蜂鸣声。例如,您可以使用WordPad还实现RICHEDIT的进行测试。打开它,输入一些文本,然后Home按键。如果光标不在行首:
打Home键将它移到那里,但随后击中Home一次键会产生蜂鸣声。
乍一看,它似乎是覆盖WM_KEYDOWN和提示WM_KEYUP消息,并阻止RICHEDIT发出哔哔声的情况是一种解决方案...直到我真正开始执行它。但是不幸的是,它并没有听起来那么简单,因为该控件在许多情况下都发出哔哔声!因此,我的击键阻止代码实际上膨胀到了300多个行,而且我仍然看到有些按键不是我要考虑的,或者更糟的是,我可能会覆盖一些有用的行为。(有关详细信息,请阅读下面的内容。)
然后,我决定查看RICHEDIT控件本身的实现。确实可以肯定,例如,如果我们看一下Home按键的实现,C:\WINDOWS\SysWOW64\msftedit.dll我的Windows 10操作系统在映射的偏移量处具有?Home@CTxtSelection@@QAEHHH@Z(称为(或去public: int __thiscall CTxtSelection::Home(int,int)碎片化的))函数,该函数0x3FC00被硬编码为调用MessageBeep(MB_OK),或正是我要消除的内容:
而且,如果您查看0x6B64FD38上面的屏幕快照中的地址,则有一种内置的方法可以绕过它,看起来像是flag 0x800。
因此,深入研究msftedit.dll一下,似乎有一个称为?OnAllowBeep@CTxtEdit@@QAEJH@Z(或去public: long __thiscall CTxtEdit::OnAllowBeep(int)缠结)的函数可以修改以下标志:
经过更多研究后,我发现RICHEDIT控件内置了COM接口,例如ITextServices和ITextHost引用该标志TXTBIT_ALLOWBEEP的ITextServices::OnTxPropertyBitsChange方法。
但是不幸的是,我似乎找不到直接更改该TXTBIT_ALLOWBEEP标志的方式(COM不是我的强项。)我尝试着研究实现ITextHost,但是它有很多虚拟方法与我所用的无关。我试图实现我不知道如何实现。
有谁知道如何清除该TXTBIT_ALLOWBEEP标志?
PS。这就是为什么我没有采用覆盖按键的方法的原因:仅举一个例子。说,如果我覆盖VK_HOME按键。我需要确保光标不在该行的开头,而且也没有选择。但是,我需要确保Ctrl在光标位于窗口最上方的情况下该键没有按下。然后与Shift密钥相同,我什至Alt不知道该怎么做...等等。哦,这只是Home …
我已经用谷歌搜索并检查了许多地方的解决方案,但我发现的所有案例都不同或涉及比简单地添加或删除行更高级的东西。基本上,我想做一种滚动丰富的编辑(另一种方法是将插入符号移到底部,我已经找到了解决方案)。
我正在向它添加行并检查富编辑Lines.Count的OnChange事件,一旦它达到大于 15 我想调用的值Lines.Delete(0),但是我收到错误:
RichEdit line insertion error
Run Code Online (Sandbox Code Playgroud)
有人能告诉我我在这里做错了什么吗?
richedit ×10
delphi ×4
unicode ×2
ansi ×1
c++ ×1
com ×1
delphi-2006 ×1
delphi-2010 ×1
delphi-xe2 ×1
dll ×1
fonts ×1
html ×1
javascript ×1
mfc ×1
onlyoffice ×1
richtext ×1
richtextbox ×1
rtf ×1
version ×1
winapi ×1
wysiwyg ×1