function THIRichEdit._Get(var Item: TData; var Val: TData): Boolean;
var
Ind, aInd, L: Integer;
Text: string;
begin
Ind := ToIntIndex(Item);
Result := (Ind >= 0) and (Ind < Control.Count);
if Result then
begin
aInd := Control.Perform(EM_LINEINDEX, Ind, 0); // Определить абсолютный номер начального символа в нужной строке
L := Control.Perform(EM_LINELENGTH, aInd, 0); // Посчитать длину строки от начального символа до конца строки
if L > 0 then
begin
Inc(L, 2); // Размер буфера с запасом SizeOf(Word) (иначе не работает)
SetLength(Text, L);
PWord(Pointer(Text))^ := L; // В первом Word буфера - размер буфера
L := Control.Perform(EM_GETLINE, Ind, Longint(Pointer(Text)));
if (L <> 0) and (Text[L] = #13) then Dec(L); // Выдаёт также символ #13 в конце
if (L <> Length(Text)) then SetLength(Text, L); // В L - действительная длина строки (обычно меньше выделенного размера)
end
else
Text := '';
dtString(Val, Text);
end;
end;
Может у Netspirit-a и есть уже исправленная версия, но я ее не видел.
--- Добавлено в 2022-02-11 00:15:40
Исправления на SVN.