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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2012, 09:18   #1
lutdan
Пользователь
 
Регистрация: 08.01.2008
Сообщений: 47
Вопрос Мемо - убрать лишние проблемы и Enter'ы

Здравствуйте. Проблема заключается в следующем. При сохранении в БД появляются знаки типо || (это Два Enter), а при выводе в отчет вместо них появляются квадратики. При добавлении информации я сделал вот такой код
Код:
procedure TFormEditPlanovuy.Memo1KeyPress(Sender: TObject; var Key: Char);
begin  //Мы убираем все Enter'ы при нажатии...
  if key=#13 then
       begin
          key:=#0;
      end;
end;
Сохраняет все хорошо, а вот когда уже редактируем то курсор становится на вторую строку (Line=2) и при сохранении мы сохраняем этот Enter (|) Форумчане, я думаю кто-то встречался с похожей проблемой. Помогите.
lutdan вне форума Ответить с цитированием
Старый 24.10.2012, 09:26   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Мемо - убрать лишние проблемы и Enter'ы


харрошая опечатка

А почему при выводе в отчет нельзя убирать лишние ентеры?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 24.10.2012, 09:34   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а не проще ли удалять все Enter'ы (если уж Вы так уверены, что они вашим пользователям не нужны) при сохраненнии данных в БД?
делать это очень легко.
вместо: <ВашеПолеВБд> := Memo1.Text;
достаточно написать:
<ВашеПолеВБд> := StringReplace( Memo1.Text, #13#10, '', [rfReplaceAll]);
и всё!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.10.2012, 09:38   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Кстати, да, вероятнее всего, что символ, который ТС назвал "Этот Enter" - это таки не #13, а #10. Поэтому, как вариант, предложу изменить исходный код:

Код:
procedure TFormEditPlanovuy.Memo1KeyPress(Sender: TObject; var Key: Char);
begin  //Мы убираем все Enter'ы при нажатии...
  if (key=#13) or (key=#10) then key:=#0;
end;
Попробовать стоит - если сработает, значит я прав )
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 24.10.2012, 09:42   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
<ВашеПолеВБд> := StringReplace( Memo1.Text, #13#10, '', [rfReplaceAll]);
и всё!
Тогда уж как-то так:

Код:
<ВашеПолеВБд> :=  StringReplace( Memo1.Text, #13, '', [rfReplaceAll]);
<ВашеПолеВБд> :=  StringReplace( Memo1.Text, #10, '', [rfReplaceAll]);
Хз, в каком они там порядке стоять будут. Обычно, вроде, #10#13, хотя на 100% не уверен
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 24.10.2012, 09:44   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Memo.WantReturns:=False; не даст вставить клавиатурно в Memo перевод каретки и строки. Но для копипасте не сможет этому воспрепятствовать, собственно как и OnKeyPress. В предложении Сержа лучше все таки #13#10 на пробел менять
Цитата:
Хз, в каком они там порядке стоять будут
Обычно #13#10
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.10.2012 в 09:47.
Аватар вне форума Ответить с цитированием
Старый 24.10.2012, 09:49   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Sciv
Тогда уж как-то так:
Код:
<ВашеПолеВБд> :=  StringReplace( Memo1.Text, #13, '', [rfReplaceAll]);
<ВашеПолеВБд> :=  StringReplace( Memo1.Text, #10, '', [rfReplaceAll]);
ничего странного в коде не видите? Enter'ы в таком случае гарантированно останутся.
тогда уже так:
Код:
<ВашеПолеВБд> :=  StringReplace( StringReplace( Memo1.Text, #13, '', [rfReplaceAll]), #10, '', [rfReplaceAll]) ;
Цитата:
Хз, в каком они там порядке стоять будут. Обычно, вроде, #10#13, хотя на 100% не уверен
нет. Если речь идёт о Windows (а вряд ли автор темы использует Delphi не под Windows), то в тексте идёт именно в порядке #13#10! Так что можно и так оставить, тоже будет работать!

Цитата:
Сообщение от Аватар
Memo.WantReturns:=False; не даст вставить клавиатурно в Memo перевод каретки и строки.
спасибо. не знал...


Цитата:
Сообщение от Аватар
В предложении Сержа лучше все таки #13#10 на пробел менять
вот с этим согласен!
с учётом того, что автор темы и пробелы лишние удалить хочет я бы вообще такой код предложил:
Код:
s :=  StringReplace( Memo1.Text, #13, ' ', [rfReplaceAll]);
s :=  Trim( StringReplace( s, #10, ' ', [rfReplaceAll]) );
while pos('  ', s)>0 do
  s :=  StringReplace( s, '  ', ' ', [rfReplaceAll]);

<ВашеПолеВБд> := s

Последний раз редактировалось Serge_Bliznykov; 24.10.2012 в 09:55.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.10.2012, 10:03   #8
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Если речь идёт о Windows (а вряд ли автор темы использует Delphi не под Windows), то в тексте идёт именно в порядке #13#10! Так что можно и так оставить, тоже будет работать!
Ясно, весьма благодарен, не знал

Цитата:
Memo.WantReturns:=False; не даст вставить клавиатурно в Memo перевод каретки и строки.
Аватар, присоединяюсь к Сергею. ТОже был не в курсе.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 24.10.2012, 10:35   #9
lutdan
Пользователь
 
Регистрация: 08.01.2008
Сообщений: 47
По умолчанию

Спасибо, ВАМ ФОРУМЧАНЕ!
Sciv да уж и не заметил опечатку.
Код:
<ВашеПолеВБд> := StringReplace( Memo1.Text, #13#10, '', [rfReplaceAll]);
lutdan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы, убрать лишние элементы Katus Помощь студентам 2 17.02.2012 00:12
убрать лишние поля из формы One_and_only PHP 2 11.07.2011 01:06
Убрать лишние пробелы ДмитрийРэй C# (си шарп) 1 22.05.2011 09:19
Убрать лишние звуки из Memo Миша Общие вопросы Delphi 13 23.12.2009 13:34
Убрать лишние пробелы из строки SoftKoc Общие вопросы Delphi 3 03.12.2009 23:54