为什么要左键双击olecontainer之后才能显示word文档呢?procedure TForm1.Button1Click(Sender: TObject);
       var   
          sfilename:string;   
          bs:Tadoblobstream;
          begin   
              bs:=Tadoblobstream.Create(TBLOBfield(adotable1.FieldByName('PactText')),bmread);
              try
                  sfilename:=extractfilepath(application.ExeName)+trim(adotable1.fieldbyname('DocName').AsString);
                  sfilename:=sfilename+'.'+'doc';   
                  bs.SaveToFile(sfilename);   
                  try
                      //olecontainer1控件放在一个名字叫djhyopenform的窗体里
                      djhyopenform:=Tdjhyopenform.Create(self);
                      djhyopenform.olecontainer1.CreateObjectFromFile(sfilename,false);
                      djhyopenform.OleContainer1.Iconic:=true;   
                      djhyopenform.ShowModal;
                  finally
                      djhyopenform.Free;
                  end;
              finally   
                  bs.free;   
              end;   
          end;   

解决方案 »

  1.   

    OleContainer是有这个问题的,而且微软不再修正,可以采用微软新的DsoFramer,网博士就是这么做的。
      

  2.   

    补充一个问题:为什么执行上述代码显示WORD文档之后,在程序所在的文件夹里面会产生一个所显示的Word文档呢?不想产生文档怎么办?
      

  3.   

    To SQLDebug_Fan:怎么放到临时文件夹去呢?代码如何修改,望赐教!
      

  4.   

    就是先把文件放到临时目录,然后用OLE打开。
      

  5.   

    可以。
    sfilename:=extractfilepath(application.ExeName)+trim(adotable1.fieldbyname('DocName').AsString); 
    这个DocName就是正打开文档的文件名。
      

  6.   

    extractfilepath(application.ExeName)把这个改到临时目录下,获取临时目录方法:function TempPath: string;
    {
      返回临时文件夹目录路径
    }
    begin
      SetLength(Result, GetTempPath(0, PChar(Result)));
      ZeroMemory(PChar(Result), Length(Result));
      GetTempPath(Length(Result), PChar(Result));
      Result := PChar(Result);
    end;
      

  7.   

    To SQLDebug_Fan:怎么在我的程序里面修改放入临时文件目录呢?直接点吧