Как отключить копирование / вставку в TEdit
-
20-08-2019 - |
Вопрос
Я хотел бы запретить копирование, вырезание и вставку в моем 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;