Страница: 1 | 2 | 3 |
Вопрос: Последовательность чтения TextBox-рамок
Добавлено: 05.10.07 16:24
Автор вопроса: ferico | Web-сайт:
Word-страница оформлена в виде TextBox-рамок с текстом, не связанных между собой.
При импорте в другие программы такая страница читается согласно последовательности нумерации TеxtBox-рамок (как мне кажется), и текст следует в этой же последовательности.
Но до импорта поработать с текстом внутри рамок - поредактировать текст, немного расширить или передвинуть рамку(-ки), то последовательность импорта текстовых рамок меняется, причем как-то произвольно.
Возможно причина в чем-то другом, но
полагаю, что данная последовательность зависит от последовательности установленных якорей Anchor в тексте для каждой рамки.
Но вот не могу придумать как поменять эту последовательность согласно требуемой исходной.
Пож-ста, подскажите!
Ответы
Всего ответов: 39
Номер ответа: 1
Автор ответа:
ferico
Вопросов: 2
Ответов: 31
Web-сайт:
Профиль | | #1
Добавлено: 05.10.07 18:43
Причем якоря Anchors для всех рамок установлены в позиции первого абзаца страницы.
Вопрос - как изменить последовательность якорей, а значит и Текстбоксов?
Номер ответа: 2
Автор ответа:
ferico
Вопросов: 2
Ответов: 31
Web-сайт:
Профиль | | #2
Добавлено: 05.10.07 18:47
Пробовал делать перевод Текстбоксов в рамки, а затем обратно. Не помогает и сбивается общее оформление.
Номер ответа: 3
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #3
Добавлено: 05.10.07 19:44
____ Сомнительно, что это тексбоксы.
____ А как Вы делаете на чистом листе эту рамку-текстбокс с текстом? Может тогда я пойму, о чём идёт разговор.
Номер ответа: 4
Автор ответа:
ferico
Вопросов: 2
Ответов: 31
Web-сайт:
Профиль | | #4
Добавлено: 05.10.07 20:49
Да просто:
открываем Word, в панели Рисование тыкаю иконку Надпись.
P.S. Возможно лучше называть ее именно Надпись, но в макросах это Shape типа msoTextBox. Обращаюсь так
ActiveDocument.Shapes(1) или
ActiveDocument.ShapeRange(1)
И таких несвязанных надписей много на каждой странице. Связывать (линковать) их нельзя - весь текст "поедет".
Предполагаю, что теоретически есть три варианта решения:
1) через перестановку относительных позиций якорей Anchor для Надписей. Но как?
2) м.б. через свойство TabIndex, но такого свойства я не нашел для Shape (msoTextBox). Хотя при нажатии Tab фокус переносится на следующую надпись.
3) через другое лаконичное решение, которое мне пока неизвестно.
Пож., помогите.
Номер ответа: 5
Автор ответа:
ferico
Вопросов: 2
Ответов: 31
Web-сайт:
Профиль | | #5
Добавлено: 05.10.07 21:01
Но на самом деле эти Надписи (текст-боксы) создаю не я, они создаются автоматически. Я беру готовый документ уже с ними.
Еще возможно можно как-то сделать по 4-му способу:
4) Перевести все Надписи (текст-боксы) в рамки (Frames) и там чтото с ними делать, но в этом случае слетает все форматирование документа, а последовательность течения текста по рамкам Frame сохраняется.
Номер ответа: 6
Автор ответа:
ferico
Вопросов: 2
Ответов: 31
Web-сайт:
Профиль | | #6
Добавлено: 05.10.07 21:04
Под якорем Anchor я имею в виду привязку объекта (к строке).
Номер ответа: 7
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #7
Добавлено: 05.10.07 21:24
____ То есть, все рамки идут не в потоке текста. А за текстом, перед текстом и т.п.?
Номер ответа: 8
Автор ответа:
ferico
Вопросов: 2
Ответов: 31
Web-сайт:
Профиль | | #8
Добавлено: 05.10.07 22:04
Да, именно так.
Но когда документ читается другой программой или экспортируется в TXT, то формируемый текстовый поток не соответствует требуемому. Последовательность перемешивается.
Соответственно, у меня задача поставить надписи (или их привязки) так, чтобы они читались в нужном порядке.
Номер ответа: 9
Автор ответа:
ferico
Вопросов: 2
Ответов: 31
Web-сайт:
Профиль | | #9
Добавлено: 05.10.07 22:12
Если привязки, скажем, двух объектов находятся на одной строке (а привязки устанавливаются построчно), то нужно как-то их приоритетность чтения поменять местами.
Есть неудобный метод: врчную копировать один объект, затем удалить второй объект, вставить первый и потом вставить второй объект. Таким образом, возможно изменится их "приоритетность" чтения.
Это даже можно программно сделать, это очень неудобно - для 100 страниц по 15-20 надписей, каждая со своими координатами и т.п. Причем не факт, что это поможет.
Номер ответа: 10
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #10
Добавлено: 05.10.07 22:42
____ А как (чем) производится экспорт в txt. При обычном сохранении из Word рамки не сохраняются.
____ Я вот подумал — может надо кнопочку с макросом сделать Создать txt-файл, "прошерстить" все рамки, отсортировать их по положению и "выкинуть" содержимое в созданный txt ?
____ Я проверил сейчас свойства top и left у этих рамок — всё работает. В каких единицах — не знаю, но это ведь и не важно. Главное — возможность создать массив ссылок на эти Shape'ы и отсортировать его по координате левого верхнего края каждой рамки.
Номер ответа: 11
Автор ответа:
ferico
Вопросов: 2
Ответов: 31
Web-сайт:
Профиль | | #11
Добавлено: 05.10.07 23:06
1) Технически ситуация вкратце вот в чем. Есть два документа - на английском языке и его русский перевод. Так вот после перевода все рамочки остаются внешне на своих местах, если не считать что переводчик их иногда двигал и расширял, чтоб вместить текст.
Теперь, когда есть два "идентичных" текста их импортируем в Трaдoc, чтобы сделать их выравнивание, т.е. создать базу англ=рус предложений.
В нормальных текстах все предложения встают последовательно и в результате совпадают.
А данном случае они не совпадают, т.к. рамочки при импорте считывались не одинаковой последовательности.
А последовательность эта изменилась после перевода.
2) вариант с "прочесыванием" и экспортом в TXT мне понравился. На данный момент, это пока лучший вариант, хотя не совсем удобный на первый взгляд.
3) Судя по всему приоритетность чтения текстовых рамок определяется не координатами, а чем-то еще - привязкой, старшинством создания, скрытым Tab-индексом или чем-то еще.
Номер ответа: 12
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #12
Добавлено: 05.10.07 23:22
____ Я не знаю, что такое Традос и потому интересуюсь, а каков процесс импорта. Это ведь не средствами Word?
Номер ответа: 13
Автор ответа:
ferico
Вопросов: 2
Ответов: 31
Web-сайт:
Профиль | | #13
Добавлено: 05.10.07 23:40
Вообще это программа для создания и накопления базы памяти переведенных фрагментов (предложений).
Там есть возможность автоматического импорта RTF-файлов исходника и его перевода, в результате получается база англ. предложений и им соответствующих русских. Но она также может учитывать форматирование отдельных фрагментов текста.
Сам процесс импорта естественно недоступен для изучения. Но основная загвоздка как раз в том, чтобы импортируемые файлы были идентичны, и тогда они правильно считыватся.
Номер ответа: 14
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #14
Добавлено: 05.10.07 23:52
____ Все рамки находятся в коллекции ActiveDocument.Shapes().
____ Все параграфы находятся в коллекции ActiveDocument.Paragraphs().
____ Все рамки привязанные к конкретному параграфу (абзацу) находятся в ActiveDocument.Paragraphs(номер).Range.ShapeRange().
____ У Вас все рамки привязаны к одному параграфу? Или по несколько к одному?
____ Может быть в процессе чего-то происходит переиндексация рамок в коллекциях ActiveDocument.Paragraphs(номер).Range.ShapeRange().
____ Можно ещё перед переводом создать массив-слепок состояния каждой рамки, то есть: положение якоря и координаты рамок.
____ А может быть достаточно будет создать массив-слепок не рамок, а по каждому параграфу массив-слепок коллекции привязанных к нему рамок.
Номер ответа: 15
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #15
Добавлено: 05.10.07 23:55
____ Я правильно понял, что на момент перевода файл выходит из-под контроля Word'а?