delphi – 在运行时使用TRichEdit而不定义父级
发布时间:2020-12-15 10:14:00 所属栏目:大数据 来源:网络整理
导读:我需要在运行时使用TRichEdit来执行rtf到文本转换,如所讨论的 here.我已经这样做了,但是如果我不能填充TRichedit.Lines,我必须设置一个虚拟表单作为父代。 (错误:父缺少)。 我下面粘贴我的功能,任何人都可以建议一种避免定义父母的方法?你也可以评论这
我需要在运行时使用TRichEdit来执行rtf到文本转换,如所讨论的
here.我已经这样做了,但是如果我不能填充TRichedit.Lines,我必须设置一个虚拟表单作为父代。 (错误:父缺少)。
我下面粘贴我的功能,任何人都可以建议一种避免定义父母的方法?你也可以评论这个,告诉我,如果你找到一个更有效率的想法? 注意:我需要一个字符串,而不是TStrings作为输出,这就是为什么它是这样设计的。 function RtfToText(const RTF: string;ReplaceLineFeedWithSpace: Boolean): string; var RTFConverter: TRichEdit; MyStringStream: TStringStream; i: integer; CustomLineFeed: string; begin if ReplaceLineFeedWithSpace then CustomLineFeed := ' ' else CustomLineFeed := #13; try RTFConverter := TRichEdit.Create(nil); try MyStringStream := TStringStream.Create(RTF); RTFConverter.parent := Form4; // this is the part I don't like RTFConverter.Lines.LoadFromStream(MyStringStream); RTFConverter.PlainText := True; for i := 0 to RTFConverter.Lines.Count - 1 do begin if i < RTFConverter.Lines.Count - 1 then Result := Result + RTFConverter.Lines[i] + CustomLineFeed else Result := Result + RTFConverter.Lines[i]; end; finally MyStringStream.Free; end; finally RTFConverter.Free; end; end; 更新: function RtfToText(const RTF: string;ReplaceLineFeedWithSpace: Boolean): string; var RTFConverter: TRichEdit; MyStringStream: TStringStream; begin RTFConverter := TRichEdit.CreateParented(HWND_MESSAGE); try MyStringStream := TStringStream.Create(RTF); try RTFConverter.Lines.LoadFromStream(MyStringStream); RTFConverter.PlainText := True; RTFConverter.Lines.StrictDelimiter := True; if ReplaceLineFeedWithSpace then RTFConverter.Lines.Delimiter := ' ' else RTFConverter.Lines.Delimiter := #13; Result := RTFConverter.Lines.DelimitedText; finally MyStringStream.Free; end; finally RTFConverter.Free; end; end; 解决方法
TRichEdit控件是Windows中RichEdit控件的封装。 Windows的控件是… … Windows,他们需要一个窗口句柄来工作。 Delphi需要调用CreateWindow或CreateWindowEx来创建句柄,并且这两个例程都需要有效的父窗口句柄才能正常工作。 Delphi尝试使用控件的父代的句柄(这是有道理的!)。幸运的是,可以使用一个替代的构造函数(CreateParanted(HWND)构造函数),而Microsoft的好人组成了HWND_MESSAGE,用作实际上不需要“窗口”(仅消息)的窗口的父级。
此代码按预期工作: procedure TForm2.Button2Click(Sender: TObject); var R:TRichEdit; L:TStringList; begin R := TRichEdit.CreateParented(HWND_MESSAGE); try R.PlainText := False; R.Lines.LoadFromFile('C:Temptext.rtf'); R.PlainText := True; Memo1.Lines.Text := R.Lines.Text; finally R.Free; end; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |