Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
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
  #2  
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
  #3  
Antiguo 19-05-2017
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
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
  #4  
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
  #5  
Antiguo 19-05-2017
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
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
  #6  
Antiguo 19-05-2017
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.471
Poder: 21
newtron Va camino a la fama
Hola.

Yo uso este código en el FormKeyDown y no tengo ningún problema:

Código Delphi [-]
procedure Formulario.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin

  case Key of

    VK_UP: begin
      SelectNext(ActiveControl, False, True); 
      Key := 0;
    end;

    VK_DOWN: begin
      SelectNext(ActiveControl, True, True);
      Key := 0;
    end;

  end;

Saludos
__________________
Be water my friend.
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.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
Hola.

Yo uso este código en el FormKeyDown y no tengo ningún problema:

Código Delphi [-]
procedure Formulario.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin

  case Key of

    VK_UP: begin
      SelectNext(ActiveControl, False, True); 
      Key := 0;
    end;

    VK_DOWN: begin
      SelectNext(ActiveControl, True, True);
      Key := 0;
    end;

  end;

Saludos

De funcionar si funciona, pero me parece curioso que en el primer toque de tecla (Arriba o Abajo) el foco se pierde cuando se deshabilita un edit

chequea esto y miralo, te daras cuenta que presionas la tecla hacia abajo, los edits 2,3,4 se deshabilitan y el foco se pierde

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    edt1: TEdit;
    edt2: TEdit;
    edt3: TEdit;
    edt4: TEdit;
    edt5: TEdit;
    edt6: TEdit;
    procedure edt1Exit(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.edt1Exit(Sender: TObject);
begin
  edt2.Enabled := edt1.Text = '2';
  edt3.Enabled := edt1.Text = '2';
  edt4.Enabled := edt1.Text = '3';
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case Key of

    VK_UP: begin
      SelectNext(ActiveControl, False, True);
      Key := 0;
    end;

    VK_DOWN: begin
      SelectNext(ActiveControl, True, True);
      Key := 0;
    end;
end;
end;

end.
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #8  
Antiguo 19-05-2017
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
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



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 20:00:38
como obtener un unico valor entre dos campos de folio de sql server uper MS SQL Server 7 23-05-2011 22:05:45
Salto del Cursor entre Paneles Er0s Varios 5 01-10-2010 18:30:42
Conexion entre campos de distintas tablas eudy.net Conexión con bases de datos 3 09-12-2007 07:36:56
Resta entre campos datetime ale_metall Varios 3 22-10-2007 20:15:19


La franja horaria es GMT +2. Ahora son las 12:14: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