![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;