Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-11-2005
Avatar de Durbed
Durbed Durbed is offline
Miembro
 
Registrado: ago 2004
Posts: 166
Poder: 20
Durbed Va por buen camino
Pasar al siguiente Edit al llegar a maxlength

Tengo un formulario lleno de TEdits y quiero que al llegar a su capacidad maxima, pase el foco al siguiente edit, asi para todos los edit que tengo de un dentro de un panel. Hay alguna forma de hacerlo de forma general para no repetir el codigo para cada componente? o mejor aun, existe algun componente que lo tenga implementado?

Muchas gracias.
__________________
Intentando hacer algo con Delphi 7 y Firebird 1.5
Responder Con Cita
  #2  
Antiguo 08-11-2005
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
si quieres tener muchas líneas en un edit, es mejor que utilizes el TMemo, o el TRichEdit...

de cualquier manera, el código general tendría que ser algo así como:
Tendrías que colocar el código en el primer TEdit y todos los demás apuntando a el mismo evento.
Código Delphi [-]
 procedure TFrm.edtChange(Sender: TObject);
 begin
   inherited;
  if length((Sender as TEdit).Text >= (Sender as TEdit).MaxLength then
   SelectNext(ActiveControl as tWinControl, True, True );
 end;

no he probado este código y/o tal vez alguien tenga una mejor idea, pero de cualquier manera creo que sería mejor que utilizaras un Tmemo o un TRichEdit
__________________

Responder Con Cita
  #3  
Antiguo 08-11-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Durbed
...Hay alguna forma de hacerlo de forma general para no repetir el codigo para cada componente?
Puedes crear un único evento y asignar el mismo a todos los componentes.

Código Delphi [-]
   if (Sender is TEdit) then begin
     if (TEdit(Sender).MaxLength <> 0) then begin
       if (Length(TEdit(Sender).Text) = TEdit(Sender).MaxLength) then begin
         Self.Perform(WM_NEXTDLGCTL, 0{Next}, 0);
       end;
     end;
   end;

Si no quieres hacer la asignación "a mano" puedes hacerla por código al crear/visualizar el form por ejemplo (utilizando el OnChange); Es lo mismo que harías "a mano" asignando todos los eventos al mismo procedimiento, pero de forma automática.

Código Delphi [-]
   for i := 0 to (Panel1.ControlCount - 1) do begin
     if (Panel1.Controls[i] is TEdit) then begin
       TEdit(Panel1.Controls[i]).OnChange := _GoNext;
     end;
   end;

La otra opción es crear un componente (derivado de TEdit o TCustomEdit) y añadirle la propiedad que te gestione éste comportamiento. La implementación básicamente es la misma realizada arriba.
Puedes implementar el comportamiento sobreescribiendo el método Change de TCustomEdit.

Código Delphi [-]
   procedure Change; override;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 08-11-2005
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Hola:

Yo prefiriría usar setfocus en caso de no ser siempre el próximo control quien deba tener el control (Foco).

Hasta Luego -
__________________
No todo es como parece ser...
Responder Con Cita
  #5  
Antiguo 08-11-2005
Avatar de Durbed
Durbed Durbed is offline
Miembro
 
Registrado: ago 2004
Posts: 166
Poder: 20
Durbed Va por buen camino
Ya esta solucionado, muchas gracias Neftali el código
Código Delphi [-]
  if (Sender is TEdit) then begin
     if (TEdit(Sender).MaxLength <> 0) then begin
       if (Length(TEdit(Sender).Text) = TEdit(Sender).MaxLength) then begin
         Self.Perform(WM_NEXTDLGCTL, 0{Next}, 0);
       end;
     end;
   end;

Funciono perfectamente
__________________
Intentando hacer algo con Delphi 7 y Firebird 1.5
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:37:12.


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
Copyright 1996-2007 Club Delphi