Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 045

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Подскажите пожалуйста, как в поле TMemo начать новую строку, когда вывод идет не строками, а как текст.
Имеется програма транслитерации: символ ентера она находит (translit[chr(13)]:=xxx), но вот чем его заменить, чтобы в поле выводились слова с новой строки?
Код translit[chr(13)]:=chr(13); то в поле TMemo вижу просто черные маленькие квадратики вместо ентеров (так как это системный символ насколько я понимаю).
Или как же другим способом начать новую строку в TMemo, если вывод осуществляется как Memo2.Text:=

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. ButtonT: TButton;
  12. Memo1: TMemo;
  13. Memo2: TMemo;
  14. procedure ButtonTClick(Sender: TObject);
  15. private
  16. { Private declarations }
  17. public
  18. { Public declarations }
  19. end;
  20.  
  21. var
  22. Form1: TForm1;
  23.  
  24. implementation
  25.  
  26. {$R *.dfm}
  27.  
  28. procedure TForm1.ButtonTClick(Sender: TObject);
  29. var
  30. i: integer;
  31. s,output: string;
  32. translit: array[char] of string;
  33. begin
  34. output:='';
  35. s:=Memo1.Text;
  36. translit[' '] := '_';
  37.  
  38.  
  39.  
  40. ...............
  41.  
  42. translit[chr(13)]:=chr(13);
  43.  
  44.  
  45. for i:=1 to Length(s) do
  46. output := output + translit[s[i]];
  47. Memo2.Text:=output;
  48. end;
  49.  
  50. end.


Pokemonchyk Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Pokemonchyk (статус: Посетитель)
Вопрос отправлен: 27 июля 2009, 13:56
Состояние вопроса: открыт, ответов: 3.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Pokemonchyk!
надо добавлять два символа - chr(13)+chr(10).
если надо написать длинную строку, то можно так
'line1'#13#10'line2'#13#10'line3'
или
'line1'#$D#$A'line2'#$D#$A'line3'

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 27 июля 2009, 14:14
Оценка за ответ: 5

Комментарий к оценке: спасибо. вариант chr(13)+chr(10) работает. Хоть я и не понял что за символ chr(10), но позже узнаю. Еще раз спасибо!

Ответ #2. Отвечает эксперт: Егор

Здравствуйте, Pokemonchyk!
У вас ошибка в том, что не для всех символов вы определили соответствующую транслитеральную :) подстановку. В частности, перевод строки, как правильно отметил Вадим К - это два символа - #10#13, а для символа #13 вы подстановку сделали, а для #10 - нет. Да ещё у вас нет подстановки для букв латинского алфавита, знаков препинания и т.д.
К тому же, лучше вынести формирование массива translit - заполнить его один раз, например, в обработчике события формы onCreate, а потом пользоваться уже готовым массивом, а не заполнять-перезаполнять его при каждом нажатии на клавишу.
Резюмируя :), получим следующий код:

Приложение:
  1. type
  2. TForm1 = class(TForm)
  3. Memo1: TMemo;
  4. Memo2: TMemo;
  5. Button1: TButton;
  6. procedure Button1Click(Sender: TObject);
  7.  
  8. private
  9.  
  10. { Private declarations }
  11. public
  12. { Public declarations }
  13. end;
  14.  
  15. ...
  16.  
  17. procedure TForm1.Button1Click(Sender: TObject);
  18. var
  19. i: integer;
  20. s,output: string;
  21. begin
  22. output:='';
  23. s:=Memo1.Text;
  24. for i:=1 to Length(s) do
  25. output := output + translit[s[i]];
  26. Memo2.Text:=output;
  27. end;
  28.  
  29.  
  30. var
  31. i : integer;
  32. ch : char;
  33. begin
  34.  
  35. translit[ch] := ch;
  36.  
  37.  
  38.  
  39.  
  40. . . .
  41.  
  42. end;


Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 27 июля 2009, 14:33

Ответ #3. Отвечает эксперт: min@y™

Эх, вижу уже ответитили... Но не пропадать же добру?!

Не надо менять символы, не подлежащие транслитерации, и они передадуться в результирующую строку без изменений.
Я взял правила транслитерации из Punto Switcher и написал простой пример. Посмотри.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 27 июля 2009, 14:49


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 27 июля 2009, 15:27; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 27 июля 2009, 14:32 [#1]:

почитайте http://ru.wikipedia.org/wiki/Новая_строка
там достаточно для понимания.
Галочка "подтверждения прочтения" - вселенское зло.
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 27 июля 2009, 15:27 [#2]:

Автору вопроса: Что такое #13#10?

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:50
Выполнено за 0.03 сек.