Определение типа объекта на слайде Powerpoint

Тема в разделе "Delphi - СОМ", создана пользователем Mick Winder, 21 июл 2005.

  1. Mick Winder

    Mick Winder Гость

    Всем привет! Давненько здесь не было! Как здорово всё изменилось!!! Класс!
    итак сам вопрос...
    Как определить к какому типу принадлежит ВЫДЕЛЕННЫЙ объект на слайде, например, к msoPicture, msoTable, msoChart и т.д.?
     
  2. Barmutik

    Barmutik Гость

    Хмм.. а попробовать по Type? или перебрать перебором типов .. что подойдёт того типа и есть ...
     
  3. Mick Winder

    Mick Winder Гость

    Пробовал... Не получается...
     
  4. Barmutik

    Barmutik Гость

    Что конкретно не получается ? Пройтись по списку объектов или QueiryInterface на соответствие типу?
     
  5. Mick Winder

    Mick Winder Гость

    Смотрел уже файл PowerPoint_TLB - пальцем водил последовательность списка нужных мне объектов, попробовал прописать, но... выдается сообщение, что, мол, неверно составлена последовательность объектов...
    Перепробовал все варианты... Тут черт голову сломает!
     
  6. Barmutik

    Barmutik Гость

    Ваш Код в студию пожалуйста... если возможно вместе с презентацией .. что б было на чём посмотреть ...
     
  7. Mick Winder

    Mick Winder Гость

    Код (Text):
    unit Unit1;

    interface

    uses
    ... ActiveX, ComObj, PowerPoint_TLB, Office_TLB;

    type
    TForm1 = class(TForm)
     Button1: TButton;
     Button3: TButton;
     procedure Button1Click(Sender: TObject);
     procedure Button3Click(Sender: TObject);
    private
     { Private declarations }
    public
     { Public declarations }
    end;

    var
    Form1: TForm1;
    PowerPointApp: OLEVariant;
    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    try
    PowerPointApp:= CreateOleObject('PowerPoint.Application');
    except
    ShowMessage('Error Powerpoint...');
    exit;
    end;
    PowerPointApp.Visible:= True;
    PowerPointApp.Presentations.Open('E:\LPT_2\Report_made.ppt', False, False, True);
     end;

    procedure TForm1.Button3Click(Sender: TObject);
    begin
    PowerPointApp.Presentations.Item(1).Slides.Item(4).Select;
    PowerPointApp.Presentations.Item(1).Slides.Item(4).Shapes.Item(3).Select;
    if PowerPointApp.ActiveWindow.Selection.SlideRange.Shapes.Type = msoPicture then
    ShowMessage('Сработало!')
    else
    ShowMessage('Не то!');  
    end;

    end.
     
  8. Barmutik

    Barmutik Гость

    Мне кажется что стоит попробовать так:

    Код (Text):
    if PowerPointApp.ActiveWindow.Selection.ShapeRange.Type_ = msoPicture then
    ShowMessage('Сработало!')
    else
    ShowMessage('Не то!');  
    end;
    Опять же есть оговорки... сначала вообще у селекшина нужно проверять его тип.. только потом если он = ppSelectionShapes то брать ShapeRange... да и в общем случае выделено может быть не одна фигура .. их нужно перебирать и смотреть по типу потом уже.. но для конкретного случая должно сработать...
     
  9. Mick Winder

    Mick Winder Гость

    Я это всё перепробовал... Даже если написать:
    Код (Text):
    PowerPointApp.ActiveWindow.Selection.Type_ = ppSelectionShapes
    То тут выводится ошибка, что "Method 'Type_' not supported by automation object" Вот из-за нее "родимой" и мучаюсь...
     
  10. Barmutik

    Barmutik Гость

    Проблема понятна ;)

    Я прошёл всеь код .. стоит написать вот так:

    .....Type - БЕЗ подчёркивания в конце .. и всё работает...
     
  11. Mick Winder

    Mick Winder Гость

    Спасибо!!!
     
  12. Barmutik

    Barmutik Гость

    Удачи!
     
Загрузка...

Поделиться этой страницей