Показать сообщение отдельно
  #3  
Старый 09.03.2020, 18:51
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну правильно. Где второе условие на длинну строки?
Код:
if Length(Edit1.Text) > 23 then begin
  for i:=length(Edit1.Text) downto 1 do
    if (Edit1.Text[i]= ' ') And (i >= 23) then
       Edit2.Text := copy(Edit1.Text, i+1, Length(Edit1.Text)-i);
Но тут еще один подводный камень, если после переноса встретится еще один пробел, то будет опять перенос. Вообще, я бы решал проблему так:
1. Делаем функцию, которая реализует перенос по нужной длинне и возвращает результат как список строк.
2. В месте вызова уже используем результат.
Код:
procedure stringSplit(S : String; SplitLen : Integer) : TStringList;
var
  I : Integer;
  Buf : String;
begin
  Result := TSTringList.Create;
  Buf := '';
  For I := 1 To Length(S) Do
    Begin
      If (S[i] = ' ') And (I >=SplitLen) 
        Then
           Begin
             Result.Add(Buf);
             Buf := '';
           End
        Else
          Buf := Buf + S[i];
    End;
  If Buf <> '' Then Result.Add(Buf);
end;

Ну и пример использования:
Код:
S := '...'; // тут типа длинная строка задается
SL := stringSplit(S,23);
Edit1.Text := SL[0];
If SL.Count>1 Then Edit2.Text := SL[1] Else Edit2.Text := '';
SL.Free; // не забываем освободить память...

PS. Вообще, обычно такого рода перенос делается по длинне, меньшей, чем указанная, но там код посложнее будет, хотя тоже не самая сложная задача...
Ответить с цитированием