¿Cómo impedir que el usuario pueda seleccionar texto en un Memo? Establecer la propiedad Enabled en falso tiene indeseables efectos secundarios...

Impidiendo que el usuario seleccione texto en un control Memo

Copyright © 2000 Ernesto De Spirito

Storage Library - Guarde la configuración de su aplicación

La forma más sencilla sería establecer la propiedad Enabled del control Memo (o Edit) en False para que el control no pueda recibir eventos, pero esto tiene la contra que primero el usuario no puede hacer scroll y segundo que el texto inhabilitado se ve mal.

Para impedir que el usario pueda escribir en el memo, asginamos True a su propiedad ReadOnly.

Para que el usuario no pueda seleccionar texto con el ratón, generamos el manejador del evento MouseMove del control y escribimos el siguiente código:

procedure TForm1.Memo1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  if ssLeft in Shift then
    Memo1.SelLength := 0;
end;

Para impedir que el usuario pueda hacer una selección usando el teclado, generamos los manejadores de los eventos KeyDown y KeyUp asignando las propiedades OnKeyDown y OnKeyUp al mismo procedimiento:

procedure TForm1.Memo1KeyDownUp(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if (ssShift in Shift) and (Key in [VK_LEFT, VK_RIGHT, VK_UP,
      VK_DOWN, VK_PRIOR, VK_NEXT, VK_HOME, VK_END]) then
    Key := 0;
end;
JfControls Library - para Delphi y C++ Builder