Asi, de repente, se me ocurre que interceptes el mensaje WM_COPY y WM_CUT. Algo así:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
OldWindowProc: TWndMethod;
procedure NoCopy(var Msg: TMessage);
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
OldWindowProc:= Memo1.WindowProc;
Memo1.WindowProc:= NoCopy;
end;
procedure TForm1.NoCopy(var Msg: TMessage);
begin
if not((Msg.Msg = WM_COPY) or (Msg.Msg = WM_CUT)) then
OldWindowProc(Msg);
end;
end.