//在Form上打开显示word
procedure Tmain_form.Button1Click(Sender: TObject);
var  word_name:variant;
  i:Integer;begin    if not OpenDialog1.Execute then exit;  //try
  //WordApplication1:=GetActiveOleObject('word.Application');
  //except
  //WordApplication1:=CreateOleObject('word.Application');
  
 // end;
 try
     OleContainer1.CreateObjectFromFile(OpenDialog1.FileName,true);
     Olecontainer1.Doverb(1);
     Olecontainer1.Run;
     // OleContainer1.OleObject.application.CommandBars[ 'Standard '].visible:=   false;//关闭标准工具栏
     WordApplication1.ConnectTo(IDISPATCH(OleContainer1.OleObject.Application) as WordApplication);
    //for   i:=1   to   WordApplication1.CommandBars.Count   do
     //     WordApplication1.CommandBars.Item[i].Set_Visible(false);
   except   
   end;
     
      //OleContainer1.OleObject.CommandBars[ 'Standard '].visible:=   false;//
end;//对word加标签procedure Tmain_form.Button3Click(Sender: TObject);
var
NoPrompt,OriginalFormat:OleVariant;
pRange: olevariant;
word_name : olevariant;
begin
 //showmessage(WordApplication1.selection.text);
  try
        WordApplication1.Selection.InsertBefore('<span style="COLOR: #ff6600">');
        WordApplication1.Selection.InsertAfter('</span>');        NoPrompt := true;
        OriginalFormat:=wdOriginalDocumentFormat;
         WordApplication1.Documents.Save(NoPrompt,OriginalFormat);
          word_name :=OpenDialog1.FileName;
        OleContainer1.SaveAsDocument(word_name);
        
        
        OleContainer1.DoVerb(1);
        
  except
          end;
end;
procedure Tmain_form.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    try    
    WordApplication1.Quit;
    WordApplication1.Disconnect;
      
    
    except
         showmessage('资源释放错误');
    end;
end;现在问题是我想对选种的信息加不同的颜色标记,现在是我的标记加上去了,但是我不知道怎么让word识别这些颜色标记,然后,上面的程序还很不成熟,然后通过程序读取不同颜色的内容,现在退出时也老提示别的程序占用资源,各位大哥大姐帮帮忙

解决方案 »

  1.   


    WordApplication1.Selection.InsertBefore(' <span style="COLOR: #ff6600">'); 
    WordApplication1.Selection.InsertAfter(' </span>');
    改成
    WordApplication1.Selection.Font.Color := $ff6600
    试试
      

  2.   

    WordApplication1.Selection.Font.Color := $ff6600 
    应该不是这的问题
      

  3.   

    上面的可以,谢谢两位,不过怎么提取内容呢,我做这个的目的就是截取word中两个标记之件的内容然后入库,我找了一个例子是分页入库的,但是不知道怎么通过获得两个标记间的内容入库,中间可以包含图片
      

  4.   

    var
      ARange: OleVariant;
    ARange := WordApplication1.Selection.Range;
    你要加标记可以用
    WordApplication1.ActiveDocument.Books.Add('标记一', ARange);
    以后取的话可以用
    ARange := WordApplication1.ActiveDocument.Books.Item('标记一');
    获取其文字是ARange.Text
    至于图片等,不太好处理,因为Word除了能插图片还能插入表格、形状、OLE对象,你想将他们入库还不如把整个Range拷贝到另外一个Word文档中,然后把Word文档入库。
      

  5.   

    谢谢lake_cx ,我现在想使用的方法是遍历所有的字符,然后通过Range定位截取两点间的内容,转化成流存入数据库,这样把图片就包进去了,不知道行不行,我先试一下,请大家指导,看这种思路有没有问题
      

  6.   

    马上结贴了,最后一点,如果把选种信息转换成流,比如tmemorystream