Delphi word перенос строки

Обновлено: 04.07.2024

Здравствуйте, Chuchelo, Вы писали:

C>Здравствуйте!Помогите,пж, со след. с решением след. проблемы: использую RichEdit,для того,чтобы длину строк ограничить в обсласть видимости, использую WordWrap, тогда если строка не умещается в ширину RichEdit,то она переносится на другую строку.Но мне нужно, чтобы это как-то помнилось,что на самом деле перенесённая строка-это часть длинной строки,т.е. если нужно начать новый абзац,то это делать Enter"ом.Всю эту бадягу я делаю для того,чтоб потом этот текст из RichEdit перенести в Ворд,где к этому тексту я задаю определённый стиль форматирования на основе определённого шаблона. Уф..надеюсь,что объяснил понятно.Кто сталкивался,помогите,пж!

А разве строки при переносе разбиваются на несколько? Мне всегда казалось, что это чисто отбражение. В Lines->Strings[i] наверняка всё будет нормально.

_>А разве строки при переносе разбиваются на несколько? Мне всегда казалось, что это чисто отбражение. В Lines->Strings[i] наверняка всё будет нормально.
Наверное,Вы меня не так понимаете,у моего RichEdita ограниченная ширина-как и у любого др. VCL,оперируя свойством WordWrap(в моём случае False),я тем самым делаю RichEdit "резиновым",т.е.пока не нажат Enter,все введённые символы будут умещаться на одну строку. Если же сделать WordWrap=True,то доходя до правой границы строки будут переносится! Так как вот сделать,чтобы и Richedit не был резиновым и чтобы строки переносились на др. строку только,если нажат Enter.

p.s.Я понимаю,что Вы скажете,что RichEdit и так всё отображает!Это так,но не надо,чтобы как бы где-то помнилось,что если строка разбита и отобраены в RichEdit как 2 строки,то это на самом деле-одна строка, т.к. не был нажат Enter.

Спасибо всем откликнувшимся.

Здравствуйте, Chuchelo, Вы писали:

_>>А разве строки при переносе разбиваются на несколько? Мне всегда казалось, что это чисто отбражение. В Lines->Strings[i] наверняка всё будет нормально.
C>Наверное,Вы меня не так понимаете,у моего RichEdita ограниченная ширина-как и у любого др. VCL,оперируя свойством WordWrap(в моём случае False),я тем самым делаю RichEdit "резиновым",т.е.пока не нажат Enter,все введённые символы будут умещаться на одну строку. Если же сделать WordWrap=True,то доходя до правой границы строки будут переносится! Так как вот сделать,чтобы и Richedit не был резиновым и чтобы строки переносились на др. строку только,если нажат Enter.

C>p.s.Я понимаю,что Вы скажете,что RichEdit и так всё отображает!Это так,но не надо,чтобы как бы где-то помнилось,что если строка разбита и отобраены в RichEdit как 2 строки,то это на самом деле-одна строка, т.к. не был нажат Enter.

C>Спасибо всем откликнувшимся.
RichEdit.WordWrap := false;
RichEdit.ScrollBars := sbBoth;

SFT>RichEdit.WordWrap := false;
SFT>RichEdit.ScrollBars := sbBoth;

но RichEdit.ScrollBars := [b]sbBoth просто уберёт полосы прокрутки и всё Возможно дело не в компоненте,но как сделать,чтобы при достижении строкой правой границы Richedita,если не нажат Enter,то строку переносить на другую строку,НО помнить,что это всё одна строка?А?

Здравствуйте, Chuchelo, Вы писали:

C>но RichEdit.ScrollBars := [b]sbBoth просто уберёт полосы прокрутки и всё Возможно дело не в компоненте,но как сделать,чтобы при достижении строкой правой границы Richedita,если не нажат Enter,то строку переносить на другую строку,НО помнить,что это всё одна строка?А?


Отлично переносит слова при достижении правой границы без нажатия Enter'а. Только что проверил. Открывается полученный RTF в Word так же совершенно нормально.

С++ Builder 6 SP4
RichEdit стандартный, с палитры компонентов строителя.

Здравствуйте, .silent, Вы писали:

Word -> Document -> Selection -> TypeParagraph

Посоветуйте, плиз, что-нибудь.

S> Delphi.
а как данные в Word передаются-то?

Здравствуйте, Rius, Вы писали:

S>> Delphi.
R>а как данные в Word передаются-то?

Используется функция Word'а EditReplace для замены ключевых слов на наши значения.

Здравствуйте, .silent, Вы писали:

S>Используется функция Word'а EditReplace для замены ключевых слов на наши значения.

Что-то я не пойму, как здесь связаны Delphi, формирование отчета в Word и функция EditReplace Word'а

Здравствуйте, Rius, Вы писали:

R>Что-то я не пойму, как здесь связаны Delphi, формирование отчета в Word и функция EditReplace Word'а

а зачем тебе это?
вопрос есть, что еще надо? в документе меняются ключевые слова на наши значения.
к примеру,
[Name] меняется на Вася Пупкин

а вот [Names], например, должно меняться на:

Вася Пупкин
Борис Ельцин
Калашников Игорь

т.е. все это через разделитель строки.

я пишу что мне нужно заменить [Names] на что-то там, как раз с помощью функции EditReplace.

надеюсь, все объяснил нормально.

Здравствуйте, .silent, Вы писали:

S>Здравствуйте, Rius, Вы писали:

R>>Что-то я не пойму, как здесь связаны Delphi, формирование отчета в Word и функция EditReplace Word'а

S>а зачем тебе это?
S>вопрос есть, что еще надо?

вот задам я вопрос:

почему при сохранении изменений в базе прога вылетает, а при вставке новых записей — работает?

и попробуй ответить

S>в документе меняются ключевые слова на наши значения.
S>к примеру,
S>[Name] меняется на Вася Пупкин

S>а вот [Names], например, должно меняться на:

S>Вася Пупкин
S>Борис Ельцин
S>Калашников Игорь
S>т.е. все это через разделитель строки.

S>я пишу что мне нужно заменить [Names] на что-то там, как раз с помощью функции EditReplace.

S>надеюсь, все объяснил нормально.
не нормально, но в общих чертах.
это делается обычно через закладки (bookmark): составляется документ, в нужных местах ставятся закладки (меню Вставка), и док. сохраняется как шаблон *.dot. далее программно запускается Word, открывается шаблон (автоматически создается документ без назначенного имени), программно же ставится курсор на нужную закладку и вставляется текст. наравне с функцией вставки текста есть и функции печати 'Enter', 'Backspace', 'End Paragraph' и т.п.

а насчет замены. вы в самом Word можете в однострочное поле ввести символ возврата каретки. так что же пытаетесь программно делать?

Здравствуйте, Rius, Вы писали:

R>а насчет замены. вы в самом Word можете в однострочное поле ввести символ возврата каретки. так что же пытаетесь программно делать?

у меня есть функция ReplaceByTag(строка_поиска, строка_замены);, которая в самом документе заменяет все с помощью своей функции Replace.

Например, ReplaceByTag('[Name]', UserName). Это одно имя.


Во всем нужна мера, даже в том, чтобы соблюдать ее.

Если Вы имеете в виду знак ¶, то нет, он просто отображается в Word'е, но ничего не переносит.

Здравствуйте, kavlad, Вы писали:

K>Word -> Document -> Selection -> TypeParagraph

это я понимаю, просто хотелось более простого решения вроде добавления спец.символов в строку, а тут всю функцию переделывать надо.
но если нельзя, то уж что поделать

Нет. Это для Word — именно символ конца абзаца. По крайней мере, ^p используется как подстановка для поиска и замены конца абзаца.

Читайте также: