Ver Mensaje Individual
  #4  
Antiguo 12-04-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Creo que estamos confundiendo las cosas, cuando copiamos o pegamos, ya sea usando el menú o utilizando alguna combinación de teclas, lo que llega al edit son los mensajes WM_COPY y WM_PASTE. En ningún momento llegan al edit las pulsaciones de esas teclas porque se procesan por windows mucho antes.

Para controlar cuando, y como, se copia y se pega lo que tenemos que hacer es interceptar los mensajes WM_COPY y WM_PASTE. Se puede hacer de varias maneras, pero ahora mismo se me ocurre que lo podemos hacer sustituyendo el WndProc del edit. Algo así:
Código Delphi [-]
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    AntWindowProc: TWndMethod;
    procedure MiWindowProc(var Message: TMessage);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MiWindowProc(var Message: TMessage);
begin
  case Message.Msg of
    WM_COPY:
      begin
         // Aqui lo que quieras
      end;
    WM_PASTE:
      begin
         // Aqui lo que quieras
      end;
    else // Si no es ninguno de los anterios llamamos al antiguo WndProc
      AntWindowProc(Message);
  end
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  AntWindowProc:= Edit1.WindowProc;
  Edit1.WindowProc:= MiWindowProc;
end;
Responder Con Cita