Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2009, 20:10   #1
Зайцев Александр
 
Аватар для Зайцев Александр
 
Регистрация: 18.05.2009
Сообщений: 4
Печаль RichEdit проблема с сохранинеием в Turbo Delphi

создал тектовый редактор с помощью RichEdit когда сохраняю текст помимо текста получаю вот такое
{\rtf1\ansi\ansicpg1251\deff0\defla ng1049{\fonttbl{\f0\fnil\fcharset0 Tahoma;}{\f1\fnil Tahoma;}}
\viewkind4\uc1\pard\lang1033\f0\fs1 6 gehev gev gev\lang1049\f1
\par }
где gehev gev gev это текст ,русский же шрифт вообще не принемает
не подскажите в чём пкосяк ?
Вложения
Тип файла: rar Практика.rar (236.6 Кб, 9 просмотров)
Всё генальное оказывается элементарным

Последний раз редактировалось Зайцев Александр; 27.05.2009 в 20:12.
Зайцев Александр вне форума Ответить с цитированием
Старый 27.05.2009, 22:03   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Зайцев Александр, ну всё нормально. Это RTF формат (можете сохраённый домент открыть прямо в MS Word). В этом формате сохраняются шрифты и оформление текста.
Русский текст там тоже есть, только он выглядит так
\'cf\'f0\'e8\'e2\'e5\'f2

А что Вы хотели получить? "Голый" текст, без оформелния? Тогда перед сохранением сделайте
Код:
RichEdit1.PlainText := True;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.05.2009, 23:26   #3
Зайцев Александр
 
Аватар для Зайцев Александр
 
Регистрация: 18.05.2009
Сообщений: 4
По умолчанию

Спасибо огромное помогло теперь 'Голый' текст
Всё генальное оказывается элементарным
Зайцев Александр вне форума Ответить с цитированием
Старый 17.01.2014, 16:46   #4
Valeriy4
 
Регистрация: 30.08.2010
Сообщений: 9
По умолчанию

Здравствуйте.
Не стал создавать новую тему, т.к проблема схожая.
Только у меня текст в окне RichEdit1 превращается в служебную
информацию не во время сохранения или чтения из файла, а после команды
- перенос по словам, или наоборот. При малом количестве строк, всё
нормально, а вот если количество строк превышает 2500, то текст
превращается в служебную информацию:
{\rtf1\ansi\deff0{\fonttbl{\f0\fnil \fcharset204{\*\fname Courier
New;}Courier New CYR;}} и т.д

Перенос по словам осуществляю при помощи CheckBox1:

// перенос по словам
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
// разрешает перенос по словам
if CheckBox1.Checked=True then begin
RichEdit1.ScrollBars := ssVertical;
RichEdit1.WordWrap := True;
end;

// запрещает перенос по словам
if CheckBox1.Checked=false then begin
RichEdit1.ScrollBars := ssBoth;
RichEdit1.WordWrap := false;
end;
end;

Пробовал менять свойство PlainText

RichEdit1.PlainText := True;

Не помогает.

Пробовал увеличивать количество символов:

SendMessage(RichEdit1.Handle, EM_EXLIMITTEXT, 0, $7FFFFFF0);

Тоже не помогает.

Подскажите пожалуйста, в чём причина?
Valeriy4 вне форума Ответить с цитированием
Старый 17.01.2014, 17:13   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

PlainText не причем. Так на всякий случай, возможно и поможет
Код:
  RichEdit1.Lines.BeginUpdate;
  RichEdit1.ScrollBars := ssVertical;
  RichEdit1.WordWrap := True;
  RichEdit1.Lines.EndUpdate;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.01.2014, 17:28   #6
Valeriy4
 
Регистрация: 30.08.2010
Сообщений: 9
По умолчанию

Аватар, спасибо за совет, я исправил текст, но всё равно не помогает:

// перенос по словам
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
// разрешает перенос по словам
if CheckBox1.Checked=True then begin
RichEdit1.Lines.BeginUpdate;
RichEdit1.ScrollBars := ssVertical;
RichEdit1.WordWrap := True;
RichEdit1.Lines.EndUpdate;
end;

// запрещает перенос по словам
if CheckBox1.Checked=false then begin
RichEdit1.Lines.BeginUpdate;
RichEdit1.ScrollBars := ssBoth;
RichEdit1.WordWrap := false;
RichEdit1.Lines.EndUpdate;
end;
end;
Valeriy4 вне форума Ответить с цитированием
Старый 17.01.2014, 18:36   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Такое поведение подтверждаю. Могу предположить, что WordWrap либо ScrollBars из разряда тех свойств, изменение которых в runtime не предусмотрено, либо коряво реализовано. Костыль - держать два ричэдита с нужными свойствами, один из которых невидим и перетягивать инфу из одного в другой меняя видимость. Пойдет?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.01.2014, 19:12   #8
Valeriy4
 
Регистрация: 30.08.2010
Сообщений: 9
По умолчанию

Я пробовал с параллельным Memo1, т.е.

Текст из RichEdit1 с переносом по строкам, перетягивал в Memo1, где нет переноса по строкам.
Затем, программно отключал перенос по строкам, а RichEdit1 и перетягивал в него текст из Memo1.

Да, всё происходило нормально, но дело в том, что при переносе текста в Memo1 терялся эффект (без переноса по строкам). Видимо при переносе из окна в окно, в конец строк вставляются символы переноса #13#10
В таком случае весь смысл переключения теряется, т.к. в процессе этих действий текст не меняется, т.е. остаётся так же (без переноса по строкам).

Хорошо, ещё попробую с двумя RichEdit1, может получится.

Спасибо Аватар!
Valeriy4 вне форума Ответить с цитированием
Старый 17.01.2014, 19:46   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так и без второго ричєдита нормально ведет себя
Код:
procedure TForm1.Button1Click(Sender: TObject);
const s = 'abd jjj kql kkkk $$$$ 4444 55555';
var i: Integer;
begin
  RichEdit1.Lines.BeginUpdate;
  for i:=1 to 3000 do RichEdit1.Lines.Add(s);
  RichEdit1.SelStart:=0;
  RichEdit1.SelLength:=10;
  RichEdit1.SelAttributes.Style:=[fsBold];
  RichEdit1.SelAttributes.Color:=clRed;
  RichEdit1.SelStart:=0;
  RichEdit1.Lines.EndUpdate;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  RichEdit1.Lines.BeginUpdate;
  RichEdit1.SelStart:=0;
  RichEdit1.SelLength:=Length(RichEdit1.Text);
  Clipboard.Clear;
  RichEdit1.CopyToClipboard;
  RichEdit1.Clear;
  RichEdit1.Lines.EndUpdate;
  RichEdit1.WordWrap:=not RichEdit1.WordWrap;
  if RichEdit1.WordWrap then RichEdit1.ScrollBars:=ssVertical else RichEdit1.ScrollBars:=ssBoth;
  RichEdit1.Lines.BeginUpdate;
  RichEdit1.PasteFromClipboard;
  RichEdit1.SelStart:=0;
  RichEdit1.Lines.EndUpdate;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.01.2014, 20:39   #10
Valeriy4
 
Регистрация: 30.08.2010
Сообщений: 9
По умолчанию

Спасибо Аватар, всё работает отлично!

Попытался прокоментировать ваш код:

Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
 RichEdit1.Lines.BeginUpdate;
  // ставим позицию в начало текста
  RichEdit1.SelStart:=0;
  // выделяем весь текст
  RichEdit1.SelLength:=Length(RichEdit1.Text);
  Clipboard.Clear;
  // копируем тест в буфер
  RichEdit1.CopyToClipboard;
  RichEdit1.Clear;
  RichEdit1.Lines.EndUpdate;

  // переключатель WordWrap
  // если WordWrap=True, то WordWrap:=False
  // если WordWrap=False, то WordWrap:=True
  RichEdit1.WordWrap:=not RichEdit1.WordWrap;

  // если WordWrap=True(перенос по словам)
  if RichEdit1.WordWrap then
   RichEdit1.ScrollBars:=ssVertical // вертикальный скролл
  else
   // если WordWrap=False(без переноса по словам)
   RichEdit1.ScrollBars:=ssBoth; // оба скролла

  RichEdit1.Lines.BeginUpdate;
  // вставляем тест из буфера
  RichEdit1.PasteFromClipboard;
  RichEdit1.SelStart:=0;
  RichEdit1.Lines.EndUpdate;
end;

Я не знал что так можно переключать WordWrap:

RichEdit1.WordWrap:=not RichEdit1.WordWrap;
Отличный код!
Огромное спасибо!



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 17.01.2014 в 21:37.
Valeriy4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с печатью в RichEdit Sanek777 Общие вопросы Delphi 2 28.09.2008 05:57
richedit Arkuz Общие вопросы Delphi 3 24.09.2008 22:38
RichEdit StartMis Общие вопросы Delphi 20 24.04.2008 15:40
RichEdit Римма Компоненты Delphi 3 23.01.2008 14:33
Проблема с RichEdit nex777 Компоненты Delphi 3 02.06.2007 15:43