我想在ole container所在的視窗里展示ppt(2007)的所有內容,探索了一下,可以通過進入編輯狀態來達到效果。但是代碼寫的進入不了編輯狀態。
我先手動在office上人工操作了一下,探到步驟是這樣的:
1、powerpoint插入物件:從檔案創建物件(看到頁面插入了第一頁的縮略圖),不大但可以調整大小。
2、在上面右鍵點擊“演示文稿物件”可以看到能夠對其做哪些操作:有放映、編輯、打開,試了都可以做。
3、點擊其中的編輯(其實直接在物件上雙擊也可),看到zoom和滾動條。所有頁面都展示出來了,也能編輯了。
但是,用代碼寫的卻始終進入不了編輯狀態,這個編輯狀態,應該是對物件進行激活不?
代碼是這樣寫的:
//TOleContainer *Ole; //在TForm里放了這個控制元件,希望ppt在這個控制元件里面顯示(不是另啟powerpoint軟體視窗)
Ole->CreateObjectFromFile(m_file, false);
Ole->DoVerb(ovOpen);
Ole->Run();
Ole->SizeMode = 2; // 滿屏顯示
Ole->AutoActivate = 3; //自動激活:沒有看到效果
Ole->AutoVerbMenu = true; //能夠看到物件右鍵選單有放映、編輯、打開,但是滑鼠點了無效
后面做這些都失敗的:
Ole->OleObject.OlePropertyGet("Application").OlePropertyGet("Windows"); 或者獲取ActiveWindow、ActivePresentation都失敗的。
錄了宏來看:
在PPT的軟體上插入物件:
ActiveWindow.Selection.SlideRange.Shapes.AddOLEObject(Left:=120, Top:=110, Width:=480, Height:=320, FileName:="xxx.pptx", Link:=msoFalse).Select
進入編輯狀態:
ActiveWindow.Selection.ShapeRange.OLEFormat.DoVerb Index:=2
Application.WindowState = ppWindowMaximized
但是代碼Ole->OleObject.OleFunction("Select");報錯,執行Ole->DoVerb(2);沒有任何效果,還是沒有獲取到ActiveWindow。
請大家幫忙看看應該怎么搞?謝謝!剛剛接觸ole,完全不懂啊,看了ole和office的一些資料,有點暈了。
備注:
另外一種代碼在網上搜到是這樣的(但是不滿足我的需求):
Ole->CreateObject("PowerPoint.Application",false);
Ole->OleObject.OlePropertySet("Visible", true);
Ole->OleObject.OlePropertyGet("Presentations") .OleFunction("Open", WideString(m_file), false, false, true); //一定要用WideString
這個代碼會在ole container外新開視窗和行程(能看到windows開了個新視窗,而不是在BCB的Tform的ole container控制元件上顯示)來啟動powerpoint。和預期要的效果不一樣。
在程式開頭加了Ole->AllowInPlace = true; 也沒有作用。
而且這個物件是application的,想用大家的關閉工具條代碼,會報錯:
IOleInPlaceObject * IOPO ;
Ole->OleObjectInterface->QueryInterface(IID_IOleInPlaceObject,(void **)&IOPO);
IOPO->UIDeactivate(); //報了踩記憶體的錯誤
IOPO->Release();
如果不能解決上面的問題,解決這個也行哈:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/124388.html
上一篇:使用ASM是否要保存暫存器
