文章里面有文字(中文,英文),有图片,超级链接。打算用RIchedit,或者RXrichedit组件。我想能够把它们存储成二进制的文件,可以把这个二进制的文件打开。
学了一段时间的流操作,总是学不会,因此希望高手能够写一个小程序,将源代码给我,能够实现上面的效果,小弟愿意200分相送。当然希望存储后的文件越小越好。分不够小弟愿意再加。只求能够得到这段代码。
不胜感激。

解决方案 »

  1.   

    要保存RichEdit中的内容到数据库,最好适应BLOB字段,一般VARCHAR会丢失文本样式,而且
    长度有限制。
      你可以先把RichEdit的内容保存到一个临时的文件,也可以使用Stream实现。下面是相关
    的过程。
    procedure SaveRichEditBlobField(FieldName: string; DataSet: TDataSet;
      RichEdit: TRichEdit);
    var
      MemoStream: TMemoryStream;
      Blob: TStream;
    begin
      if RichEdit.Lines.Count = 0 then
      begin
        Exit;
      end;
      Screen.Cursor := crHourGlass;
      MemoStream := TMemoryStream.Create;
      try
        RichEdit.Lines.SaveToStream(MemoStream);
        MemoStream.Seek(0,soFromBeginning);
        Blob := DataSet.CreateBlobStream(DataSet.FieldByName(FieldName),bmWrite);
        try
          Blob.Seek(0,soFromBeginning);
          Blob.CopyFrom(MemoStream,MemoStream.Size);
        finally
          Blob.Free;
        end;
      finally
        MemoStream.Free;
        Screen.Cursor := crDefault;
      end;
    end;procedure LoadRichEditFromBlobField(FieldName: string; DataSet: TDataSet;
      RichEdit: TRichEdit);
    var
      Blob: TStream;
    begin
      if DataSet.FieldByName(FieldName).IsNull then
      begin
        Exit;
      end;
      Screen.Cursor := crHourGlass;
      Blob := TMemoryStream.Create;
      try
        TBlobField(DataSet.FieldByName(FieldName)).SaveToStream(Blob);
        Blob.Seek(0, soFromBeginning);
        if Blob.Size = 0 then
        begin
          Exit;
        end;
        RichEdit.LoadFromStream(Blob);
      finally
        Blob.Free;
        Screen.Cursor := crDefault;
      end;
    end;
      

  2.   

    如还可以用bolb的专用包来对blob进行操作。
      

  3.   

    对不起,我说的不是往数据库中存储,是建立一个文件,一个二进制的文件。
    把Richedit中的文字,图片了之类的都存放到文件中去。