• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Работа с текстом

Автор koprus77, 23.02.16, 19:41:45

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

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

koprus77

Я пытался изменить высоту у текстового объекта из нескольких строк. Я получаю IText для каждого его ITextLine, я меняю свойство Height  у каждого его ITextItem. Потом обновляю ITextItem. Но высота меняется только у первой строки, а у остальных сбрасывается высота до 5.
Есть какой-либо нормальный метод менять параметры текста?

Уважаемый, код, тут экстрасенсов нет.


Думаю нужно смотреть устройство строк.

koprus77

Что-то не понял, что это за перечисление и как оно поможет изменить, скажем, цвет всего текстового объекта...  :%:

ITextLine.TextItems - обратите внимание и тут, текст очень сложный объект.
Можете почитать тут http://forum.ascon.ru/index.php/topic,24881.msg180076.html#msg180076 , тоже разбор текста.

koprus77

Хорошо, тогда так: получаю массив TextItem-ов, потом проверяю каждый, что это самый обычный текст и если оно так, то меняю цвет. Что-то похожее написано в моем коде (если предположить, что нет дробей и прочих радостей), но он работает очень странно: меняются не все строки (хотя пробегаюсь по всем), при изменении цвета сбрасывается высота, в чем ошибка? Не совсем понятно, когда и от каких объектов вызывать .Update();

Я, Вам мягко намекнул, что строка textObjItem := TextObjLine.TextItem[0]; может быть некорректна, нужно проверить на сложный текст TextObjLine.TextItems.

koprus77

for j := 0 to (TextObjLine.Count - 1) do begin
textObjItem := TextObjLine.TextItem[j];
// проверка на обычный текст (код 0x0 в enum-е)
if textObjItem.ItemType <> 0 then continue; // не хотим иметь с такими дело
...

Наблюдаются адские артефакты - появляется курсив, цвет не всегда меняется, сбрасывается размеры и т.п.
Что делать?

Массив получите  ITextLine.TextItems, а затем разгребайте.
PS. А дело придётся иметь со всеми возможными вариантами.

koprus77

Хорошо, как Вам такая проблема. Меняю у Item-а размер и сбрасывается цвет, меняю цвет - теряю размер. Почему такое происходит?

Я этого не вижу.
Выравнивание кода должно быть до четырёх байт.
PS. Экстрасенсов тут нет, а у Вас есть отладчик, в нём всё видно.

koprus77

Не понял про выравнивание, можно подробнее?

23.02.16, 22:24:35 #13 Последнее редактирование: 23.02.16, 23:47:49 от Sabahs
{$ALIGN 4}

Забыл сказать, в ссылках есть, но нужно проверять и ITextLine.TextLineData - интерфейс дополнительных данных строки, он тоже на форматирование влияет.

koprus77

В справке нет ничего про TextLineData. Где про это почитать?
UPD: извините, нашёл

Дмитрий22

Добрый!
Возникла необходимость клонировать объект класса IText
Судя по справке имеется метод

HRESUL  Assign( IText * Other, BOOL * Result );
Входные параметры:
Other - копируемый текст - указатель на интерфейс IText
Возвращаемое значение:
TRUE - в случае удачного завершения
Пытаюсь скопировать
IText MyText = null;
bool iftrue = MyText .Assign((Text)ExistText);
Выдает false, кто-нибудь копировал текст IText методом Assign?


ТрындецЪ

Цитата: Дмитрий22 от 06.10.17, 10:11:17
...кто-нибудь копировал текст IText методом Assign?
А куда он должен скопироваться? В буфер обмена? И как его потом вставить в чертёж?

Скопируйте во временную группу.

Дмитрий22

Цитата: ТрындецЪ от 06.10.17, 10:20:13
А куда он должен скопироваться? В буфер обмена? И как его потом вставить в чертёж?
В чертеж не нужно. Один itext копируется в другой.
Цитата: Sabahs от 06.10.17, 10:22:03
Скопируйте во временную группу.
А в спецификации временная группа будет работать?

06.10.17, 10:57:41 #19 Последнее редактирование: 06.10.17, 15:41:24 от Sabahs
Можно попробовать, через API экспортные функции, но нет 100% гарантии, что будет работать.

Сделал функцию для копирования текста, вертикальный текст не делал, там нужно сделать вызов function CloneText.
Помимо вертикального текста, можно доделать: вставку фрагмента, рисунка и таблицы.
+ Благодарностей: 1