我有一个TDBWPRichText链接到我的数据库上的MemoField。 当我按下按钮时,我希望格式化文本前置一些文本。 可视组件显示前置字符串,但是当我发布时,备忘录的值不会改变。
MyTable.Edit;
DBRichedit1.SelLength := 0;
DBRichedit1.CPPosition := 0;
DBRichedit1.Inserting := True;
DBRichedit.InputString('Test:' + #13);
//it shows the value on the component here
MyTable.Post;
在MyTableBeforePost中,Field显然具有旧值
Field.Value <> Field.OldValue
如果我手动输入文字,它可以正常工作
我也尝试手动保存(评论在哪里),但字符串是旧值
DBRichedit.SaveToString(MyTable.FieldByName('MyMemo').AsString,False);
无论如何,我可以将前置字符串放入我的表格中吗?
答案 0 :(得分:1)
这比我想象的要复杂得多,尽管我记得在Delphi代码中使用RichText会有点痛苦。
无论如何,以下适用于我,添加存储在磁盘文件中的Rtf头;看看它是否适合你。它不漂亮,我不禁想到它是非常的 冗长。
procedure TForm1.InsertHeader;
// Prepend an RTF header to an existing RTF DB field
var
TL : TStringList;
ExistingText : String;
RE : TRichEdit;
MS : TMemoryStream;
begin
MS := TMemoryStream.Create;
TL := TStringList.Create;
// The reason for using a temporary RichEdit is to enlist its assistance
// in manipulating the rich text
RE := TRichEdit.Create(Nil);
RE.Parent := Self;
try
ExistingText := AdoQuery1.FieldByName('Memo').AsString;
RE.Clear;
// The reason for using the richedit's SelText in the following is that my
// initial naive attempt to assign to its Lines.Text provoked a "Line Insertion Error"
RE.SelStart := 0;
RE.SelText := ExistingText + #13#10;
TL.LoadFromFile('\d7\demos\richedit\header.rtf');
RE.SelStart := 0;
RE.SelText := RE.SelText + TL.Text;
RE.Lines.SaveToStream(MS);
MS.Position := 0;
AdoQuery1.Edit;
TMemoField(AdoQuery1.FieldByName('Memo')).LoadFromStream(MS);
AdoQuery1.Post;
finally
TL.Free;
RE.Free;
MS.Free;
end;
end;
顺便说一下,如何在这里的TRichEdit中将RTF插入预先存在的RTF:http://delphidabbler.com/tips/57
答案 1 :(得分:0)
几个小时后,我使用了WPtools的开发工具,他立即向我提供了一个非常简单的答案: 你必须打电话
RichEdit.Changing
在代码
中与之交互之前