| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		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    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Я пытался разобраться с этим "чудесным" элементом и его клонированием  
 
До рабочего кода дело не дошло, но вот идеи:
 
* сначала проверять переопределён ли формат для нужной вам ячейки/столбца/колонки: 
 
 	  | Код: | 	 		  | 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
 
  | 
		 | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		 |