Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

PowerPoint в OleContainer [D7]


3asys ©   (2011-11-20 01:55:00) 

Добрый день!
Необходимо показать презентацию PowerPoint на форме. Использую для этого OleContainer.
Пробовал:
var
 PowerPoint: OLEVariant;
begin
   PowerPoint := CreateOleObject('PowerPoint.Application');
   PowerPoint.Visible := True;
   if OpenDialog1.Execute then
      PowerPoint.Presentations.Open(OpenDialog1.FileName, False, False, True);
   PowerPoint.ActivePresentation.SlideShowSettings.Run;
   PowerPoint.ActivePresentation.SlideShowWindow.View.Next;
end;

но не смог добиться открытия презентации непосредственно на форме.
Теперь открываю так: if OpenDialog1.Execute then OleContainer1.CreateObjectFromFile(OpenDialog1.FileName,false);
Однако в контенере открывается только первый слайд презентации и не ясно, как (например, по нажатию кнопки) перейти к следующему слайду. Как осуществлять навигацию между слайдами?


sniknik   (2011-11-20 21:22:00) [1]

> Может я что-то не так делаю?
скорее что-то не установлено(/не настроено соответствие, как открывать). у меня прямо в браузере (IE/и, уже проверил, TWebBrowser тоже) открывает, а вот мозила ведет себя как ты описал, предлагает открыть и открывает в PP.


3asys   (2011-11-20 19:13:00) [2]

Кстати, нашел ActiveX : http://www.ocxt.com/
(Edraw Office Viewer Component V7.5.0.356 Released)
он реально открывает PPT, PPTX, PPS, но работает "не очень чисто" (иногда визуализирует запущенный poverpoint, но может это я его неправильно использую) ии стоит он прилично, так что все равно нужно его чем-то заменить.


3asys   (2011-11-20 18:53:00) [3]

> sniknik ©
я так в самом начале пробовал, но у меня при вызове
     WebBrowser1.Navigate('file:///c:/ppt.ppt');
открывается диалог открыть/сохранить и если выбрать открыть, то открывается poverpoint вне моего приложения.
Может я что-то не так делаю?


sniknik   (2011-11-20 18:19:00) [4]

а зачем преобразовывать, в браузере можно как есть показывать, TWebBrowser не проверял, но IE справляется ... вот так, url открываешь, и сразу на 3й слайд...
file:///F:/Video/приколы/Canlsdon.pps#258,3,Слайд 3
значит и навигация возможна.


3asys   (2011-11-20 13:35:00) [5]

а как тогда в веб-архив ppt, pptx преобразовать (хоть в браузере показать)?
и как pps показывать?


sniknik   (2011-11-20 12:30:00) [6]

вот проверка
procedure TForm1.Button1Click(Sender: TObject);
begin
 OleContainer1.CreateObjectFromFile('F:\Video\приколы\Canlsdon.pps', false);
 OleContainer1.Run;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 PowerPointApp: OLEVariant;
begin
 PowerPointApp:= GetActiveOleObject('PowerPoint.Application');
 PowerPointApp.ActivePresentation.SlideShowWindow.View.Next;
end;


без OleContainer1.Run; операция недоступна на GetActiveOleObject, нужно жать кнопку и давить "открыть" в попап меню.
но при открытом (объект есть/картинка показана) дает - "Application.ActivePresentation : Invalid request.  There is no active presentation"


sniknik   (2011-11-20 12:22:00) [7]

попробовал подключится к обьекту PP открытому в контейнере (GetActiveOleObject, он всегда единственный ), и ... - "нет активной презантации", похоже там не только "прослойки" нет, похоже там просто одинокая картинка...

> Может есть у кого решение?
обломайся бабка, мы на корабле. © анекдот.


3asys   (2011-11-20 12:14:00) [8]

> sniknik ©
Мышкой в дизайнере пробовал - получается тоже самое, что и в случае if OpenDialog1.Execute then OleContainer1.CreateObjectFromFile(OpenDialog1.FileName,false);

- загружается только первый слайд, а как перемещаться между слайдами никак не пойму.
Может есть у кого решение?


sniknik   (2011-11-20 12:02:00) [9]

++
кстати, попробовал, что то не то с этим PP, в отличии от ворда, у него все интерфейсы "нот саппортед". чувство такое что прослойки в OleConteiner для него попросту нет...
надо добираться до реального обьекта...  OleContainer1.OleObject не пойдет.


sniknik   (2011-11-20 11:05:00) [10]

> Пробовал:
в дизайнере, мышкой для начала... не получается?  

> Как все-таки открыть презентацию на форме и осуществлять навигацию между слайдами?
в контейнере будет тот же обьект с теми же методами, и работать с ним также как в KilkennyCat ©   (20.11.11 03:00) [1].


3asys   (2011-11-20 10:24:00) [11]

> KilkennyCat ©
Этот способ запускает PowerPoint и открывает в нем файл за пределами моего приложения. Мне же надо, чтобы презентация открывалась на моей форме.
>а где смог?
да собственно так, как Вы предложили и смог - вне моего приложения.

Как все-таки открыть презентацию на форме и осуществлять навигацию между слайдами?


KilkennyCat   (2011-11-20 03:03:00) [12]


> но не смог добиться открытия презентации непосредственно
> на форме.

а где смог?


KilkennyCat   (2011-11-20 03:00:00) [13]

Author: Thomas Stutz

uses
 comobj;
 
procedure TForm1.Button2Click(Sender: TObject);
var
 PowerPointApp: OLEVariant;
begin
 try
   PowerPointApp := CreateOleObject('PowerPoint.Application');
 except
   ShowMessage('Error...');
   Exit;
 end;
 // Make Powerpoint visible
 PowerPointApp.Visible := True;

 // Show powerpoint version
 ShowMessage(Format('Powerpoint version: %s',[PowerPointApp.Version]));

 // Open a presentation
 PowerPointApp.Presentations.Open('c:\MyPresentation.ppt', False, False, True);

 // Show number of slides
 ShowMessage(Format('%s slides.',[PowerPointApp.ActivePresentation.Slides.Count]));

 // Run the presentation
 PowerPointApp.ActivePresentation.SlideShowSettings.Run;

 // Go to next slide
 PowerPointApp.ActivePresentation.SlideShowWindow.View.Next;

 // Go to slide 2
 PowerPointApp.ActivePresentation.SlideShowWindow.View.GoToSlide(2);

 // Go to previous slide
 PowerPointApp.ActivePresentation.SlideShowWindow.View.Previous;

 // Go to last slide
 PowerPointApp.ActivePresentation.SlideShowWindow.View.Last;

 // Show current slide name
 ShowMessage(Format('Current slidename: %s',[PowerPointApp.ActivePresentation.SlideShowWindow.View.Slide.Name]));
 
 // Close Powerpoint
 PowerPointApp.Quit;
 PowerPointApp := UnAssigned;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо