需求内容:
1、  把WORD里的内容以复制粘贴的方式放出Delphi程序中,
     要求可以正常显示表格及图片,用RichEdit好像不可以的。
2、可以把Word信息保存在数据库中,然后需要的时候再调出来。

解决方案 »

  1.   

    用 TOleContainer, 在System面板下, 看如何?? OleContainer1.LoadFromStream();
     OleContainer1.SaveToStream();
      

  2.   

    有没有相关的组件呢?
    如何在Delphi 程序里显示呢?
      

  3.   

    要不做个类似word的东西,格式弄成.doc
      

  4.   

    用OleContainer就可以了,自己研究一下吧。
      

  5.   

    http://princed.mblogger.cn/posts/11886.aspxsql数据库中存取word文件的实现 
    procedure TsampleForm.OpenDOCClick(Sender: TObject);
    var
      MemSize: Integer;
      Buffer: PChar;
      MyFile: TFileStream;
      Stream: TBlobStream;
    begin
      OpenDialog1.Filter:='WORD文档(*.DOC)|*.DOC'
    ;{从对话窗选择文件}
      if OpenDialog1.Execute then begin
        MyFile:=TFileStream.Create
    (OpenDialog1.FileName,fmOpenRead);
        with table1 do   {‘table1’为含BLOB字段的表名}
        begin
          Open;
          Edit;
          Stream := TBlobStream.Create(FieldByName('Doc')
     as TBlobField, bmWrite);
          {‘Doc’为BLOB字段名} 
          MemSize := MyFile.Size;
          Inc(MemSize); {Make room for the
     buffer's null terminator.}
          Buffer := AllocMem(MemSize);    
     {Allocate the memory.}
          try
            Stream.Seek(0, soFromBeginning);
     {Seek 0 bytes from the stream's end point}
            MyFile.Read(Buffer^,MemSize);
            Stream.Write(Buffer^,MemSize);
          finally
            MyFile.Free;
            Stream.Free;
          end;
               try
                 Post;
               except
                 on E: EDatabaseError do
               if HandelException(E)< >0 then exit
             else
             raise;
               end;
         end;
            Doc_ole.CreateObjectFromFile
    (OpenDialog1.FileName,False);
            Doc_ole.Run;{Doc_ole为ToleContainer构件名}
       end;
    end;---- 以上为向数据库中写入的程序,应用中从对话窗取出文件在ToleContainer构件中显示的同时存入数据库。 procedure TsampleForm.GetDocClick
    (Sender: TObject);
    var
      MemSize: Integer;
      Buffer: PChar;
      MyFile: TFileStream;
      Stream: TBlobStream;
    begin
        MyFile:=TFileStream.Create('c:\temp.tmp',fmCreate);
        with Query1 do
        begin
          Stream := TBlobStream.Create
    (FieldByName('Doc') as TBlobField, bmRead);
          MemSize := Stream.Size;
          Inc(MemSize); 
    {Make room for the buffer's null terminator.}
          Buffer := AllocMem(MemSize);   
      {Allocate the memory.}
          try
            Stream.Read(Buffer^,MemSize);
            MyFile.Write(Buffer^,MemSize);
          finally
            MyFile.Free;
            Stream.Free;
          end;
        end;
          if FileExists('c:\temp.DOC') 
    then DeleteFile('c:\temp.DOC');
          if FileExists('c:\temp.tmp') 
    then begin
            RenameFile('c:\temp.tmp', 'c:\temp.DOC');
            Doc_ole.CreateObjectFromFile
    ('c:\temp.DOC',False);
            Doc_ole.Run;
          end;
    end;---- 以上程序为从数据库从将WORD文档取出,并放在temp.doc的临时文件上并在ToleContainer构件中显示。 ---- 在程序的其他部份应准确控制表记录指针,使WORD文档的存取发生在正确的记录位置。 
      

  6.   

    有没有相对完整一点的源代码?
    有没有人用过RxRichEdit?或者RichView 之类的呢?
    如果用这种控件会不会好控制一点呢?提到OLE,就有点感冒,不太会用,经常搞的机器很慢的样子。
    其实我只是想实现能够在一个窗体里显示或编辑可以带图片、表格、文字、及背景的小程序,然后可以
    把相关的内容保存到数据库中就可以了?
    有高人知道吗?
    在此等待
      

  7.   

    强烈建议用rxrichedit
    我以前做的一个就是这样子做的.
      

  8.   

    ririchedit使用方便,和平常的控件一样的用,而且省了很多的事情,强烈建议
      

  9.   

    用DBRichEdit吧!我以前用过的,不过我显示的只有文字和表格!
      

  10.   

    procedure Tfrm_wlblx.DOC1Click(Sender: TObject);
    var
      MemoryStream:TMemoryStream;
      i:integer;
    begin
      try
      if datasource1.DataSet.IsEmpty then exit;
      MemoryStream:=TMemoryStream.Create;
      if opendialog1.Execute then
      begin
        opendialog1.Filter:='*.doc';
        MemoryStream.LoadFromFile(opendialog1.FileName);
      end
      else exit;
      //MemoryStream.LoadFromFile('f:\b.doc');
      if DBGrid1.SelectedRows.Count<=1 then
      begin
        dm.ADOQry1.Close;
        dm.ADOQry1.SQL.Clear;
        dm.ADOQry1.SQL.Add('update make_item set mi_doc=:content where mi_no=:ls_no');
        dm.ADOQry1.Parameters.ParamByName('ls_no').Value:=dbgrid1.Fields[0].AsString;//ps_no;
        dm.ADOQry1.Parameters.ParamByName('content').LoadFromStream(MemoryStream,ftgraphic);
        dm.ADOQry1.ExecSQL;
      end
      else
      begin
      for i := 0 to DBGrid1.SelectedRows.Count-1  do
      begin
        DBGrid1.DataSource.DataSet.GotoBookMark(Pointer(DBGrid1.Selectedrows.Items[i]));
        dm.ADOQry1.Close;
        dm.ADOQry1.SQL.Clear;
        dm.ADOQry1.SQL.Add('update make_item set mi_doc=:content where mi_no=:ls_no');
        dm.ADOQry1.Parameters.ParamByName('ls_no').Value:=dbgrid1.Fields[0].AsString;//ps_no;
        dm.ADOQry1.Parameters.ParamByName('content').LoadFromStream(MemoryStream,ftgraphic);
        dm.ADOQry1.ExecSQL;  end;
      end;  //dm.ADOQry1.ExecSQL;
      showmessage('保存DOC文件成功!');
      except
      end;end;
      

  11.   

    上面的是写:
    这是读:procedure Tfrm_wlblx.DOC2Click(Sender: TObject);
    var
      TempMemory:TStream;
      Memory:TMemoryStream;
      fname:string;
      a:OleVariant;
    begin
       if datasource1.DataSet.IsEmpty then exit;
       dm.ADOQry1.CLOSE;
       dm.ADOQry1.SQL.CLEAR;
       dm.ADOQry1.SQL.ADD('select mi_doc from make_item where mi_no=:ls_no');
       dm.ADOQry1.Parameters.ParamByName('ls_no').Value:=ps_no;
       dm.ADOQry1.OPEN;
       fname:='c:\3.doc';
       dm.ADOQry1.Edit;
       Memory:=TMemoryStream.Create;
       TempMemory:=dm.ADOQry1.CreateBlobStream(dm.ADOQry1.fieldbyname('mi_doc'),bmReadWrite);
       Memory.CopyFrom(TempMemory,TempMemory.Size);
       Memory.SaveToFile(fname);
     ///
       a:=fname;
       WordApplication1.Connect;
       WordApplication1.Visible:=true;
       WordDocument1.Connectto(WordApplication1.Documents.Open(a,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam));
       WordApplication1.Disconnect;
      ///end;
      

  12.   

    偶现在想要关于RxRichEdit的相关代码。