您不需要OleContainer在應用程序的容器中運行演示文稿。把面板容器運行在您的形式呈現,並嘗試這個程序:
procedure TForm2.Button3Click(Sender: TObject);
const
ppShowTypeSpeaker = 1;
ppShowTypeInWindow = 1000;
SHOW_FILE = 'C:\Users\jcastillo\Documents\test.pps';
var
oPPTApp: OleVariant;
oPPTPres: OleVariant;
screenClasshWnd: HWND;
pWidth, pHeight: Integer;
function PixelsToPoints(Val: Integer; Vert: Boolean): Integer;
begin
if Vert then
Result := Trunc(Val * 0.75)
else
Result := Trunc(Val * 0.75);
end;
begin
oPPTApp := CreateOleObject('PowerPoint.Application');
oPPTPres := oPPTApp.Presentations.Open(SHOW_FILE, True, True, False);
pWidth := PixelsToPoints(Panel1.Width, False);
pHeight := PixelsToPoints(Panel1.Height, True);
oPPTPres.SlideShowSettings.ShowType := ppShowTypeSpeaker;
oPPTPres.SlideShowSettings.Run.Width := pWidth;
oPPTPres.SlideShowSettings.Run.Height := pHeight;
screenClasshWnd := FindWindow('screenClass', nil);
Windows.SetParent(screenClasshWnd, Panel1.Handle);
end;
我沒有手頭有文件,但我的想法是Run.Width和Run.Height必須點提供,不以像素爲單位。我的窮人解決方案將像素轉換爲點在這裏,它在我的測試中適用於我......在您的環境中找到正確的轉換方式取決於您。
假設您可以從oPPTPres.SlideShowSettings.Run.HWND
屬性獲取演示文稿窗口的句柄,但這對我來說不起作用,因此也是FindWindow調用。
感謝您的解答:-)。爲什麼我無法訪問:OleContainer1.OleObject.Application.Presentations.Item(1).Run? – Nanik 2011-04-16 11:49:54
有沒有可能檢查劇本結束? – Nanik 2011-04-16 11:50:41