首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ Builder 實現 Word 97 自動化控制:OLE 自動化完整範例

     編輯:關於C++

核心 OLE 自動化函數

C++ Builder 封裝 Word 97 自動化介面為 Variant 型別操作:

  • 屬性存取:OlePropertyGet(propname)、OlePropertySet(propname, value)
  • 方法呼叫:OleProcedure(procName, args...)、OleFunction(funcName, args...)(可回傳子物件)

鏈式呼叫範例:子物件 = 父物件.OleFunction("Method", arg)。

Word 97 自動化物件模型要點

  • Word.Application 與 Word.Basic 兩大根物件,透過 Application.WordBasic 互轉。
  • 集合物件:如 Documents、Paragraphs、Shapes。
  • 啟動/取得執行個體:CreateOleObject("Word.Application") 或 GetActiveOleObject(...)。

完整範例程式架構

表單元件

  • TOpenDialog(篩選 Word/位圖)、TMemo(輸入文字)、數個 TButton、TLabel。

關鍵函數實作

Variant __fastcall TForm1::GetWordObject() {
    Variant Obj1; AnsiString AppName = "Word.Application";
    HWND hPrevApp = ::FindWindow(NULL, "Microsoft Word");
    if (!hPrevApp) Obj1 = CreateOleObject(AppName);
    else Obj1 = GetActiveOleObject(AppName);
    Obj1.OlePropertySet("Visible", true);
    return Obj1;
}

void __fastcall TForm1::Button1Click(TObject *Sender) {
    V = GetWordObject();
    Vdocuments = V.OleFunction("Documents");
    if (OpenDialog1->Execute())
        Vdocument1 = Vdocuments.OleFunction("Open", OpenDialog1->FileName);
    int pages = Vdocument1.OleFunction("ComputeStatistics", 2);
    Label1->Caption = "檔案 " + Vdocument1.OlePropertyGet("Name") + " 頁數:" + IntToStr(pages);
}

void __fastcall TForm1::Button3Click(TObject *Sender) {
    Vactive = V.OleFunction("ActiveDocument");
    int paras = Vactive.OleFunction("ComputeStatistics", 4);
    Vactive.OleFunction("Paragraphs").OleFunction("Add"); // 新增段落
    Add(paras + tag); // 寫入文字
    tag++;
}

void __fastcall TForm1::Add(int i) {
    Variant 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.OlePropertySet("Text", Memo1->Text);
}

void __fastcall TForm1::Button5Click(TObject *Sender) {
    Variant Vshape = Vactive1.OleFunction("Shapes");
    Vshape.OleFunction("AddLine", 90, 80, 400, 80); // 畫直線
    if (OpenDialog1->Execute())
        Vshape.OleFunction("AddPicture", OpenDialog1->FileName, 50, 50, 80, 100); // 插入圖片
}

執行順序提醒

必須先透過 Button1 開啟/建立文件(取得 Vdocument),才能進行後續編輯、繪圖操作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved