在TDBWPRich文本上的输入字符串之后,值不会保存到链接的备注字段

时间:2014-07-18 08:47:00

标签: database delphi rtf delphi-xe5

我有一个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);

无论如何,我可以将前置字符串放入我的表格中吗?

2 个答案:

答案 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

在代码

中与之交互之前