| 
| 
 | Вопрос # 3 045/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!Подскажите пожалуйста, как в поле TMemo начать новую строку, когда вывод идет не строками, а как текст.
 Имеется програма транслитерации: символ ентера она находит (translit[chr(13)]:=xxx), но вот чем его заменить, чтобы в поле выводились слова с новой строки?
 Код translit[chr(13)]:=chr(13);  то в поле TMemo вижу просто черные маленькие квадратики вместо ентеров (так как это системный символ насколько я понимаю).
 Или как же другим способом начать новую строку в TMemo, если вывод осуществляется как Memo2.Text:=
 Приложение:Переключить в обычный режим unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls; type  TForm1 = class(TForm)    ButtonT: TButton;    Memo1: TMemo;    Memo2: TMemo;    procedure ButtonTClick(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end; var  Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ButtonTClick(Sender: TObject);vari: integer;s,output: string;translit: array[char] of string;beginoutput:='';s:=Memo1.Text;translit[' '] := '_';   ............... translit[chr(13)]:=chr(13);  for i:=1 to Length(s) do  output := output + translit[s[i]];  Memo2.Text:=output;end; end.
|  |   Вопрос задал: 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, а потом пользоваться уже готовым массивом, а не заполнять-перезаполнять его при каждом нажатии на клавишу.
 Резюмируя :), получим следующий код:
 Приложение:Переключить в обычный режим type  TForm1 = class(TForm)    Memo1: TMemo;    Memo2: TMemo;    Button1: TButton;    procedure Button1Click(Sender: TObject);   private     { Private declarations }  public    { Public declarations }  end; ... procedure TForm1.Button1Click(Sender: TObject);var  i: integer;  s,output: string;begin  output:='';  s:=Memo1.Text;  for i:=1 to Length(s) do    output := output + translit[s[i]];    Memo2.Text:=output;end;  var  i : integer;  ch : char;begin     translit[ch] := ch;    . . . end;
|  | Ответ отправил: Егор (статус: 10-ый класс)Время отправки: 27 июля 2009, 14:33
 
 |  Ответ #3. Отвечает эксперт: min@y™ Эх, вижу уже ответитили... Но не пропадать же добру?!
 Не надо менять символы, не подлежащие транслитерации, и они передадуться в результирующую строку без изменений.
 Я взял правила транслитерации из Punto Switcher и написал простой пример. Посмотри.
 К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 27 июля 2009, 14:49
 
 |  
 Мини-форум вопросаВсего сообщений: 2; последнее сообщение — 27 июля 2009, 15:27; участников в обсуждении: 2. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |