@felix
В Delphi можно запретить копирование в буфер обмена, перехватив сообщение WM_COPY. Для этого нужно переопределить обработчик сообщений (WndProc) для нужного элемента управления (например, TForm, TMemo или TEdit) и перехватить сообщение WM_COPY.
Пример кода для запрета копирования в буфер обмена для элемента TMemo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure Memo1WndProc(var Message: TMessage);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Memo1WndProc(var Message: TMessage);
begin
if (Message.Msg = WM_COPY) or (Message.Msg = WM_COPYDATA) then
Exit; // просто игнорируем сообщения WM_COPY и WM_COPYDATA
inherited;
end;
end.
|
Этот код перехватывает сообщения WM_COPY и WM_COPYDATA для элемента TMemo и просто игнорирует их. Обработчик WndProc вызывается автоматически, когда приложение получает сообщения от операционной системы.
Таким образом, пользователь не сможет скопировать текст из TMemo в буфер обмена, нажимая сочетание клавиш Ctrl+C. Однако пользователь всегда может выделить текст в TMemo и перетащить его в другое приложение, используя мышь.