У меня логичный вопрос: Вы в поле "Edt3" вводите значение в каком виде? HEX? Тогда вам надо считывать из Edit по ДВА символа и переводить их в байты, а не просто преобразовывать...
Код:
Procedure TForm1.btn1Click(Sender: TObject);
Var
crc: Word;
i: Integer;
b: Byte;
Begin
If edt3.text = '' Then // Лишняя функция Length была
ShowMessage('Поле данных пусто');
Else Begin // Если поле данных было не пусто - продолжаем
crc := $FFFF; // crc := 0; ?
i := 1;
While i<Length(edt3.Text) Do Begin
b := StrToInt('$' + edt3.Text[i] + edt3.Text[i + 1]); // Преобразуем 2 символа в байт
crc := crc16(b, crc);
inc(i, 2); // Смещаем позицию на 2 символа
End;
End;
edt2.Text := IntToHex(crc, 0);
End;