AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.07.2010, 18:42   #1  
JustNick is offline
JustNick
Участник
 
8 / 10 (1) +
Регистрация: 14.07.2010
Адрес: Москва
Word, AddOLEObject
Доброго времени суток.
Открываю шаблон Word-а 2003 и пытаюсь заполнить ячейку таблицы объектом, связанным с картинкой.
Если делать средствами Word-а, то это здесь: Вставка/Объект/Создание из файла...
Здесь выбираю картинку и ставлю галку "В виде значка".

Внимание, вопрос :
Если записывать макрос и запускать, то все красиво. Если тот же код макроса написать в Axaptа, то добавляет объект, но без иконки. И еще одна разница в поведении - из макроса я могу кликнуть 2 раза по объекту и он открывается, а из кода Аксапты - нет. Что я делаю неправильно, подскажите плз

Код:
public void InsertOLEObject(BookMark bookMark, str FileName, boolean LinkToFile = true, boolean DisplayAsIcon = true)
{
    COM ComRange;
    COM InShape;
    COM PictRes;
    RT_Resources2 rtR2;
    str IconFileName;
    ;

    if (!m_comDocument)
        throw error(StrFmt("@DIS6401", this.getApplicationName()));
    ComRange = this.findRange(bookMark);
    InShape = ComRange.InlineShapes();
    rtR2 = RT_RefToResources2::findInnerRes('PictIcon');
    IconFileName = WinApi::getTempPath() + rtR2.FileName;
    rtR2.open();
    PictRes = InShape.AddOLEObject("htmlfile", FileName, LinkToFile, DisplayAsIcon, IconFileName, 0, "Pict");
    InShape.finalize();
}
Старый 28.07.2010, 19:45   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,656 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Для данного случая не проверял, но как правило ВСЕ переменные (за некоторым исключением) в COM-интерфейс надо передавать "обернутыми" в ComVariant. Иначе последствия трудно предсказуемые

X++:
PictRes = InShape.AddOLEObject(COMVariant::createFromStr("htmlfile"), 
                                                           COMVariant::createFromStr(FileName), 
                                                           COMVariant::createFromBoolean(LinkToFile), 
                                                           COMVariant::createFromBoolean(DisplayAsIcon), 
                                                           COMVariant::createFromStr(IconFileName), 
                                                           0,                  // Не уверен, что здесь нужно число, а не COMArgument::NoValue
                                                           COMVariant::createFromStr("Pict")
                                                           );
Старый 29.07.2010, 10:15   #3  
JustNick is offline
JustNick
Участник
 
8 / 10 (1) +
Регистрация: 14.07.2010
Адрес: Москва
Не помогло к сожалению... По-прежнему нет никаких признаков того, что объект добавлен в ячейку, пока не наткнешься на него случайно курсором. и активируется он не двойным кликом
Старый 30.07.2010, 11:01   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
А запустите у себя следующий джоб, предварительно поместив в корень диска C (или в иную папку, подправив пути в коде) прилагаемые файлы:
X++:
static void Job328(Args _args)
{
    ComWordDocument_RU doc = new ComWordDocument_RU();
    COM comTemp;
    ;

    doc.open(@'C:\TestDoc1.doc', true); //  - файл примера прилагается к сообщению

    comTemp = doc.getComDocument();
    comTemp = comTemp.Bookmarks();
    comTemp = comTemp.Item('ZZZ');  // закладка ZZZ - первая ячейка второй строки таблицы
    comTemp = comTemp.Range();
    comTemp = comTemp.InlineShapes();

    comTemp = comTemp.AddOLEObject(
        'htmlfile',                 // ClassType
        @'C:\PageSetup3.JPG ',      // FileName - файл примера прилагается к сообщению
        False,                      // LinkToFile
        True,                       // DisplayAsIcon
        @'C:\AxAppl.ico',           // IconFileName - файл примера прилагается к сообщению
        0,                          // IconIndex
        'Page Setup');              // IconLabel

    comTemp.Select();
}
То, что получится в результате работы этого джоба - это оно? То, что вам надо?
Вложения
Тип файла: zip TestDoc1.zip (12.7 Кб, 73 просмотров)
За это сообщение автора поблагодарили: JustNick (1).
Старый 02.08.2010, 10:59   #5  
JustNick is offline
JustNick
Участник
 
8 / 10 (1) +
Регистрация: 14.07.2010
Адрес: Москва
Да, спасибо большое!
Как выяснилось, была еще одна проблема - какой-то глюк с форматами в вордовском шаблоне. Проблема решилась после очистки форматов в ячейке таблицы
Теги
word

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибки Word 2003 при работе в терминальном режиме Владимир Максимов DAX: Программирование 17 03.07.2017 13:42
Ускорение вывода в Word в терминальном режиме Владимир Максимов DAX: Программирование 14 21.09.2009 16:24
axcoder: WordSL - Microsoft Word as a visual XSLT editor Blog bot DAX Blogs 0 26.01.2007 05:45
Создание нескольких экземпляров Word на основе шаблона axaLearner DAX: Программирование 5 03.01.2005 16:12
Как импортировать из Word chuf DAX: Программирование 4 21.06.2003 15:33

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:36.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.