Вопрос

Я хотел бы запретить копирование, вырезание и вставку в моем TEdit. Как я могу это сделать?

Я попытался установить событие Key=NULL on KeyDown, когда CTRL + V был нажат на элементе управления, но это не сработало.

Это было полезно?

Решение

Вам нужно будет запретить отправку сообщений WM_CUT, WM_COPY и WM_PASTE на ваш TEdit. Этот ответ описывает, как это сделать, используя только Windows API. Для VCL может быть достаточно создать подкласс TEdit и изменить его свойство DefWndProc или переопределить его метод WndProc.

Другие советы

Назначьте это TEdit.OnKeyPress:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#22) or (Key=#3) then Key:=#0;   // 22 = [Ctrl+V] / 3 = [Ctrl+C]
end;

Я знаю, что это старый вопрос, но я добавлю то, что нашел. Оригинальный плакат почти имел решение. Это прекрасно работает, если вы игнорируете вырезание / копирование / вставку в событии нажатия клавиши вместо события нажатия клавиши. т.е. (сборщик c ++)

void __fastcall Form::OnKeyPress(TObject *Sender, System::WideChar &Key)
{
   if( Key==0x03/*ctrl-c*/ || Key==0x16/*ctrl-v*/ || Key==0x018/*ctrl-x*/ )
      Key = 0;  //ignore key press
}

Вы можете использовать некоторые глобальные программы, которые захватывают ярлыки и блокируют C-V C-C C-X, когда окно TEdit активно

Uses Clipbrd;

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  Clipboard.AsText := '';
end;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top