Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Использование RICHTEXT.RichtextCtrl для редактирования программно DOC? (число прочтений - 12336 )
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
09. Декабря 2011 :: 12:21
Печать  
Надо из 1С формировать печатную форму Договора. Юристы пишут договора в DOC-формате. Этот файл посредством RICHTEXT.RichtextCtrl  можно открыть на просмотр (сохранив перед этим в формате trf), но как в нем поменять некоторые символы?
Т.е. Например в DOC-файле написано $НомерДоговора$ Его надо заменить на значение НомерДок текущего документа.
Можно напрямую редактировать 16-ричные значения букв, но хотелось бы как то более поизящнее. Может есть у кого наработки в этой области?
  
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
Ответ #1 - 09. Декабря 2011 :: 12:39
Печать  
Если у кого есть наработки - поделитесь пожалуйста примерами (Создать и загрузить файл удалось, а вот как выполнить замену нужного текста?). Спасибо.
  
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
Ответ #2 - 09. Декабря 2011 :: 13:05
Печать  
MSDN не предлагать?  Круглые глаза

Do While RichTextBox1.Find("123") >= 0
    RichTextBox1.SelectedText = "456"
Loop

  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
Ответ #3 - 09. Декабря 2011 :: 13:24
Печать  
Спасибо, MSDN только дал результаты для NET, если у вас есть прамая ссылка на старую версию - дайте плиз. Спасибо.
  
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
Ответ #4 - 09. Декабря 2011 :: 13:28
Печать  
Делаю так:
Код
Выбрать все
АФ = СоздатьОбъект("АктивИкс");
	АФ.УстановитьАтрибут(Форма, "ActX");
	Контрол = АФ.СоздатьЭУ("RICHTEXT.RichtextCtrl");
	Контрол.BorderStyle = 1;
	//Контрол.DisableNoScroll = 10;
	//Контрол.ScrollBars = 3;
	Контрол.AutoVerbMenu = 1;
	Контрол.LoadFile("D:\1Cv77\SQL\doc\dogovor_dil_2011.rtf",0);
	АФ.УстановитьФокус();

	Пока Контрол.Find("$") >= 0 Цикл
		Контрол.SelectedText = "456"
	КонецЦикла;
 


И ничего не меняется. На вызов "Контрол.Refresh();" - пишет ошибку: Поле агрегатного объекта не обнаружено (Refresh)

Или как можно NET-овскую библиотеку использовать как ActiveX?
  
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
Ответ #5 - 09. Декабря 2011 :: 13:55
Печать  
Уже перепробовал все что можно, Контрол.Find("$") всегда возвращает -1.
  
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
Ответ #6 - 09. Декабря 2011 :: 14:03
Печать  
А, ты про этот RichText..

Контрол.SelText = "456"
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
Ответ #7 - 09. Декабря 2011 :: 14:05
Печать  
pvase писал(а) 09. Декабря 2011 :: 13:55:
Уже перепробовал все что можно, Контрол.Find("$") всегда возвращает -1.

А это интереснее. Выложи тестовую обработку.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
Ответ #8 - 09. Декабря 2011 :: 14:16
Печать  
berezdetsky писал(а) 09. Декабря 2011 :: 14:05:
А это интереснее. Выложи тестовую обработку.


Выкладываю, в обработке надо подправить ссылку на открытие файла rtf.
  

RichtextCtrl_001.zip ( 19 KB | Загрузки )
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
Ответ #9 - 09. Декабря 2011 :: 14:23
Печать  
pvase писал(а) 09. Декабря 2011 :: 14:16:
Выкладываю, в обработке надо подправить ссылку на открытие файла rtf.

Ok, на выходных посмотрю.

pvase писал(а) 09. Декабря 2011 :: 13:24:
Спасибо, MSDN только дал результаты для NET, если у вас есть прамая ссылка на старую версию - дайте плиз. Спасибо.

  

rtfbox98.zip ( 75 KB | Загрузки )

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
Ответ #10 - 09. Декабря 2011 :: 21:23
Печать  
Посмотрел. В доработанном мной (на предмет multilevel undo) RichtextCtrl (устанавливается с qryConsole) поиск поломан. В оригинальном (приложен в архиве) поиск работает, но только с нерусскими буквами.  Ужас

Человеческий поиск (EM_FINDTEXT) ищет всё в обоих случаях. Пример поиска на VB:
Код
Выбрать все
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Type CHARRANGE
    cpMin As Long
    cpMax As Long
End Type

Private Type FINDTEXT
    chrg As CHARRANGE
    lpstrText As String
End Type

Const WM_USER = &H400
Const EM_FINDTEXT = WM_USER + 56

Const FR_DOWN = &H1
Const FR_WHOLEWORD = &H2
Const FR_MATCHCASE = &H4

Private Sub Command1_Click()
    Dim cr As CHARRANGE
    cr.cpMin = 0
    cr.cpMax = -1

    Dim ft As FINDTEXT
    ft.chrg = cr
    ft.lpstrText = Text1.Text

    With RichTextBox1
	  .SelStart = SendMessage(.hwnd, EM_FINDTEXT, FR_DOWN, ft)
	  .SelLength = Len(Text1.Text)
	  .SelText = Text2.Text
    End With
End Sub

Private Sub Form_Load()
    RichTextBox1.LoadFile "Z:\pvase\RichtextCtrl_001\test.rtf"
End Sub
 



Для поиска русских букв должна быть включена русская раскладка клавиатуры.
Если чё:
Код
Выбрать все
Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
Private Const kb_lay_ru As Long = 68748313

...

ActivateKeyboardLayout kb_lay_ru, 0
 



В общем, стоит написать обёртку, чтобы всё это спрятать. А если писать обёртку - интереснее использовать дотнетовский контрол.  Круглые глаза Так что, если ты дочитал это до конца - забудь всё, что прочитал и..
  

richtx32.zip ( 93 KB | Загрузки )

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
Ответ #11 - 11. Декабря 2011 :: 13:40
Печать  
Спасибо большое. Но что то не получается. Скачал файл из последнего поста, установил, но ситуация не изменилась, поиск все так же не работает даже при включенной русской раскладке клавиатуры. По поводу net - к сожалению не разбирался как он работает и как из него делать com-объекты.
  
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
Ответ #12 - 11. Декабря 2011 :: 15:05
Печать  
Скачал файл - это хорошо. Неплохо бы ещё текст прочитать..  Подмигивание

Чтобы этот код ободинэсить, нужно контрол завернуть в обёртку и добавить методы поиска/замены. Пример такой обёртки: http://www.1cpp.ru/forum/YaBB.pl?num=1157967835/71#71
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
Ответ #13 - 12. Декабря 2011 :: 06:56
Печать  
berezdetsky писал(а) 11. Декабря 2011 :: 15:05:
Скачал файл - это хорошо. Неплохо бы ещё текст прочитать..  Подмигивание

Чтобы этот код ободинэсить, нужно контрол завернуть в обёртку и добавить методы поиска/замены. Пример такой обёртки: http://www.1cpp.ru/forum/YaBB.pl?num=1157967835/71#71


Еще раз большое спасибо. Разбираюсь с примером.
  
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Использование RICHTEXT.RichtextCtrl для редактирования программно DOC?
Ответ #14 - 12. Декабря 2011 :: 09:25
Печать  
Установил WS 2010 Express, что не хочет открывать проект.
Также есть вопрос, можно ли как то сделать перенаправление всех остальных методов не описывая их в компилируемом объекте? Например интересует SaveFile и LoadFile? Или надо все эти методы описывать и перенаправлять?
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать