nesco писал(а):
Если не трудно.procedure THICopy._work_doCopy;
var str:string;
Pos,Count:integer;
begin
str := ReadString(_Data,_data_Str,'');
if str <> '' then begin
Pos := ReadInteger(_Data, _data_Position, _prop_Position);
Count := ReadInteger(_Data, _data_Count, _prop_Count);
case _prop_Direction of
1: Pos := Length(str) - Count - Pos + 2;
end;
if Pos <= 0 then begin
Inc(Count, Pos-1);
Pos := 1;
end;
_hi_CreateEvent(_Data, @_event_onCopy, Copy(str,Pos,Count));
end;
end;
1. case _prop_Direction of
1: Pos := Length(str) - Count - Pos + 2;
2. Вся комбинация должна выполнятся внутри case 1: ... end;
Стало быть нужно сделать так:
case _prop_Direction of
1:
begin
.......
end;
end;
Но логичней сделать так:
if _prop_Direction = 1 then
begin
.......
end;
Отсчёт в строке начинается с нуля то и позицию при отрицательном значении ставим Pos := 0;
Это необъяснимо, похоже с бодуна: Length(str) - Count - Pos + 2 зачем вычитать это дело из длины строки, когда это работает внутри условия отрицательной позиции???
И это тоже костыли:
if Pos <= 0 then begin
Inc(Count, Pos-1);
Pos := 1;
end;
значит Count + Pos(значение отрицательное). а позицию приравнять началу строки, то бишь нулю.
Раз мы елозим в районе нуля, по условию проверки, то надо писать везде (Count-1) лучше в скобках для наглядности.
В архиве ровно так и сделано.