Автор | Сообщение |
|
| |
Пост N: 42
Зарегистрирован: 31.03.07
|
|
Отправлено: 03.08.07 11:44. Заголовок: Работа с RTF файлами
Подскажите, как прочитать кусок информации из RTF файла и вывести его в окне ? Смотрел пример с RichEdit - он вроде читает файлы RTF, но только текст без графики. Я хотел разработать новую версию своего старого экзаменатора т.к. ни один из существующих не подходит(заморочки с протоколами). Т.е. читаю вопрос из файла, вывожу его в окне и прошу ответить на него. Но если раньше это был просто текст, то теперь хочу текст красивый с картинками и схемами. Идея простенькая, и не хотелось бы ради этого изучать формат RTF.
|
|
|
Новых ответов нет
, стр:
1
2
All
[см. все]
|
|
|
| Администратор
|
Пост N: 569
Зарегистрирован: 23.05.05
|
|
Отправлено: 03.08.07 12:10. Заголовок: Re:
С rtf можно работать через ole word точно так же, как и с doc Этот способ конечно немного более медленный, чем через richedit Для ответа можно предусмотреть в документе некоторую область, и затем так же через ole читать текст в этой области
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 03.08.07 14:56. Заголовок: Re:
Uncle_ed пишет: цитата: | Смотрел пример с RichEdit - он вроде читает файлы RTF, но только текст без графики. |
| В FiveWin'е с графикой
|
|
|
|
| |
Пост N: 43
Зарегистрирован: 31.03.07
|
|
Отправлено: 06.08.07 07:35. Заголовок: Re:
Подскажите, где почитать о функциях OLE , не разу им не пользовался. Единственный пример только выводит информацию в Word - где все остальное глянуть ? Как взять страничку из Word и показать ее в окне без вордовских кнопочек ? FiveWin разве не Клипперная библиотека ? Её можно использовать в xHarbour ?
|
|
|
|
| |
Пост N: 784
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.08.07 07:46. Заголовок: Re:
|
|
|
|
| Администратор
|
Пост N: 570
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.08.07 08:58. Заголовок: Re:
Uncle_ed пишет: цитата: | Подскажите, где почитать о функциях OLE , не разу им не пользовался. Единственный пример только выводит информацию в Word - где все остальное глянуть ? |
| Лучше всего посмотреть справку VBA по Word и Excel: VBAWD10.CHM и VBAXL10.CHM цитата: | Как взять страничку из Word и показать ее в окне без вордовских кнопочек ? |
| Вот это не знаю. Я в незапамятные времена в Delphi так делал, а как средствами харбора - это не понадобилось. И не встречал чтобы кто-нибудь так делал. В отдельном окне - пожалуйста цитата: | FiveWin разве не Клипперная библиотека ? Её можно использовать в xHarbour ? |
| fw во-первых существует для разных компиляторов: Clipper, [x]Harbour, Alaska xBase, C3, и во-вторых - для разных платформ: Windows, Unix. Был даже FiveDos ! Ну а класс для fw (RichText к примеру) в принципе можно адаптировать скажем к minigui, сырцы ведь есть. Адаптировали же TSBrowse, что намного сложнее
|
|
|
|
| |
Пост N: 44
Зарегистрирован: 31.03.07
|
|
Отправлено: 06.08.07 09:53. Заголовок: Re:
Спасибо, будем читать и пробовать.
|
|
|
|
| |
Пост N: 45
Зарегистрирован: 31.03.07
|
|
Отправлено: 06.08.07 10:34. Заголовок: Re:
Не смог найти fw для xHarbour. B вообще все ссылки на него пустые. Где хотябы взять сырцы RichText ? Ole меня не впечатлил. А может я вообще зря стараюсь ? Может все-таки планируется доработать RichEdit до полноценного состояния ?
|
|
|
|
| Администратор
|
Пост N: 574
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.08.07 12:59. Заголовок: Re:
Uncle_ed пишет: цитата: | Не смог найти fw для xHarbour. B вообще все ссылки на него пустые. Где хотябы взять сырцы RichText ? |
| fw во всех вариантах платный, поэтому в свободном доступе его нет Что касается richtext, то у меня есть версия 0.90 за 2000-й год Могу выслать Хотя конечно у Михаила наверняка есть посвежее цитата: | А может я вообще зря стараюсь ? Может все-таки планируется доработать RichEdit до полноценного состояния ? |
| Кто знает, какие планы у автора: Tom Marchione, и занимается ли он сейчас этим классом
|
|
|
|
| постоянный участник
|
Пост N: 196
Зарегистрирован: 09.10.06
|
|
Отправлено: 06.08.07 14:00. Заголовок: Re:
Uncle_ed цитата: | Но если раньше это был просто текст, то теперь хочу текст красивый с картинками и схемами. Идея простенькая, и не хотелось бы ради этого изучать формат RTF. |
| А почему ты решил, что RTF - единственный путь организовать "красоту"? Не поддерживает - ну и пускай. HTM страницы тоже довольно красивые можно сверстать и рассматривать с помощью qhtm.dll. Пример в Samples\Advanced\Qhtm. Страницы можно генерировать и динамически, говорят Да и другие решения возможны.
|
|
|
|
| Администратор
|
Пост N: 575
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.08.07 15:04. Заголовок: Re:
Проще всего сделать красивую форму средствами самого минигуи Шрифт, размер, цвет, фон, рисование рамок - все это делается несложно Главное - фантазия Набросать в качестве образца красивую форму в ворд, а затем нарисовать такую же средствами минигуи обычными командами Window, Frame, Labe, TextBox и т.д
|
|
|
|
| |
Пост N: 48
Зарегистрирован: 31.03.07
|
|
Отправлено: 07.08.07 03:23. Заголовок: Re:
Я знаю что есть и другие варианты, но у мня специфика. Я работаю в учебном центре крупного промышленного предприятия. Мы обучаем и аттестуем десятки тысяч человек ежегодно по более чем 100 различным направлениям. Сдача экзаменов и различных правил у нас поставлена на поток. За долгие годы работы я испытал целую кучу экзаменаторов ,но самый лучший пришлось создавать самому. Он работает с 1993 года верой и правдой, но настало время создать новый. Экзаменационные вопросы создают самые разные специалисты, а любимый их редактор Word. Ему мы научили всех. Штатных программистов у нас после перестройки не стало, да и вообще людей не хватает. Поэтому хотелось бы без дополнительных заморочек вопросы сразу после утверждения засовывать в экзаменатор и вперед. HTML ни кто кроме меня не знает, формат DOC от версии к версии все время меняется, а вот RTF остается стабильным. Вот выбор на него и упал. Вставлять закладки в документ тоже ни кто не будет - значит остается оперировать страницами или ориентироваться по спец.меткам в тексте, которые можно расставить по тексту быстро. Работа с распространнеными документами была-бы очень полезной для популяризации xHarbour. Есть же у нас библиотеки, которые поддерживают все известные виды баз данных. Когда-то это стало одной из причин популярности Clipper. Сейчас времена изменились и данные лежат не только в базах данных, но и в огромных архивах с документами DOC, XLS, RTF ...... Может моя идея кому-нибудь понравится и xHarbour перестанет быть просто повторением Clippera. Нужна библиотека, которая одинаково просто работает с разными видами документов. Работа с ними должна на мой взгляд быть похожа на работу с базами данных. Вставить страничку (строчку) , считать страницу (строчку), перейти на страницу с номером N (строчку),вывести на экран отформатированную страничку...... Жаль времени нет и в программировании я поотстал изрядно, а то бы сам взялся !
|
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 07.08.07 08:55. Заголовок: Re:
Pasha пишет: цитата: | Хотя конечно у Михаила наверняка есть посвежее |
| Да, конечно, если надо могу выложить richtext
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 07.08.07 08:57. Заголовок: Re:
Uncle_ed пишет: цитата: | по спец.меткам в тексте, которые можно расставить по тексту быстро. |
| А как выглядят эти спецметки?
|
|
|
|
| Администратор
|
Пост N: 578
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.08.07 11:44. Заголовок: Re:
Uncle_ed пишет: цитата: | формат DOC от версии к версии все время меняется, а вот RTF остается стабильным |
| Неверное утверждение. Никому ведь не приходит в голову читать *.doc побайтно А используя средства ole, я одинаковыми командами работаю и с Word 97, и с Word 2003. Доступ через ole инвариантен к версии Office Uncle_ed пишет: цитата: | Работа с распространнеными документами была-бы очень полезной для популяризации xHarbour. Есть же у нас библиотеки, которые поддерживают все известные виды баз данных. Когда-то это стало одной из причин популярности Clipper. Сейчас времена изменились и данные лежат не только в базах данных, но и в огромных архивах с документами DOC, XLS, RTF ...... Может моя идея кому-нибудь понравится и xHarbour перестанет быть просто повторением Clippera. Нужна библиотека, которая одинаково просто работает с разными видами документов. Работа с ними должна на мой взгляд быть похожа на работу с базами данных. Вставить страничку (строчку) , считать страницу (строчку), перейти на страницу с номером N (строчку),вывести на экран отформатированную страничку...... |
| Можно конечно даже сделать подобный rdd, только смысла в этом никакого, в унификации доступа к документам самого разного типа Сводить работу даже с doc выборкой по номеру строки - это уж очень сильно ограничивать себя А для того чтобы использовать документы полноценно и существуют команды ole, которые разные для разных типов документов, но дают доступ ко всем возможностям Uncle_ed пишет: цитата: | Вставлять закладки в документ тоже ни кто не будет - значит остается оперировать страницами или ориентироваться по спец.меткам в тексте, которые можно расставить по тексту быстро. |
| Метки как я понимаю это те же закладки для неискушенного юзера, которые визуально видимы. И с такими метками можно работать, пользуясь простыми командами поиска
|
|
|
|
| |
Пост N: 50
Зарегистрирован: 31.03.07
|
|
Отправлено: 07.08.07 13:10. Заголовок: Re:
ММК пишет: цитата: | Да, конечно, если надо могу выложить richtext |
| Да, очень нужно. ММК пишет: цитата: | А как выглядят эти спецметки? |
| например так: ? 5,2 вопрос 1
|
|
|
|
| |
Пост N: 51
Зарегистрирован: 31.03.07
|
|
Отправлено: 07.08.07 13:20. Заголовок: Re:
Pasha пишет: цитата: | А для того чтобы использовать документы полноценно и существуют команды ole, которые разные для разных типов документов, но дают доступ ко всем возможностям |
| Ole - это что-то типа встроеного языка у WORD или EXEL. При этом наличие данных программ обязательно. К тому же подгружаются их ресурсы. Работая напрямую из своей программы я не буду зависить от Word и загружать зря ресурсы компьютера. Кроме того, OLE черезчур навороченное и больше предназначено для автоматизации документа. В жизни же часто бывает что нужно лишь автоматически вытащить из документа кусок информации. Например организовать из своей программы поиск нужного текста. Можно даже не заморачиваться функциями записи пока - может они ни кому и не понадобятся. Pasha пишет: цитата: | Метки как я понимаю это те же закладки для неискушенного юзера, которые визуально видимы. И с такими метками можно работать, пользуясь простыми командами поиска |
| Так-то оно так , но расставлять закладки в большом количестве слишком муторно, да и не все пользователи умеют. Кроме того они все разные получаются. Мои метки растаскиваются пользователем обычным копированием без привлечения большого интелекта. При этом гораздо легче обрабатываются программно.
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 07.08.07 15:18. Заголовок: Re:
Pasha пишет: цитата: | А для того чтобы использовать документы полноценно и существуют команды ole |
| Паша , а можешь ты сделать такую штуку : Вордовский документ и в нем та-та-та... плюс табличка. К примеру - [tabnom] [fio] [oklad] [address] Здесь нарисовать у меня не получилось :)) Ну это табличка из четырех( не суть важно) колонок. В каждой вот по такой метке ( см.выше) . Т.е. четыре колонки, четыре метки, одна строка. Ну , а дальше берем файлик с данными и в зависимости от числа записей подставляем значения одноименных полей. На выходе должен получится вордовский документ с таблицей содержащей число строк ... ну это уже неважно :) Важно , чтоб таблица растянулось под нас:)))
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 07.08.07 15:20. Заголовок: Re:
Uncle_ed пишет: цитата: | Да, очень нужно. Куда? ММК пишет: цитата: А как выглядят эти спецметки? например так: ? 5,2 вопрос 1 |
| Ну и чтоб мне стало яснее - как это расшифровать? :))
|
|
|
|
| Администратор
|
Пост N: 579
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.08.07 15:23. Заголовок: Re:
дык давай свой адрес - получишь класс RichText
|
|
|
|
| Администратор
|
Пост N: 580
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.08.07 15:30. Заголовок: Re:
ММК пишет: цитата: | Паша , а можешь ты сделать такую штуку : Вордовский документ и в нем та-та-та... плюс табличка. К примеру - [tabnom] [fio] [oklad] [address] Здесь нарисовать у меня не получилось :)) Ну это табличка из четырех( не суть важно) колонок. В каждой вот по такой метке ( см.выше) . Т.е. четыре колонки, четыре метки, одна строка. Ну , а дальше берем файлик с данными и в зависимости от числа записей подставляем значения одноименных полей. На выходе должен получится вордовский документ с таблицей содержащей число строк ... ну это уже неважно :) Важно , чтоб таблица растянулось под нас:))) |
| Дык есть примерно такая функция - экспорт обьекта Browse в таблицу Word Даю как есть Function BrwToTab(oB, aH, aF) // ------------------------------------------------------------- // Экспорт обьекта или строки в таблицу Word // ------------------------------------------------------------- Local oWord, oDoc, oSel, x, oTable, oRow, ser Local nRow, oCol, oCell, cGrid WaitPush() oWord := NewOle( "Word.Application" ) if oWord # nil Begin sequence oWord:Documents:Add() oDoc := oWord:Get('ActiveDocument') oSel := oWord:Get('Selection') oSel:Font:Name := 'Arial' oSel:Font:Size := 12 if aH # nil oSel:Get('ParagraphFormat'):Alignment := 1 // wdAlignParagraphCenter for ser := 1 to len(aH) if aH[ser] # nil oSel:Invoke('InsertAfter', OEMToAnsi(aH[ser])+Chr(13)+Chr(10)) endif next oSel:Invoke('EndKey', 6) endif oDoc:Tables:Invoke('Add', oSel:Range, 1, oB:ColCount) #ifndef __HARBOUR__ oTable := oDoc:Tables:Invoke('Item', 1) #else oTable := oDoc:Tables[1] #endif for nRow := 1 TO oB:nLinesHdr oRow := oTable:Rows:Last for ser := 1 TO oB:ColCount oCol := oB:GetColumn(ser) #ifndef __HARBOUR__ oCell := oRow:Cells:Invoke('Item', ser) #else oCell := oRow:Cells[ser] #endif if ! Empty(oCol:oHeader:aTitles[nRow]) oCell:Select() oSel:Invoke('InsertAfter', oCol:oHeader:aTitles[nRow]) endif if oCol:oHeader:aGrids # nil cGrid := oCol:oHeader:aGrids[nRow] // if At('N', cGrid) = 0 // wdCellBorder(oCell, -1) // endif if At('S', cGrid) = 0 .and. nRow # oB:nLinesHdr wdCellBorder(oCell, -3) endif // if At('E', cGrid) = 0 // wdCellBorder(oCell, -2) // endif if At('W', cGrid) = 0 .and. ser # oB:ColCount wdCellBorder(oCell, -4) endif endif next oTable:Rows:Add() next for ser := 1 to oB:ColCount x := Eval(oB:GetColumn(ser):Block) if ValType(x) == 'N' .or. oB:GetColumn(ser):nAjuste = 38 #ifndef __HARBOUR__ oTable:Columns:Invoke('Item', ser):Select() #else oTable:Columns[ser]:Select() #endif oSel:Get('ParagraphFormat'):Alignment := 2 // wdAlignParagraphRight endif next oB:GoTop() while ! oB:HitBottom oRow := oTable:Rows:Last for ser := 1 to oB:ColCount x := Eval(oB:GetColumn(ser):Block) #ifndef __HARBOUR__ oRow:Cells:Invoke('Item', ser):Select() oSel:Invoke('InsertAfter', xToSt(x)) #else oRow:Cells[ser]:Select() oSel:InsertAfter(xToSt(x)) #endif next oB:Down() if ! oB:HitBottom oTable:Rows:Add() endif SysRefresh() enddo #ifndef _tsbrw if oB:lFoots #else if oB:lFooting #endif oTable:Rows:Add() oRow := oTable:Rows:Last for ser := 1 to oB:ColCount #ifndef _tsbrw x := oB:GetColumn(ser):footing #else x := oB:aColumns[ser]:cFooting #endif if ! Empty(x) #ifndef __HARBOUR__ oRow:Cells:Invoke('Item', ser):Select() oSel:Invoke('InsertAfter', xToSt(x)) #else oRow:Cells[ser]:Select() oSel:InsertAfter(xToSt(x)) #endif endif next endif oTable:Columns:Invoke('AutoFit') if aF # nil oSel:Invoke('EndKey', 6) // Unit:=wdStory for ser := 1 to len(aF) if aF[ser] # nil oSel:Invoke('InsertAfter', OEMToAnsi(aF[ser])+Chr(13)+Chr(10)) endif next endif oSel:Invoke('HomeKey', 6) oWord:Visible := .T. #ifndef __HARBOUR__ oSel:End() oDoc:End() oWord:End() #endif end endif WaitPop() Return nil
|
|
|
Новых ответов нет
, стр:
1
2
All
[см. все]
|
|