Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Копирование стилей для Figures

 
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков
Предыдущая тема :: Следующая тема  
Автор Сообщение
kliver



Зарегистрирован: 10.07.2014
Сообщения: 12

СообщениеДобавлено: Пн 18 Авг 2014 09:35    Заголовок сообщения: Копирование стилей для Figures Ответить с цитатой

В макете печати есть IInPictureGridFigure. Я хочу программно создать еще один грид с таким же стилем как и уже имеющегося в макете. В идеале конечно бы вообще склонировать уже имеющийся, но пока что не нашел такой возможности. Пока что делаю так:

Код:
             
var newTableFigure =
                                MyLayoutWindow.Figures.Add(TInPictureFigureType.inftMap) as IInPictureGridFigure;
                            newTableFigure .Bottom = existTable.Bottom;
                            newTableFigure .Width = existTable.Bottom;
                            newTableFigure .GridFormat = existTable.GridFormat;
                            newTableFigure .ColFormat = existTable.ColFormat;
                            newTableFigure .RowFormat = existTable.RowFormat;


Но к сожалению RowFormat/ColFormat /GridFormat не устанавливаются таким способом.

Как можно решить проблему?

Попробовал создавать так :

Код:
orgTableFigure.GetFormat(j, -1).Size[TInGridFormatKind.ingfFont] = organizationTable.GetFormat(-1, 0).Size[TInGridFormatKind.ingfColWidth];




Но к сожалению Ингео падает с ошибкой:


Цитата:
Разрушительный собой (Exception from HRESULT: 0x8000FFFF (E_UNEZPECTED))


Вот так вот ошибка не появляется:

Код:
                                mapTitle.GetFormat(j, -1).Size[TInGridFormatKind.ingfColWidth] = 250; //tableMapTitle.GetFormat(j, -1).Size[TInGridFormatKind.ingfColWidth];
                                mapTitle.GetFormat(j, -1).Update();


Но к сожалению размер ширины колонки не устанавливается.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
APopov



Зарегистрирован: 19.06.2006
Сообщения: 347
Откуда: Самара

СообщениеДобавлено: Пн 18 Авг 2014 19:34    Заголовок сообщения: Ответить с цитатой

Я пытался разобраться с этим "чудесным" элементом и его клонированием Smile
До рабочего кода дело не дошло, но вот идеи:
* сначала проверять переопределён ли формат для нужной вам ячейки/столбца/колонки:
Код:
if (srcTableFigure.ContainsFormat(j, -1)) ...

* не получать формат каждый раз динамически (как у вас), а взять формат в отдельную переменную, изменить что нужно, а потом сделать .Update(); //каждый вызов GetFormat делает свой объект-обёртку
* еще лучше написать функцию, которая копирует формат, проверяя задан ли конкретный элемент формата, типа:
Код:

public static void CopyGridFormat(IInGridFormat src, IInGridFormat dest)
{
  if (src.ContainsKinds(TInGridFormatKind.ingfFont))
     CopyFont(src.Font[TInGridFormatKind.ingfFont], dest.Font[TInGridFormatKind.ingfFont]);
  else
    dst.DropKinds(TInGridFormatKind.ingfFont);
//....
  dest.Update();
}


Если такая функция будет написана и если будет не сильно жалко, поделитесь ее кодом в этой ветке )

_________________
ОАО "Самара-Информспутник",
инженер-программист Попов Артем
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kliver



Зарегистрирован: 10.07.2014
Сообщения: 12

СообщениеДобавлено: Вт 19 Авг 2014 10:53    Заголовок сообщения: Ответить с цитатой

Через долгие часы мучений я тоже пришел к выводу, что нужно создавать переменную под GetFormat().

Все было хорошо до тех пор пока я не начал копировать очень много форматов:

Код:
var formatС = newTableFigure .GetFormat(0, -1);
formatC.FontFotmat[TInGridFormatKind.ingfTextFormat] = TInGridTextFormat.intfWordBreak;
formatC.FontFotmat[TInGridFormatKind.ingfTextFormat] = TInGridTextFormat.intfHorAlignCenter;
formatC.Update();

var formatR = newTableFigure .GetFormat(-1, 0);
formatR.FontFormat[TInGridFormatKind.ingfTextFormat] = TInGridTextFormat.intfWordBreak;
formatR.Update()


В таком случае формат текста не отрабатывает. Наверное это связано с тем что не проверяю изменен ли формат перед копированием. Попробую ваше предложение насчет ContainsKinds.
И такой вопрос корректна ли такая запись:

Код:
formatC.FontFotmat[TInGridFormatKind.ingfTextFormat] = TInGridTextFormat.intfWordBreak;
formatC.FontFotmat[TInGridFormatKind.ingfTextFormat] = TInGridTextFormat.intfHorAlignCenter;


Можно ли два раза последовательно переопределить TextFormat? Или раз у констант TInGridTextFormat.intfWordBreak и TInGridTextFormat.intfHorAlignCenter есть числовые значения их можно как-то сложить?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kliver



Зарегистрирован: 10.07.2014
Сообщения: 12

СообщениеДобавлено: Вт 19 Авг 2014 14:29    Заголовок сообщения: Ответить с цитатой

Решил проблему.
Чуть позже, когда причешу решение выложу код.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kliver



Зарегистрирован: 10.07.2014
Сообщения: 12

СообщениеДобавлено: Вс 23 Ноя 2014 23:47    Заголовок сообщения: Ответить с цитатой

Понаписал тут немного, может кому полезно будет:
http://dotrem.blogspot.ru/2014/11/blog-post.html
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB