Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   TEdit selecciona todo al recibir el foco pero se pierde con el click (https://www.clubdelphi.com/foros/showthread.php?t=24633)

Sirkius 28-08-2005 19:40:23

TEdit selecciona todo al recibir el foco pero se pierde con el click
 
Hola, tengo un problema que no he sabido resolver despues de buscar mucho por la ayuda y estos foros. Os explico: tengo un TEdit que debe seleccionarse todo al recibir el foco pero si lo recibe a traves de un click, se selecciona todo pero se pierde por el click (me explico, tiene lugar antes el evento de seleccionar todo por recibir el foco que el del click, el cual hace que se deseleccione todo).

Creo que la solucion pasaria por ignorar el click una vez tenga el foco, pero solo deberia ignorarlo esa vez...

Muchas gracias por adelantado que siempre me habeis sido de gran ayuda :)

vtdeleon 28-08-2005 20:56:30

Saludos

Tuve ese problemas y lo resolvi agregando el codigo de seleccionar todo en el eveno OnClick del edit.

roman 29-08-2005 02:23:53

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

vtdeleon 29-08-2005 02:35:47

Saludos

Gracias roman por el aclarandum

Sirkius 29-08-2005 11:02:33

Muchas gracias roman, es justo lo que queria.


La franja horaria es GMT +2. Ahora son las 07:17:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi