[CDR X5-X8] Быстрый перебор букв в тексте

  • Автор темы Автор темы SSInf
  • Дата начала Дата начала

SSInf

Участник
Топикстартер
Сообщения
40
Реакции
11
Допустим надо каждую букву закрасить рандомным цветом.
C#
Код:
private void TextRndColor(corel.Shape s)
{
     Random rnd = new Random();
     foreach (corel.TextRange tr in s.Text.Story.Characters)
     {
          tr.Fill.UniformColor.CMYKAssign(rnd.Next(100), rnd.Next(100), rnd.Next(100), rnd.Next(100));
     }
}
Вот так работает ну очень медленно. Может кто-то знает как лучше получить символ и изменить его свойство.
 
Генерировать "на лету" rtf и импортировать его. Кореловская автоматизация весьма нетороплива.
 
В кореле буква может иметь заливку (даже градиентную), обводку и фиг знает что еще. Как это в rtf перетащить? Мне надо изменить значения свойства символа, на основании его текущих значений.
Рандом это для примера.
 
Это вы сильно странного хотите. Но лично я бы сделал (делал уже) примерно так - брал простенький распакованный CDR(CMX) и парсил на лету, затем импортировал
 
Да вроде не странного.
Есть открытый файл.
Находим в нем текстовые шейпы.
Берем значение свойства у буквы (к примеру заливка), меняем значения свойства.
 
Находим в нем текстовые шейпы.
Берем значение свойства у буквы (к примеру заливка), меняем значения свойства.
Ну ведь вы так и делаете
Вам же хочется оптимизации по скорости?
К слову сказать, и дотнет и VBA - антонимы к слову "быстро"
 
Отключение прорисовки на время работы делается.
А экспорт, импорт как то не совсем правильно мне кажется. Или я не понял сути.
TextRange как я понимаю это тот-же ShapeRange, по сути просто коллекция. Зафига они сделали, что коллекция TextRange содержит тип коллекции (а не просто тип char какой ни будь) мне не совсем понятно.
Но ShapeRange перебирается быстро, а вот TextRange долго. Может какие-то методы у TextRange есть которые быстрее работают чем доступ к свойству Characters ?
Я пробовал через TextRange.Range символ выцеплять в цикле, тоже долго.
 
Но ShapeRange перебирается быстро, а вот TextRange долго. Может какие-то методы у TextRange есть которые быстрее работают чем доступ к свойству Characters ?
Ну понятное дело, изменение элемента ShapeRange при отключенной прорисовке особо никаких изменений не порождает, изменение же одного символа порождает лавинообразную перестройку всего текстового фрейма и всех фреймов, связанных с ним, если они имеются. Это же черный ящик, повлиять на скорость работы внутри него вы при всем желании не сможете через предоставляемые вам бутылочные горлышки. Поэтому для радикального ускорения работы надо применять какие то хакерские решения иначе никак.
 
изменение же одного символа порождает лавинообразную перестройку всего текстового фрейма и всех фреймов, связанных с ним, если они имеются.
Вот про это не подумал.
А может отключить как то перестройку TextRange, до внесения всех изменений. По примеру с отключением прорисовки. '))'
 
А может отключить как то перестройку TextRange, до внесения всех изменений.
Ну если залезть в нативный код реализации класса TextRange и подправить там в консерватории, то, наверное, можно.
Но, IMHO, проще и быстрее, таки файл править и импортировать '))'
 
Нда ). Ладно буду в сторону парсинга копать.