I have a OnChange handler that allows you to enter only certain characters in Edit (Cyrillic, Latin, no spaces, i.e. one word).
procedure TForm1.Edit2Change(Sender: TObject); var symbols, textInEdit: String; i: Integer; begin symbols := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZабвгдеёжзийклмнопрстуфхцчшщъьыэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЫЭЮЯ'; textInEdit := Edit2.Text; for i := UTF8Length(textInEdit) downto 1 do // Берем строку с новыми символами begin if (UTF8Pos(UTF8Copy(textInEdit, i, 1), symbols) = 0) then // Если хотя бы один символ отсутствует в наборе символов... begin Edit2.Text := textBefore; // записываем в Edit прежнюю строку Edit2.SelStart := curPos + selLen; // и устанавливаем курсор в прежнюю позицию Break; end else Edit2.SelStart := curPos + (UTF8Length(textInEdit) - UTF8Length(textBefore) + selLen); // Устанавливаем курсор при вставке (с выделением или без) end; textBefore := Edit2.Text; // Строка до входа в обработчик end; procedure TForm1.Edit2Click(Sender: TObject); begin curPos := Edit2.SelStart; // Определение позиции курсора selLen := Edit2.SelLength; // Длина выделения end; procedure TForm1.Edit2Enter(Sender: TObject); begin curPos := Edit2.SelStart; // Определение позиции курсора selLen := Edit2.SelLength; // Длина выделения end; procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin curPos := Edit2.SelStart; // Определение позиции курсора selLen := Edit2.SelLength; // Длина выделения end; Everything seems to work fine, but in some cases when closing the application, an error pops up: "The project ... caused the exception class 'External: SIGSEGV' at 40F298," that is, going beyond the array. I'm wondering - why does this error occur when you close the application? Example: I enter the word mice, select the letter i, press the space (forbidden character), i, as expected, remains in place, but when I close the application, an error crashes.