Ver Mensaje Individual
  #3  
Antiguo 29-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por vtdeleon
lo resolvi agregando el codigo de seleccionar todo en el eveno OnClick del edit.
El problema con esta solución es que nunca vas a poder deshacerte de la selección mediante clicks.

Cuando el edit no tiene el foco y das click en él, el texto queda seleccionado como es de esperarse. Pero ya teniendo el foco, lo que se espera es que si vuelves a dar click en él, se pierda la selección y el cursor se coloque donde diste el click.

Para resolver esto, en el evento OnClick deberías detectar si se tiene o no el foco, pero esto no es posible precisamente porque el evento OnEnter sucede antes del OnClick de manera que para cuando éste sucede ya se tiene el foco siempre.

La única manera en que yo he resuelto esto es derivando una componente de TEdit e interceptando directamente el mensaje WM_LBUTTONDOWN.

Para no tener que instalar una nueva componente coloca esta declaración antes de la declaración del formulario:


Código Delphi [-]
type
  TEdit = class(StdCtrls.TEdit)
  private
    procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
  end;

e implementa WMLButtonDown así:


Código Delphi [-]
procedure TEdit.WMLButtonDown(var Message: TWMLButtonDown);
begin
  if Focused then
    inherited
  else
  begin
    SelectAll;
    SetFocus;
  end;
end;

// Saludos
Responder Con Cita