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 19-05-2017
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.009
Poder: 20
oscarac Va por buen camino
salto entre campos

tengo este codigo
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Edit1Exit(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1Exit(Sender: TObject);
begin
if Edit1.Text = '1' then
  Edit2.Enabled := False
else
  Edit2.Enabled := True;


end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #27 then
  begin
    key := #0;
    close;
  end;

  if key = #13 then
  begin
    Perform(WM_NEXTDLGCTL,0,0);
    key := #0;
  end;

end;

end.


prueben darle enter a los campos...
el keypreview esta en true

se dan cuenta que cuando el primer edit es 1, el control no pasa al edit 3, tengo que darle 2 veces enter para que recien el edit 3 tenga el foco???
a alguien mas le sucede esto?
o estoy haciendo algo mal??

como se puede controlar los saltos dependiendo de el enabled de un campo?
__________________
Dulce Regalo que Satanas manda para mi.....

Última edición por oscarac fecha: 19-05-2017 a las 05:51:29. Razón: mas explicacion
Responder Con Cita
  #2  
Antiguo 19-05-2017
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Comprueba el "tab order" de tus componentes. Es posible que no sea el que esperas y que del Edit 1 pase a otro control o edit y después al 2. Aquí tienes un artículo en Stack Overflow que habla de ello.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 19-05-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

La situación se produce por que el evento OnKeyPress se dispara antes que el evento OnExit y dentro del primer evento, se pasa a Edit2 antes de que este quede deshabilitado por el código del segundo.

Para obtener el comportamiento que deseas, tendrías que hacer algo como esto:
Código Delphi [-]
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  ...
  if key = #13 then
  begin
    Edit2.Enabled := Edit1.Text <> '1'; // si es = '1' -> deshabilitar
    Perform(WM_NEXTDLGCTL, 0, 0);  
    key := #0;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 19-05-2017
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.009
Poder: 20
oscarac Va por buen camino
Gracias por la respuesta, pero seria un poco complejo validar los campos en ese evento
existe alguna otra opcion?

Cita:
Empezado por ecfisa Ver Mensaje
Hola.

La situación se produce por que el evento OnKeyPress se dispara antes que el evento OnExit y dentro del primer evento, se pasa a Edit2 antes de que este quede deshabilitado por el código del segundo.

Para obtener el comportamiento que deseas, tendrías que hacer algo como esto:
Código Delphi [-]
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  ...
  if key = #13 then
  begin
    Edit2.Enabled := Edit1.Text <> '1'; // si es = '1' -> deshabilitar
    Perform(WM_NEXTDLGCTL, 0, 0);  
    key := #0;
  end;
end;

Saludos
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #5  
Antiguo 19-05-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por oscarac Ver Mensaje
Gracias por la respuesta, pero seria un poco complejo validar los campos en ese evento
existe alguna otra opcion?
En principio lo veo difícil tál como está planteado ya que al activar la propiedad KeyPreview, el formulario recibe los eventos de teclado antes que el control activo.

¿ Podrías poner algúna otra situación de ejemplo como para evaluar otras posibilidades ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 19-05-2017
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.009
Poder: 20
oscarac Va por buen camino
tengo varios edit asi como en el ejemplo
la idea es que los edits siguientes se activen o desactiven dependiendo del valor del edit primario

estoy pensando en usar setfocus, o jugar con los OnEnter de cada edit
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #7  
Antiguo 19-05-2017
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.009
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Comprueba el "tab order" de tus componentes. Es posible que no sea el que esperas y que del Edit 1 pase a otro control o edit y después al 2. Aquí tienes un artículo en Stack Overflow que habla de ello.
si, esta correcto, pero aun asi, estoy verificando lo que menciona ecfisa
parece que el keypress se activa primero que el exit
__________________
Dulce Regalo que Satanas manda para mi.....
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Resta entre Campos shoulder MySQL 3 16-01-2013 21:00:38
como obtener un unico valor entre dos campos de folio de sql server uper MS SQL Server 7 23-05-2011 23:05:45
Salto del Cursor entre Paneles Er0s Varios 5 01-10-2010 19:30:42
Conexion entre campos de distintas tablas eudy.net Conexión con bases de datos 3 09-12-2007 08:36:56
Resta entre campos datetime ale_metall Varios 3 22-10-2007 21:15:19


La franja horaria es GMT +2. Ahora son las 16:39:07.


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