Помогите добраться до ITextLine

Автор klimvv, 16.05.12, 13:29:33

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

klimvv

Коллеги, подскажите что я делаю неправильно? Необходимо добраться до интерфейса ITextLine, но скртипт заканчивается с сообщением
AttributeError: 'function' object has no attribute 'QueryInterface' на этапе получения iText т.е. похоже проблемы уже с получением IDrawingText

iViewsAndLayersManager = iKompasDocument2D.ViewsAndLayersManager
iViews = iViewsAndLayersManager.Views
iView = iViews.ActiveView

iDrawingContainer = iView._oleobj_.QueryInterface(KAPI7.NamesToIIDMap['IDrawingContainer'], pythoncom.IID_IDispatch)
iDrawingContainer = KAPI7.IDrawingContainer(iDrawingContainer)

iDrawingTexts = iDrawingContainer.DrawingTexts

iDrawingText = iDrawingTexts.Add
iDrawingText = KAPI7.IDrawingText(iDrawingText)

iText = iDrawingText._oleobj_.QueryInterface(KAPI7.NamesToIIDMap['IText'], pythoncom.IID_IDispatch)
iTextLine = iText.Add

#1
Возможно  IDrawingText не создается, пока не будет инициализирован.
Из SDK IDrawingTexts::Add
Примечание:
Метод позволяет добавить текст в коллекцию. После получения нового интерфейса нужно задать параметры текста и вызвать метод IDrawingObject::Update

На Delphi так
DrawingTexts:=DrawingContainer.DrawingTexts;
if DrawingTexts<>nil then
begin
   DrawingText:=DrawingTexts.Add;
   if DrawingText<>nil then
    begin
      DrawingText.X:=0;
      DrawingText.Y:=0;
      DrawingText.Angle:=0;
      Text:=DrawingText as IText;
      if Text<>nil then
       begin
         TextLine:=Text.Add;
         if TextLine<>nil then
          begin
            AddTextItem(TextLine,'1',ksTItString);
            // Добавить числитель дроби
            AddTextItem(TextLine,'2',ksTItNumerator);
            // Добавить знаментатель дроби
            AddTextItem(TextLine,'3',ksTItDenominator);
            // Закончить дробь
            AddTextItem(TextLine,'4',ksTItFractionEnd);
          end;
       end;
      DrawingText.Update;
    end;
end;

klimvv

Нашел в чем у меня был прокол - надо было вызывать

iDrawingText = iDrawingTexts.Add()

со скобками. Теперь скрипт отрабатывается без ошибок, правда в результате ничего не создается  :-)))
ну ничего, спасибо за пример, сейчас внимательно посмотрю, надеюсь откопаю что не так