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 это все, что вам обычно требуется.
Тем не менее, TMemo.lines.Add метод добавляет строку к заметке . с помощью CRLF, поэтому, если вы изучаете вывод заметки, в нем, естественно, будут символы конца строки. Без этого текст просто продолжался бы на одной строке.
Автор: J. Размещён: 15.03.2017 12:48
2 плюса
5273 Репутация автора
Я не думаю, что вы видите то, во что вы верите.
Когда вы добавляете строку в TMemo, вы неявно добавляете CR + LF, поэтому вы удаляете их, но затем добавляете их обратно. Если бы вы этого не сделали, при открытии содержимого в Notepad ++, как вы это делаете, будет пустой пробел. линии, а вы их не видите.
Итак, я думаю, что вы успешно удаляете CR + LF, вы просто не понимаете этого.
Так что если Вы хотите сделать текст (Caption) элемента TLabel в две строки, то это можно сделать следующим образом:
Label1.Caption := ‘Первая строка’ + #13#10 + ‘Вторая строка’;
Комбинация «#13#10» — это комбинация возврата каретки и символа новой строки. «#13» — это ASCII-эквивалент значения CR (carriage return — возврат каретки) ; «#10» представляет собой LF (line feed — признак новой строки) .
Я хочу создать строку, которая охватывает несколько строк, чтобы присвоить свойство 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, но тогда вы получите предупреждение компилятора (но он все равно будет компилироваться).
На стороне, трюк , который может быть полезен:
Если вы держите несколько строк в TStrings, вы просто должны использовать Text свойство TStrings как в следующем примере.
И вы получите свой лейбл многострочных .
Написать ( ‘Hello’ + sLineBreak + ‘Мир!’);
Я не имею копию Delphi в руки, но я абсолютно уверен , если установить свойство WordWrap к истинному и авторазмеру свойство ложно оно должно обернуть любой текст , который вы поместите его в размере вы делаете ярлык. Если вы хотите , чтобы разрыв строки в определенном месте , то это могло бы работать , если вы установите вышеуказанные параметры и вставить из текстового редактора .
Надеюсь это поможет.
Иногда я не хочу загромождать мой код пространство, особенно для статической наклейки. Для того, чтобы просто иметь это определиться с формой, введите текст метки на форме, а затем щелкните правой кнопкой мыши в любом месте на одной и той же форме. Выберите «Просмотр в виде текста». Теперь вы будете видеть все объекты, как дизайн, но, как только текст. Прокрутка вниз или выполнить поиск текста. Когда вы найдете его, изменить заголовок, так это выглядит примерно так:
Подпись = ‘Line 1’ # 13’Line 2 ‘# 13’Line 3’
# 13 означает порядковый номер 13, или для ASCII возврата каретки. Chr (13) та же идея, CHR () изменяет число к порядковому типу.
Обратите внимание, что нет запятой в этой конкретной грани Delphi, и «=» используется вместо «: =». Текст для каждой строки заключен в одиночных кавычках.
После того, как вы закончите, щелкните правой кнопкой мыши еще раз и выберите «Просмотр в виде формы». Теперь вы можете сделать любое форматирование, такие как полужирный, правильно обосновывать и т.д. Вы просто не можете повторно редактировать текст на форме или вы потеряете ваши разрывы строк.
Я также использую «Просмотреть как текст» для нескольких изменений, когда я просто хочу, чтобы прокрутить и делать замены и т.д. Quick.