Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Импорт любых данных из MS Word в Delphi приложение |
Автор: RedKot 2.3.2007, 17:41 |
Здравствуйте, посетители и создатели сайта! Прочитал много литературы, статей, FAQ, обсуждений на форумах, но так и не нашел необходимой информации. Такая проблема: создается Word документ, в котором пишутся вопросы для тестов (текстовая информация) и к этим вопросам могут соответствовать различные картинки, вставленные в документ из файлов, объекты Visio, Excel, PowerPoint, объекты WordArt, формулы и др. Мне необходимо читать из файлов .doc или .rtf по кускам эти вопросы и картинки или объекты и отображать точно так же это все как в документе в приложении Delphi. В прикрепленном файле Word’a есть пример трех вопросов. Как мне из этого файла прочитать первый вопрос и идущую к нему картинку и отобразить точно так же в приложении Delphi, затем, например, по нажатию кнопки, третий вопрос и идущий к нему объект WordArt, затем второй вопрос и идущий к нему вставленный объект Visio? Надеюсь, я смог изложить свою проблему. Очень прошу помочь. :stena В конце темы я выложил свою работу по этой теме (модуль UmyWApp) |
Автор: Albinos_x 2.3.2007, 19:28 |
OleConteiner RxRichEdit и т.д. и т.п. |
Автор: RedKot 3.3.2007, 07:28 | ||
Не стесняюсь спросить, потому что все мы когда то учились, а кто то только начинает… Я не разу не работал с OleContainer… И где взять этот RxRichEdit, что такое RichEdit я знаю, а вот это к сожалению… Albinos_x, можно пример по моей проблеме, очень прошу. Кстати, тема « WordApplication, ExcelApplication, Работа с Word и Excel» мне помогла с работой Word-Delphi, респект. Ну только начинаю я учиться работать со связкой Word и Delphi, помогите! |
Автор: Albinos_x 3.3.2007, 16:33 | ||||||
http://www.pssoft.ru/click/index.php?jump=65 http://www.pssoft.ru/click/index.php?jump=32 я тоже ![]() вот простейший пример:
если сможешь найти способ загрузить содержимое документа в поток то :
|
Автор: RedKot 3.3.2007, 18:17 |
Albinos_x, я вот подумал, если каждый тестовый вопрос со вставленными объектами заключать в какой-нибудь заранее определенный тег, ну например {….} или >>…<<, то можно же искать программно эти теги и читать всю информацию между ними, включая вставленные объекты, и отображать таким же образом как ты описал в OleContainer… Я где-то вроде читал, но не подскажешь, как найти эти теги (начальный и конечный) и скопировать все что между ними в OleContainer? И как сделать чтобы в программе никто не мог редактировать документ из OleContainer, а то по двойному щелчку или по правому щелчку мыши по нему загружается Word для изменения документа? Кстати, точно простой пример ![]() |
Автор: Albinos_x 3.3.2007, 21:16 | ||||||
как найти есть в моей статье... вот пример как найти теги и выделить текст между ними (тегами):
далее смотри код выше... после копирования не забывай снимать выделение
|
Автор: RedKot 4.3.2007, 10:15 |
Albinos_x, огромное спасибо за примеры, все работает (вроде как ![]() Я вот нашел такое: WordApplication1.Selection.CopyAsPicture; Это значит что все выделенное можно копировать как изображение? Как с этим работать? Например, я могу это - WordApplication1.Selection.CopyAsPicture вставить в Image1:TImage? |
Автор: Albinos_x 4.3.2007, 11:14 | ||
на тексте я это не испытывал, испытывал только для получения картинок из текста....:
|
Автор: RedKot 4.3.2007, 16:16 |
Albinos_x, подскажи пожалуйста, как правильно найти и подсчитать все буквы А, или, например, тот же <teg> (описанный выше) по всему документу от начала до конца. Пробовал подсчитать количество тегов <teg> циклами repeat и while с помощью WordApplication1.Selection.Find.Execute(...) (FindText:=Templ,Wrap:=wdFindContinue) и с помощью WordApplication1.Selection.Find.Text:='<teg>' тоже пробовал, но ничего не вышло, точнее выходит, что у меня либо один раз находит либо бесконечно ищет по всему документу слово '<teg>'. Или хотя бы как определить что документ закончился, и надо прекратить поиск? И где можно взять русское описание всех 15 параметров .Execute(…..)? заранее спасибо. |
Автор: Albinos_x 4.3.2007, 17:28 | ||
использовать для подсчёта способов можно множество... начиная от того, что грузить весь текст в переменную и анализировать её... эта функция возвращает True если нашла и False если не нашла... ищет от текущего места, так что после каждого нахождения необходимо снимать выделение с перемещением курсора в конец...
нигде не видел... переводи справку по VB... |
Автор: RedKot 4.3.2007, 17:55 |
Поделитесь опытом создания ScrollBar’ов для OleContainer. Он показывает информацию в поле его видимости, а то что ниже невозможно просмотреть, так как нет ScrollBar у самого OleContainer’а. |
Автор: Albinos_x 4.3.2007, 19:26 |
кидай на форму ScrollBox1: TScrollBox в него помещай OleContainer1: TOleContainer свойство OleContainer1.SizeMode:=AutoSize - выставь в инспекторе объектов, для того, чтоб OleContainer занимал всё видимое пространство ScrollBox, выставь сначала у OleContainer свойство Align в alClient, после верни в alNone.... всё запускай и наслаждайся ![]() |
Автор: RedKot 5.3.2007, 17:33 | ||
что то у меня не получается. пробовал и в инспекторе объектов менять как описано: выставь сначала у OleContainer свойство Align в alClient, после верни в alNone и програмно пробовал: form1.olecontainer1.align:=alClient; form1.olecontainer1.align:=alNone; где только в программе не ставил эти строчки... все равно OleContainer не занимает все видимое пространство ScrolBox |
Автор: Albinos_x 5.3.2007, 19:45 |
программно не поможет... делай в инспекторе объектов... при установки Align в alClient, он сразу должен растянуться по всей видимой части ScrolBox, при установке обратно в alNone, уйдёшь от масштабирования в OleContainer... |
Автор: RedKot 26.3.2007, 17:20 |
делаю поиск тегов <teg> и <\teg> с помощью .Execute(...) (как было описано выше в примерах от Albinos_x (за что ему спасибо ![]() try ... DD:=wdCollapseEnd; ... except WordApplication1.ActiveDocument.Content.Copy; WordApplication1.Selection.Collapse(DD); OleContainer1.Paste; end; ... то есть, если нет тегов, то я хочу скопировать весь документ и вставить его в OleContainer. Но он копирует только одну страницу (первую) в документе, а остальные нет. Как с этим бороться? И вот еще: программа находит начальный тег <teg> и конечный <\teg>, веделяет все содержимое между ними, копирует и вставляет в OleContainer, но если начальный тег находится на одной странице, а конечный на другой, то в OleContainer вставляется только та информация, которая находится на первой (начальной) странице, а продолжение информации на другой странице вставлять в OleContainer (или копировть, или выделять из Word документа) не хочет. |
Автор: Albinos_x 28.3.2007, 23:21 |
попробуй сначала снять выделение а потом использовать content , а вообще это скорее всего проблема заключена в OleContainer... |
Автор: RedKot 15.4.2007, 08:51 | ||
выкладываю результаты моей работы по этой теме:
|
Автор: mutabor1 10.8.2010, 05:39 | ||||
по поводу этого http://forum.vingrad.ru/index.php?showtopic=139439&view=findpost&p=1053931 задача - сохранить изображения из документа на диске у меня конструкция
работает так
как в этом случае быть? нигде не могу найти нормального хелпа |
Автор: Albinos_x 26.8.2010, 21:02 |
1. 1 топик, 1 вопрос mutabor1, создай для этого отдельную тему 2. если работает - хорошо, в чем суть вопроса? 3. хелпа, как такового нет... только если пробовать лезть в хелп по VB, но код последнего может существенно отличаться от Dephi. 4. возвращаемый вариант тоже может отличаться от действительности, если ты обратил внимание на мои комментарии, то там написано что этот код у меня работал только на картинках, которые размещены "в тексте". "За текстом" и "перед текстом" этот вариант может не прокатить, тогда возможно работает твой вариант... в общем нужно проверять... |
Автор: SlavutichRed 14.1.2016, 13:10 | ||||
подскажите - на строке DD:=wdCollapseEnd компилятор выдает ошибку undeclared identifier: 'wdCollapseEnd' и дальше не компилирует. Подскажить что где прописать что б начал понимать этот параметр? |
Автор: Albinos_x 11.3.2017, 14:08 |
SlavutichRed, подключите модуль WordXP или Word2000 |