• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 用C++Builder實現Word 97自動化

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    華東交大控制信息工程研究所 劉遵雄 要在應用程序中控制Word 97 的運行,首先必須在編制自動化客戶程序時使其頭文件中包含文件ComObj.hpp,寫入#include 。編程工具C ++Builder 的 開發 者把調用Word 97 自動化對象的功能大致包裝成了幾個Ole object class
    華東交大控制信息工程研究所 劉遵雄

      要在應用程序中控制Word 97 的運行,首先必須在編制自動化客戶程序時使其頭文件中包含文件ComObj.hpp,寫入#include 。編程工具C ++Builder 的開發者把調用Word 97 自動化對象的功能大致包裝成了幾個Ole object class 函數,應用程序設計人員可以很方便地利用它們。

    *設定Ole 對象的屬性:

        OlePropertyGet(propname)
        OlePropertySet(propname,value)
       其中value 是任何可以轉換為Variant 型的值
    *調用Ole 對象的方法:

        OleProcedure(OleProcName,[val,...])
        OleFunction(OleFuncName,[val,...])
        其中val 是任何可以轉換為Variant 型的值
      可以通過OleFunction(OleFuncName,[val,...]) 父對象返回其子對象,句法是:子對象名= 父對象名. OleFunction(OleFuncName,val)。而且可以對此方法組合從父對象返回其下層對象的對象。

      C ++Builder 中使用OLE 自動化控制Word 97,必須掌握Word 97 的自動化對象及Microsoft Word Visual Basic 幫助文件中關于Word 的對象方法和屬性。Word 對象代表一個Word 的元素,如文檔、段落、書簽或單個的字符。集合是一個對象,該對象包含其他數個對象,通常這些對象屬于相同的類型,例如,一個集合對象中可包含文檔中的所有書簽對象。通過使用屬性和方法,可以修改單個的對象,也可修改整個的對象集合。屬性是對象的一個特性或者該對象操作的一個方面。例如,文檔屬性包含名稱、內容、保存狀態,以及是否啟用修訂。要更改一個對象的屬性,可以修改屬性的值。方法是對象可以進行的動作。

      代表Word 97 應用程序的自動化對象有兩個:Word.Application 和Word.Basic,通過Application 對象的WordBasic 屬性可以允許它們之間進行變換賦值。在C ++Builder 中通過CreateOleObject(" ...") 就可啟動Word 并獲得句柄,將其賦給Variant 變量。如有兩個Variant 型變量V1 和V2,WordBasic 是Application 對象的屬性:

        V1=CreateOleObject("Word.Application");
        V2=V1.OleFunction("WordBasic")。
      以下通過一個簡單的例子,具體說明如何在C ++Builder 中實現Word 97 的自動化功能,其功能是打開或創建新文檔,并向當前活動中發送文字、插入位圖和畫條直線等。在C ++Builder 集成開發環境IDE 下,建立一項目Project1,其中包含Form1(其Caption 為OLE Automation)的單元文件Unit1.cpp。表單Form1 的OpenDialog1 對象的Filter 設為Word 文檔或位圖。Unit1.cpp 的頭文件中必須包含"ComObj.hpp"。代碼如下:

    頭文件Unit1.h 代碼為:
    #ifndef Unit1H
    #define Unit1H
    // -------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ComObj.hpp>
    #include <Dialogs.hpp>
    #include <ExtCtrls.hpp>
    // -------------
      class TForm1 : public TForm
    {
    __published:      // IDE -managed Components
        TButton *Button1;
        TOpenDialog *OpenDialog1;
        TButton *Button2;
        TMemo *Memo1;
        TBevel *Bevel1;
        TButton *Button3;
        TLabel *Label1;
        TButton *Button5;
        TBevel *Bevel2;
        TLabel *Label2;
        TLabel *Label3;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button5Click(TObject *Sender);
    private:// User declarations
    public:// User declarations
        Variant V,Vdocuments,Vdocument1,Vdocument2,Vactive;
    / *定義Variant 型全局// 變量,
    分別指代Application 對象, V 的Documents
      對象, Vdocuments 的Document 對象
    (Vdocument1,Vdocument2)以及
       V 的ActiveDocument 對象*/
        int tag; // 用于記錄Button3 被點擊的次數
        __fastcall TForm1(TComponent *Owner);
        Variant __fastcall GetWordObject();
        // 獲得Word 97 自動化對象函數
        void __fastcall Add(int i);
        // 編輯當前活動文檔指定的
          段落文字的函數
    };
    // -------------
    extern PACKAGE TForm1 *Form1;
    // -------------
    #endif
    Unit1.cpp 文件代碼為:
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include <ComObj.hpp>
    // -------------
    #pragma package(smart_init)
    #pragma resource " *.dfm"
    TForm1 *Form1;
    // -------------
    __fastcall TForm1::TForm1(TComponent *Owner)
        : TForm(Owner)
    {
    tag=1;// 令tag 的初值為1,
       其將隨Button3 的點擊次數而遞增
    }
    // -------------
    Variant __fastcall TForm1::GetWordObject()
    {
    Variant Obj1;
    AnsiString AppName="Word.Application" ;
    HWND hPrevApp = ::FindWindow(NULL,
                      "Microsoft Word");
    if(!hPrevApp)
    {
    Obj1=CreateOleObject(AppName) ;
    //Word 沒啟動就啟動它返回一自動化對象
    }
    else  
    Obj1=GetActiveOleObject(AppName);
    // 否則返回正在運行的實例自動化對象
    Obj1.OlePropertySet("Visible",true);
    return Obj1;
      }
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int j;
    V=GetWordObject();
      // 獲得Word 97 自動化對象Application
    Vdocuments=V.OleFunction("Documents");
    // 通過Application 獲取Documents 對象
    if (OpenDialog1 ->Execute())
    // 使用Documents 對象的Open 方法
      打開文件,并返回Document 對象
    Vdocument1=Vdocuments.OleFunction
       ("Open",OpenDialog1 ->FileName);
    j=Vdocument1.OleFunction("ComputeStatistics",2);
      // 計算打開文檔的頁數
    Label1 ->Caption=" 文件" +
    Vdocument1.OlePropertyGet("Name")
     ?。?quot; 頁數是:" +IntToStr(j);
    }
    // -------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    int i,j;
    i=tag;
    Vactive=V.OleFunction("ActiveDocument");
    // 獲取Application 的ActiveDocument 對象
    j=Vactive.OleFunction("ComputeStatistics",4);
    // 計算當前文檔的段落數
    // 的的Paragraphs 集合對象增加一段
    Vactive.OleFunction("Paragraphs").OleFunction("Add");
    i=j +i;// 當前文檔被編輯的段落序號
    Add(i);// 調用編輯當前活動文檔
            指定的段落文字的函數
    Memo1 ->Clear();// 清除Memo1 的內容
    tag=tag +1;
    }
    // --------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    V=GetWordObject();
    Vdocuments=V.OleFunction("");
    Vdocument2=Vdocuments.OleFunction("Add");
    // 使用Documents 對象的Add 方法新建文檔
    Vdocument2.OlePropertySet("Password","12345");
      // 設置新建文檔的口令
    }
    // --------------
    void __fastcall TForm1::Add(int i)
    {
    Variant V1;
    // 設置被編輯段的內容、字體大小、
       顏色及是否斜體
    V1=((Vactive.OleFunction("Paragraphs")).
        OleFunction("Item",i)).OleFunction("Range");
    (V1.OleFunction("Font")).OlePropertySet("Italic",true);
    (V1.OleFunction("Font")).OlePropertySet("Size",18);
    (V1.OleFunction("Font")).OlePropertySet("ColorIndex",6);
    (V1.OleFunction("Font")).OlePropertySet("Size",18);
    V1.OlePropertySet("Text",Memo1 ->Text);
    }
    // -------------
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
    Variant Vshape,Vactive1,Vline;
    Vactive1=V.OleFunction("ActiveDocument");
    Vshape=Vactive1.OleFunction("Shapes");
    // 獲取當前活動文檔的Shapes 對象
    // 使用Shapes 對象的AddLine 方法化直線
    Vline=Vshape.OleFunction("AddLine",90,80,400,80);
    if (OpenDialog1 ->Execute())
    // 使用Shapes 對象的AddPicture
       方法插入指定位圖
      Vshape.OleFunction("AddPicture",OpenDialog1
       ->FileName,50,50,80,100);
    }
    ----此程序在C ++Builder 3 中編譯通過,運行該應用程序首先必須獲得文檔,然后才可以編輯文檔?!?/p>

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>