delphi перенос строки в коде
delphi символ переноса строки
880 просмотра
3 ответа
57 Репутация автора
Я разработал небольшой проект для чтения из Comport с ComPort Library версии 4.10. Когда я тестировал с эмулятором com0com, он работал отлично, но когда я считывал данные с реальной машины (это электронная тестовая машина, отправляющая данные через RS232), данные поступали с CR и LF, я много раз искал и пробовал все процедуры, чтобы очистить CR & LF, но потерпел неудачу.
Я пытался удалить # 13, # 13 # 10, # 13 + # 10, # 32, sLineBreak и пробовал следующие функции;
Но пока не повезло, на рисунке ниже показано, как выглядит мой блокнот; Устройство отправляет данные, начиная с «APSiS0BE», и похоже на отправку CR & LF с каждым параметром, но я не смог получить данные в одну строку.
Ответы (3)
0 плюса
181 Репутация автора
Я тоже использую ComPort и использую StringReplace для удаления CR + LF:
1 плюс
25521 Репутация автора
Delphi имеет Trim встроенный метод, который удаляет начальные и конечные пробелы и управляющие символы (CRLF и т. Д.). Ваш метод удаляет их из любой точки строки, но для протоколов RS-232 часто Trim это все, что вам обычно требуется.
Автор: J. Размещён: 15.03.2017 12:48
2 плюса
5273 Репутация автора
Я не думаю, что вы видите то, во что вы верите.
Когда вы добавляете строку в TMemo, вы неявно добавляете CR + LF, поэтому вы удаляете их, но затем добавляете их обратно. Если бы вы этого не сделали, при открытии содержимого в Notepad ++, как вы это делаете, будет пустой пробел. линии, а вы их не видите.
Итак, я думаю, что вы успешно удаляете CR + LF, вы просто не понимаете этого.
Так что если Вы хотите сделать текст (Caption) элемента TLabel в две строки, то это можно сделать следующим образом:
Label1.Caption := ‘Первая строка’ + #13#10 + ‘Вторая строка’;
Я хочу создать строку, которая охватывает несколько строк, чтобы присвоить свойство Caption Ярлыка. Как это делается в Delphi?
В System.pas (который автоматически используется) следующее определяется:
Это из Delphi 2009 (обратите внимание на использование AnsiChar и AnsiString). (Line обертка добавленные мной.)
Так что если вы хотите сделать свой TLabel обертку, убедитесь Авторазмер установлен в истинное, а затем использовать следующий код:
Работает во всех версиях Delphi, так как sLineBreak был введен, который я считаю, был Delphi 6.
Вот еще короче подход:
my_string := ‘Hello,’ + #13#10 + ‘world!’;
#13#10 является CR / LF символов в десятичной системе
Или вы можете использовать ^ M + ^ J ярлык также. Все зависит от предпочтений. коды «CTRL-CHAR» переводится компилятором.
Вы можете взять + расстояние между ^ М и ^ J, но тогда вы получите предупреждение компилятора (но он все равно будет компилироваться).
Написать ( ‘Hello’ + sLineBreak + ‘Мир!’);
Надеюсь это поможет.
Иногда я не хочу загромождать мой код пространство, особенно для статической наклейки. Для того, чтобы просто иметь это определиться с формой, введите текст метки на форме, а затем щелкните правой кнопкой мыши в любом месте на одной и той же форме. Выберите «Просмотр в виде текста». Теперь вы будете видеть все объекты, как дизайн, но, как только текст. Прокрутка вниз или выполнить поиск текста. Когда вы найдете его, изменить заголовок, так это выглядит примерно так:
Подпись = ‘Line 1’ # 13’Line 2 ‘# 13’Line 3’
# 13 означает порядковый номер 13, или для ASCII возврата каретки. Chr (13) та же идея, CHR () изменяет число к порядковому типу.
Обратите внимание, что нет запятой в этой конкретной грани Delphi, и «=» используется вместо «: =». Текст для каждой строки заключен в одиночных кавычках.
После того, как вы закончите, щелкните правой кнопкой мыши еще раз и выберите «Просмотр в виде формы». Теперь вы можете сделать любое форматирование, такие как полужирный, правильно обосновывать и т.д. Вы просто не можете повторно редактировать текст на форме или вы потеряете ваши разрывы строк.
Я также использую «Просмотреть как текст» для нескольких изменений, когда я просто хочу, чтобы прокрутить и делать замены и т.д. Quick.
Сейчас онлайн:
На сайте — 9
На IRC-канале — 2
Работа со строками и символами
Введение
Символы
Строки
Типы данных
Перейдём непосредственно к программированию. Для работы с символами и строками существуют соответствующие типы данных:
Официально строки вмещают лишь 255 символов, однако в Delphi в строку можно записать гораздо больше. Для хранения больших текстов и текстов со специальными символами существуют специальные типы данных AnsiString и WideString (последний, кстати, двухбайтовый, т.е. для Юникода).
Для задания текстовых значений в Pascal используются одинарные кавычки (не двойные!). Т.е. когда вы хотите присвоить строковой переменной какое-либо значение, следует сделать это так:
Символы указываются аналогично, только в кавычках присутствует один-единственный символ.
Если вы хотите жёстко ограничить длину текста, хранимого в строковой переменной, можно сделать это следующим образом:
В скобках указывается максимальная длина строки.
Операции со строками
Обработка строк
Перейдём к функциям и процедурам обработки строк.
Длина строки
Нахождение подстроки в строке
Удаление части строки
Следует отметить, что если длина удаляемого фрагмента окажется больше количества символов в строке, начиная с указанной позиции (т.е. «вылезем за край»), функция нормально отработает. Поэтому, если нужно удалить фрагмент из строки с какого-то символа до конца, не нужно вычислять количество этих символов. Лучшим способом будет задать длину самой этой строки.
Вот пример. Допустим, требуется найти в строке первую букву «a» и удалить следующую за ней часть строки. Сделаем следующим образом: позицию буквы в строке найдём функцией Pos(), а фрагмент удалим функцией Delete().
Копирование (извлечение) части строки
Ещё одной важной задачей является копирование части строки. Например, извлечение из текста отдельных слов. Выделить фрагмент строки можно удалением лишних частей, но этот способ неудобен. Функция Copy() позволяет скопировать из строки указанную часть. Функция принимает 3 параметра: текст (строку), откуда копировать, номер символа, начиная с которого скопировать и количество символов для копирования. Результатом работы функции и будет фрагмент строки.
Пример: пусть требуется выделить из предложения первое слово (слова разделены пробелом). На форме разместим Edit1 (TEdit), в который будет введено предложение. Операцию будет выполнять по нажатию на кнопку. Имеем:
В данном случае из строки копируется фрагмент от начала до первого пробела. Число символов берётся на единицу меньше, т.к. в противном случае пробел также будет скопирован.
Вставка подстроки в строку
В данном случае результатом будет строка «1200034567890».
Пример «посерьёзнее»
Примеры, приведённые выше, лишь демонстрируют принцип работы со строками с помощью функций Length(), Pos(), Delete() и Copy(). Теперь решим задачу посложнее, которая потребует комбинированного применения этих функций.
Задача: текст, введённый в поле Memo, разбить на слова и вывести их в ListBox по одному на строке. Слова отделяются друг от друга пробелами, точками, запятыми, восклицательными и вопросительными знаками. Помимо этого вывести общее количество слов в тексте и самое длинное из этих слов.
Сначала перенесём введённый текст в переменную. Для того, чтобы разом взять весь текст из Memo, обратимся к свойству Lines.Text:
Здесь замена произведена следующим образом: организован цикл, в котором одна из запятых удаляется, но происходит это до тех пор, пока в тексте есть две идущие подряд запятые.
Теперь в переменной Word у нас слово из текста, а в переменной Text вся остальная часть текста. Вырезанное слово теперь добавляем в ListBox, вызывая ListBox.Items.Add(строка_для_добавления).
Теперь нам нужно организовать такой цикл, который позволил бы вырезать из текста все слова, а не только первое. В данном случае подойдёт скорее REPEAT, чем WHILE. В качестве условия следует указать Length(Text) = 0, т.е. завершить цикл тогда, когда текст станет пустым, т.е. когда мы вырежем из него все слова.
Итак, на данный момент имеем:
Теперь нужно найти самое длинное из всех слов. Алгоритм нахождения максимального числа таков: принимаем в качестве максимального первое из чисел. Затем проверяем все остальные числа таким образом: если число больше того, которое сейчас записано как максимальное, делаем максимальным это число. В нашем случае нужно искать максимальную длину слова. Для этого можно добавить код в цикл вырезания слов из текста или произвести поиск после добавления всех слов в ListBox. Сделаем вторым способом: организуем цикл по строкам ListBox. Следует отметить, что строки нумеруются с нуля, а не с единицы! В отдельной переменной будем хранить самое длинное слово. Казалось бы, нужно ведь ещё хранить максимальную длину слова, чтобы было с чем сравнивать. Но не нужно заводить для этого отдельную переменную, ведь мы всегда можем узнать длину слова функцией Length(). Итак, предположим, что первое слово самое длинное.
Почему цикл до ListBox.Items.Count-1, а не просто до Count, разберитесь самостоятельно 🙂
Вот теперь всё готово!
Работа с символами
Помните «Таблицу символов«? Давайте сделаем её сами!
Заполнение осуществим прямо при запуске программы, т.е. не будем ставить никаких кнопок. Итак, создаём обработчик события OnCreate() формы.
Специальные символы
Здесь мы выводим окошко с текстом. У события есть переменная Key, в которой хранится символ, соответствующий нажатой клавише. С помощью функции Ord() узнаём код этого символа, а затем функцией IntToStr() преобразуем это число в строку.
Доведём нашу программу по поиску слов до логического конца. Итак, чтобы избавиться от пустых строк, нам нужно удалить из текста символы #13 и #10. Сделать это можно с помощью цикла, по аналогии с тем, как мы делали замену двух запятых на одну:
Дополнительный модуль StrUtils.pas содержит дополнительные функции для работы со строками. Среди этих функций множество полезных. Более подробно некоторые из функций рассмотрены в статье Работа со строковыми типами данных. А вот краткое описание часто используемых функций:
Также следует упомянуть у функциях преобразования регистра.
Для преобразования отдельных символов следует использовать эти же функции.
Подробную информацию о каждой функции можно получить, введя её название в любом месте редактора кода, установив курсор на это название (или выделив его) и нажав F1.
Скриншоты программ, описанных в статье
Заключение
Длинный получился урок. И как раз афоризм оказался в тему. Что удивительно, афоризм был подобран мной в самом начале, а сам урок написан позже 🙂
Автор: Ерёмин А.А.
Статья добавлена: 14 февраля 2008
Зарегистрируйтесь/авторизируйтесь,
чтобы оценивать статьи.
Статьи, похожие по тематике
Для вставки ссылки на данную статью на другом сайте используйте следующий HTML-код:
Ссылка для форумов (BBCode):
Быстрая вставка ссылки на статью в сообщениях на сайте:
<
<<статья:118>> — полноценная HTML-ссылка на статью (текст ссылки — название статьи).
Поделитесь ссылкой в социальных сетях:
Комментарии читателей к данной статье
Объясните Плиз. Например Есть Файл в файле строка,123456789 можно ли при помощи этой процедуры
procedure TForm2.Button1Click(Sender: TObject);
var S: String;
begin
S:=’1234567890′;
Insert(‘000’,S,3);
ShowMessage(S)
end;
сделать вставку в строке, только та что находится например в файле, а не как на примере строка находится в переменной.
вот созданый файл
begin
AssignFile(f,’D:1.txt’);
Rewrite(f);
WriteLn(f,’123456789′);
CloseFile(f);
end;
Цитата (alexkrv):
А Trim() удаляет space-символы из начала и из конца строки. Из середины конечно же нет.
while Pos(Chr(10),Text) > 0 do
Delete(Text,Pos(Chr(10),Text),1);
-то всё работает.
В каком именно примере это наблюдается?
Оставлять комментарии к статьям могут только зарегистрированные пользователи.
Преревод строки в MessageBox
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Вывод строки в MessageBox.
Пользуюсь Delphi XE. При попытке вывести содержимое переменной типа string в сообщении MessageBox’a.
Два раза открывается MessageBox.Show после второго вызова MessageBox
Здравствуйте! Подскажите пожалуйста. Мне вот надо было сделать диалоговое окно для ввода данных.
Вывести текст с новой строки в MessageBox
Подскажите, пожалуйста, как вывести текст с новой строки в MessageBox (программа уже выводит.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Формирование строки сообщения для MessageBox
господа если я напишу#include int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) <.
Разделить массив на отдельные строки и вывести их поочерёдно в MessageBox
Помогите пожалуйста. Вроде как всё просто, но уже пол часа ничего не выходит.:wall: Нужно сделать.
Нужно прочитать файл и вывести все строки в один MessageBox
Здравствуйте дорогие читателя этого замечательного форума! Мне нужно прочитать файл и вывести все.
При щелчке на любую строку ListBox-а вывести MessageBox с текстом этой строки
Нужна помощь Я получаю текст всех запущенных приложений и вывожу их в listbox при нажатии на.
MessageBox: Как сделать так, чтобы если окно модальное, при клике на родительское окно MessageBox мигал?
Здравия всем! Никак не найду нужный MB_*, как можно сделать так, чтобы если сделать MessageBox.
При нажатии в одном messagebox «Нет» всё равно появляется другой messagebox
При удалении записи сделал messagebox с подтверждением Да или Нет. При нажатии Нет всё равно.
Про смартфон — цены, обзоры и реальные отзывы покупателей
На сайте Pro-Smartfon найдёте отзывы и обзоры топовых смартфонов 2017 года. Всё о плюсах и минусах мобильных телефонов. Свежие фотографии, цены и реальные отзывы покупателей о лучших смартфонах
Delphi перенос строки в коде
Так что если Вы хотите сделать текст (Caption) элемента TLabel в две строки, то это можно сделать следующим образом:
Label1.Caption := ‘Первая строка’ + #13#10 + ‘Вторая строка’;
Можно ли указать перенос строки при парсинге? Пробовал писать в одну строку, также пробовал #10+#13, но безуспешно. Если можно выполнить этот перенос, то подскажите как, вот строки в которых надо указать перенос:
2 ответа 2
Для Delphi порпобуйте chr(13)+chr(10)
За пробелы, переносы, табуляции и т.д отвечает: s* — звёздочка означает что их может не быть или быть сколько угодно.
Я не знаю диалекта Delphi, но если там используются regex типа PCRE, то этот код Вам должен помочь.
Блог о информационных технологиях и не только
вторник, 23 марта 2010 г.
Стилевое оформление исходного кода в Delphi
Естественно переход с собственного стиля оформления на предлагаемый может оказаться непростым, но рано или поздно это надо делать. Есть утилита которая может посодействовать более комфортабельно перейти на этот стандарт. Называется она «delforexp» (Доступна для Delphi 2/3/4/5/6/7/9/2007). В среде Delphi 2010 есть уже встроенный свой инструмент форматирования исходного кода.
Кстати в компании Borland, на Web-сайте компании Borland, на CD, DVD купленных у компании Borland, везде где есть исходный код, стандарт форматирования является законом.
Данный документ не является попыткой определить грамматику языка Object Pascal. В нем приводятся базовые примеры как можно поступить при оформлении исходного кода.
Файлы исходного кода (Наверх) Исходный код Object Pascal подразделяется на модули и файлы проекта, которые подчиняются одинаковым соглашениям. Файл проекта Delphi имеет расширение dpr. Этот файл является главным исходным файлом для всего проекта. Любые модули, используемые в проекте, всегда будут иметь расширение pas. Дополнительные файлы, используемые в проекте могут играть важную роль, но эта глава описывает форматирование только pas и dpr файлов. Более подробно о расширениях файлов можно прочитать в статье: Описание типов файлов в среде Delphi.
Именование файлов (Наверх)
Язык Object Pascal поддерживает длинные имена файлов. Если при создании имени файла Вы используете несколько слов, то необходимо использовать заглавную букву для каждого слова в имени, например: MyFirstProjectName.pas. Такой стиль оформления известен как InfixCaps или CamelCaps. Расширения файлов должны быть в нижнем регистре.
Все файлы модулей которые созданы в какой либо организации, например: ХХХ должны иметь префикс ХХХ
Организация исходных файлов (Наверх)
Все модули Object Pascal могут содержать следующие элементы в определенном порядке:
Для визуального разделения элементов между ними должна быть хотя бы одна пустая строка.
При создании нового проекта – среда разработки генерирует исходный код, пример которго приведен ниже:
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
Нужно заметить что ключевые слова пушиться в нижнем регистре.
Рассмотрим каждые элемент в отдельности:
Он должен выглядеть примерно следующим образом:
Имя модуля (Наверх)
Оно начинается с ключевого слова unit. Имя модуля может содержать символы как в верхнем, так и в нижнем регистре. Например: unit XXXModule1; В результате этот модуль будет назван XXXModule1.pas при сохранении.
Секция интерфейса (Наверх)
Она состоит из определения подключаемых модулей, описания типов, констант, массивов, переменных:
Подключаемые модули(Наверх)
Внутри модуля объявление используемых модулей должно начинаться со слова uses (в нижнем регистре). Затем следуют наименования модулей с сохранением регистра символов.
Каждый используемый модуль должен отделяться от следующего с помощью запятой. Объявление используемых модулей должно заканчиваться точкой с запятой. Список используемых модулей необходимо располагать на следующей строке после слова uses. Если используются модули из разных проектов или производителей, то необходимо сгруппировать модули по проектам или производителям и каждую новую группу начинать с новой строки и прокомментировать каждую группу:
uses
Windows, SysUtils, >// модули Delphi
XХХMyUnit1, ХХXMyUnit2; // модули ХХХ
Если список используемых модулей не умещается по ширине в 80 символов (в редакторе кода есть вертикальная полоса, которая показівает границу в 80 символов), то его необходимо перенести на следующую строку.
Объявление классов, типов и интерфейсов (Наверх)
Для разделения слов нельзя использовать символ подчеркивания. Имя класса должно быть именем существительным или фразой с именем существительным. Имена интерфейсов или классов должны отражать главную цель их создания:
ManageLayout //глагол
delphi_is_new_to_me //подчерк
Объявление класса и типов начинается с двух пробелов, затем идет идентификатор класса(его имя) с префиксом Т.
Следом за идентификатором класса идет пробел, знак равенства, пробел и слово class в нижнем регистре:
TMy > Если необходимо определить родителя класса, то следует добавить открывающую скобку, имя класса — родителя и закрывающую скобку:
TMy > Объявления областей видимости начинаются с двух пробелов и, следовательно, области видимости распологаются на одном уровне с идентификатором класса:
TMy > private
FMyData: Integer;
function GetData: Integer;
procedure SetData(Value: Integer);
public
published
property MyData: Integer read GetData write SetData;
end;
Оформление объявлений интерфейсов подчиняется тем же правилам, что и оформление классов. Отличие будет в использовании ключевых слов специфичных для интерфейсов
Ключевое слово type размещается без отступов, перечисление типов начинается с новой строки:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
Реализаця (Implementation) (Наверх)
Может содержать объявление подключенных модулей, дополнительные наборы директив компилятора, исходный код в виде процедур и функция. Например:
Закрывающий оператор и точку (end.) (A closing end and a period) (Наверх)
И конечно же в конце всего этого долен стоять оператор end. – что сведетельствует о окончании модуля.
Соглашение об именовании (Наверх)
Исключая зарезервированные слова и директивы, которые всегда пишутся в нижнем регистре, все идентификаторы Object Pascal должны использовать InfixCaps (Каждое слово начинается с большой буквы):
MyIdentif, MyFTPClass, NewModuleName;
Самое главное исключение для всех правил состоит в использовании оттранслированных заголовочных файлов С/С++. В этом случае всегда используются соглашения, принятые в файле источнике. Например будет использоваться WM_LBUTTONDOWN, а не wm_LButtonDown.
Именование (Наверх)
При именовании полей всегда необходимо использовать InfixCaps. Объявлять переменные только в приватных частях и использовать свойства для доступа к переменным. Для переменных использовать префикс F.
Имена всех локальных переменных должны подчиняться тем же правилам, которые установлены для именования полей, исключая префикс F.
В имени метода всегда должна содержаться команда к действию или глагольная фраза:
ShowStatus
DrawCircle
AddLayoutComponent
MouseButton; //Существительное, не описывает функцию
drawCircle; //Начинается с маленькой буквы
add_layout_component; //Используются символы подчерка
ServerRunning; //Глагольная фраза, но без команды
Обратите внимание на последний пример (ServerRunning) — непонятно, что делает этот метод, он может быть использован как для запуска сервера (лучше использовать StartServer) так и для проверки работы сервера (лучше использовать IsServerRunning).
Имена процедур или методов для установки/получения значений свойств должны составляться по правилу: для получения — Get+имя свойства; для установки — Set+имя свойства.
Методы для теста/проверки булевских свойств класса должны именоваться с префиксом Is+имя свойства.
IsResizable, IsVisible, IsServerRunning;
Исключение для Венгерской нотации делается в случае объявления перечислимого типа:
TBtnKind = (bkCustom, bkOK, bkCancel, bkHelp,bkYes, bkNo, bkClose, bkAbort, bkRetry,bkIgnore, bkAll);
bk обозначает ButtonKind;
Когда Вы подбираете имя переменной, то имейте в виду, что нужно избегать однобуквенных имен, кроме как для временных переменных и переменных цикла.
Переменные цикла именуются I и J. Другие случаи использования однобуквенных переменных это S (строка) и R (результат). Однобуквенные имена должны всегда использовать символ в верхнем регистре, но лучше использовать боле значимые имена. Также не рекомендуется использовать переменную l (эль), потому что она похожа на 1 (единица).
Зарезервированные слова (Наверх)
Зарезервированные слова и директивы должны быть все в нижнем регистре. Производные типы должны начинаться с большой буквы (Integer), однако string — это зарезервированное слово и оно должно быть в нижнем регистре.
Использование пустых строк (Наверх)
Пустые строки могут повысить читабельность путем группирования секций кода, которые логически связаны между собой. Пустые строки должны использоваться в следующих местах:
Использование пробелов(Наверх)
Язык Object Pascal является очень легким для понимания языком, поэтому нет особой необходимости в использовании большого количества пробелов. Следующие пункты дадут Вам понимание — в каком случае необходимо использовать пробелы.
Пробелы, запрещенные к использованию в следующих случаях:
Примеры правильного использования:
function TMyClass.MyFunc(var Value: Integer);
MyPointer := @MyRecord;
My > MyInteger := MyIntegerArray[5];
Примеры неправильного использования:
function TMyClass.MyFunc( var Value: Integer ) ;
MyPointer := @ MyRecord;
My > MyInteger := MyIntegerArray [ 5 ] ;
Использование отступов (Наверх)
Всегда необходимо использовать два пробела для всех уровней отступа. Другими словами, первый уровень отступает на два пробела, второй на четыре и так далее. Можно настроить табуляцию на ширину в 2 пробела и пользоваться табуляцией.
Существует несколько исключений из этого правила. Зарезервированные слова unit, uses, type, interface, implementation, initialization и finalization, они всегда должны примыкать к левой границе.
Перенос строк (Наверх)
Все строки должны быть ограничены 80 столбцами. Строки, длиннее чем 80 столбцов должны быть разделены и перенесены. Все перенесенные строки должны быть выровнены по первой строке и иметь отступ в два символа. Выражение begin всегда должно находиться на своей отдельной строке.
Никогда не разрывайте строку между параметром и его типом, кроме параметров, перечисляемых через запятую. Двоеточие для всех объявлений переменных не должно содержать перед собой пробелов и иметь один пробел после перед именем типа.
procedure Foo(Param1: Integer; Param2: Integer);
procedure Foo( Param :Integer; Param2:Integer );
Нельзя переносить строки в тех местах, где не допускаются пробелы, например между именем метода и открывающей скобкой или между именем массива и открывающей квадратной скобкой. Никогда нельзя помещать выражение begin на строку, содержащую другой код.
while (LongExpression1 or LongExpression2) do begin
// DoSomething
В случае с логическими операторами предпочтительнее будет следующий вариант:
Комментарии (Наверх)
Язык Object Pascal поддерживает два типа комментариев: блочные и однострочные. Общие правила по использованию комментариев могут быть следующими:
Блочные комментарии(Наверх)
Object Pascal поддерживает два типа блочных комментариев. Наиболее часто используемый блочный комментарий — это пара фигурных скобок: . Команда разработчиков Delphi предпочитает использовать этот комментарий как можно проще и как запасной. Используйте в таких комментариях пробелы для форматирования текста и не используйте символы зведочка «*». При переносе строк необходимо сохранять отступы и выравнивание