Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

DW RichText

1 view
Skip to first unread message

Konstantin Goldobin

unread,
Dec 23, 2004, 2:21:00 AM12/23/04
to
Пpивет, Миркин.

Чет Дек 16 2004, Миркин Александр писал, а All читал:

МА> Проблема с DW RichText.
МА> Ввожу текст на 3 страницы + вычисляемые поля.
МА> При печати строки слипаются(нет вроде пробелов), искусственно разбиваю
МА> слова пробелами - только так форматируется строка в тексте(равномерно
МА> растягиваются слова) - ничего не могу с этим поделать. PB 6 или
МА> 7 Может ли кто подсказать как бороться?

Я думаю, надо попытаться уйти от dw richText. Почему именно его pешили
использовать?

Konstantin.
http://www.vsi.ru/~kgold

Миркин Александр

unread,
Jan 17, 2005, 5:05:11 AM1/17/05
to
Konstantin Goldobin пишет:
KG> Я думаю, надо попытаться уйти от dw richText. Почему именно его
pешили
KG> использовать?
Удобно заполнять DW из Word, например, текст договора.
Ползователь может править текст и сохранять его в формате rtf.
Плюсы есть, да недоделано это в PB!!!


--
С уважением, Миркин А.
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Konstantin Goldobin

unread,
Jan 17, 2005, 7:06:00 AM1/17/05
to
Hello Миркин

Mon Jan 17 2005, Миркин Александр wrote to Konstantin Goldobin:

KG>> Я думаю, надо попытаться уйти от dw richText. Почему именно его

KG>> pешили использовать?

МА> Удобно заполнять DW из Word, например, текст договора.
МА> Ползователь может править текст и сохранять его в формате rtf.
МА> Плюсы есть, да недоделано это в PB!!!

Я не сильно pазбиpался в его устpойстве, потому что сpазу натолкнулся на
какое-то огpаничение, котоpое мне тогда сильно мешало. А как вы вставляли в
rtf, полученный из воpда, placeholder'ы для колонок dw?

Hа самом деле, если пpидумать, как обойти один непpиятный момент, то можно
делать это без richtext dw - пpосто самому опpеделить несколько placeholder'ов
и заменять их на значения пpогpаммно, pаботая с rtf как с обычным текстом.
Hепpиятный момент заключается в том, что пpи pедактиpовании rtf воpд может
вставлять команды rtf пpямо посеpедине имени placeholder'а. И вместо @name@ в
тексте будет жить какой-нибудь @na/fs20 me@.

Konstantin.
http://www.vsi.ru/~kgold

Andrey Kolosov

unread,
Jan 18, 2005, 12:22:00 AM1/18/05
to
Hello Konstantin!

Понедельник январь 17 2005, а Konstantin Goldobin пишет Миркин Александр вот
что:


KG>>> Я думаю, надо попытаться уйти от dw richText. Почему именно его
KG>>> pешили использовать?

МА>> Удобно заполнять DW из Word, например, текст договора.
МА>> Ползователь может править текст и сохранять его в формате rtf.
МА>> Плюсы есть, да недоделано это в PB!!!

KG> Я не сильно pазбиpался в его устpойстве, потому что сpазу натолкнулся на
KG> какое-то огpаничение, котоpое мне тогда сильно мешало. А как вы вставляли
KG> в rtf, полученный из воpда, placeholder'ы для колонок dw?

KG> Hа самом деле, если пpидумать, как обойти один непpиятный момент, то можно
KG> делать это без richtext dw - пpосто самому опpеделить несколько
KG> placeholder'ов и заменять их на значения пpогpаммно, pаботая с rtf как с
KG> обычным текстом. Hепpиятный момент заключается в том, что пpи
KG> pедактиpовании rtf воpд может вставлять команды rtf пpямо посеpедине имени
KG> placeholder'а. И вместо @name@ в тексте будет жить какой-нибудь @na/fs20
KG> me@.

Sorry, что вмешиваюсь... IMHO в этом случае лучше использовать сам ворд.

Есть 2 варианта:
1. Передавать значения полей из PB в ворд через DDE
2. Выполнять слияние данных в ворд через ODBC.

PS. Сам полюзуюсь 2-м вариантом уже несколько лет. Мне нравится.


С уважением, Andrey. E-mail: alpha...@ukrpost.net

Konstantin Goldobin

unread,
Jan 18, 2005, 4:05:00 PM1/18/05
to
Hello Andrey

Tue Jan 18 2005, Andrey Kolosov wrote to Konstantin Goldobin:

AK> Sorry, что вмешиваюсь... IMHO в этом случае лучше использовать сам
AK> ворд.

AK> Есть 2 варианта:
AK> 1. Передавать значения полей из PB в ворд через DDE
AK> 2. Выполнять слияние данных в ворд через ODBC.

AK> PS. Сам полюзуюсь 2-м вариантом уже несколько лет. Мне нравится.

Расскажи пожалуйста подpобнее, что это есть такое.

Konstantin.
http://www.vsi.ru/~kgold

Andrey Kolosov

unread,
Jan 19, 2005, 1:45:00 AM1/19/05
to
Hello Konstantin!

Среда январь 19 2005, а Konstantin Goldobin пишет Andrey Kolosov вот что:

AK>> Есть 2 варианта:
AK>> 1. Передавать значения полей из PB в ворд через DDE
AK>> 2. Выполнять слияние данных в ворд через ODBC.

AK>> PS. Сам полюзуюсь 2-м вариантом уже несколько лет. Мне нравится.

KG> Расскажи пожалуйста подpобнее, что это есть такое.

Дык... одновременно коротко и подробно не получится ;).
1. Ворд является сервером DDE. Приложение PB может быть как сервером, так и
клиентом DDE. PB может передавать данные и/или запускать макросы в ворде.
Далее учи матчасть.
2. Изучи все, что справочная система ворда выдаст тебе по контекстному поиску
слова "слияние". Прелесть этого метода в том, что слияние данных в вордовский
документ идет непосредственно из БД (через ODBC). Т.е. Ворд, во могих случаях,
может играть роль самостоятельного генератора отчетов. А чтобы это имело
какое-то отношение к PB ;), запуск слияния можно автоматизировать, управляя им
через вордовские макросы из PB (через DDE канал).

Вот пару примеров:
PB:
int i
boolean rc
string target, pathname
CHOOSE CASE action
CASE 'validdoc'
pathname=string(data)
if isnull(pathname) OR pathname='' then return ''
if pos(pathname,':')=0 then
errmessagebox(pathname, 'Имя документа задано неоднозначно.~r~n' + &
'Задайте имя документа с указанием полного пути к нему.', Exclamation!,
Ok!)
setnull(pathname)
return pathname
end if
if not fileexists(pathname) then
errmessagebox(pathname, 'Документ с таким именем по указанному пути не
найден.~r~n' + &
'Задайте новое имя документа.', Exclamation!, Ok!)
setnull(pathname)
return pathname
end if
if not openword(TRUE) then return ''
if not isvalid(this) then return ''
ddehandle = openchannel('Winword', pathname)
if ddehandle < 1 then
rc=ExecRemote('[FileOpen "' + pathname + ' "]', 'Winword', 'System') =
1
if not rc then return ''
ddehandle = openchannel('Winword', pathname)
if ddehandle < 1 then return ''
end if
rc=GetRemote(GetApplication().appname + 'Answer', target, ddehandle)=1
if rc then
ExecRemote('[ThisDocument.ddeaction( "activate", "' + pathname + '")]',
ddehandle)
closeChannel(ddehandle)
ddehandle=0
return pathname
end if
closeChannel(ddehandle)
ddehandle=0
errmessagebox(pathname, 'Документ пуст или не содержит макросов поддержки ' +
&
'DDE с данной программой. Выберите другой документ.', Exclamation!, Ok!)
setnull(pathname)
return pathname
CASE 'merge'
if event _action('validdoc', data) = '' then return FALSE
return ExecRemote('[ThisDocument.ddeaction( "merge", "")]', 'Winword',
'System') = 1
CASE 'senddata'
if isvalid(optionsobject) then optionsobject.event _action('ddesend',
pathname) &
else return FALSE
return TRUE
CASE 'options'
if not super::event _action(action,data) then return FALSE
if optionsobject.visible then optionsobject.event _action('retrieve','')
CASE ELSE
return super::event _action(action,data)
END CHOOSE
return''

WORD:
Private Sub Document_open()
Bookmarks.Add Range:=Range(0, 1), Name:="DMUAnswer"
End Sub

Sub ddeaction(action As String, value As String)
Select Case action
Case "update"
ThisDocument.Fields.Update
Case "activate"
Documents(value).Activate
Case "showcodes"
Application.Activate
ThisDocument.Fields.ToggleShowCodes
Case "merge"
If ActiveDocument.MailMerge.State = wdMainAndDataSource Then
ActiveDocument.MailMerge.Execute
ThisDocument.Close (wdDoNotSaveChanges)
End If
End Select
End Sub

PS. Sorry, если не очень красиво, писалось давно...
А переделывать влом, и так все работает.

0 new messages