Recent

Author Topic: Некорректно копирует символы из TMemo. Incorrectly copies characters from TMemo  (Read 335 times)

Leonid

  • Newbie
  • Posts: 2
Добрый день!
Не получается корректно скопировать символ из TMemo в Lazarus 2.0.8.
Начать решил с простого, разместил на форме Memo1, Memo2, Button1 и написал следующий программный код:

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
    S:string;
begin
  i:=0;
  S:=copy(Memo1.Lines.strings,1,1);
  Memo2.Lines.Add(S);
end;

Однако при запуске программы, если ввожу в Memo1 любые несколько русских букв (Russian letter), например "абв", нажимаю Button1, то в Memo2 появляется "?".
При этом, если ввожу в Memo1 любые несколько цифр, например "123", или несколько любых английских символов, например "abc", то в Memo2 появится "1" или "a" соответственно (т.е. все корректно).
Если в программном коде поменяю на:
S:=copy(Memo1.Lines.strings,1,2);
то в Memo2 будет появляться два числа или латинских символа, а русская буква одна.
Это ошибка или я что-то не так делаю?
Сравнивал с delphi7, там такого нет.
« Last Edit: June 28, 2020, 04:37:07 pm by Leonid »

skalogryz

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2497
    • havefunsoft.com
LCL кодировка это UTF8.
Огрубляя - все английские буквы это 1 символ в string, все русские буквы это 2 символа.

Если тебе нужно скопировать выбранный в TMemo текст, что проще использовать свойство SelText.

Если тебе нужно скопировать произвольный текст из TMemo, то придёться парсить UTF8 символы

Самый простой для тебя вариант это добавить модуль LazUTF8 и вызывать UTF8Copy.
она как-раз занимается парсингом utf8
Code: Pascal  [Select][+][-]
  1. uses ...  LazUTF8;
  2. ...
  3. procedure TForm1.Button1Click(Sender: TObject);
  4. var i:integer;
  5.     S:string;
  6. begin
  7.   i:=0;
  8.   S:=UTF8copy(Memo1.Lines.strings,1,1);
  9.   Memo2.Lines.Add(S);
  10. end;
« Last Edit: June 28, 2020, 04:35:22 pm by skalogryz »
Patron Cocoa Widgetset development https://www.patreon.com/skalogryz

Leonid

  • Newbie
  • Posts: 2
Получилось, спасибо большое!

 

TinyPortal © 2005-2018