Ir al contenido


Foto

¿Cuál es el código que se utiliza para saltar todos los edits al press enter?


  • Por favor identifícate para responder
6 respuestas en este tema

#1 Master23

Master23

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 230 mensajes
  • LocationSanto Domingo

Escrito 28 septiembre 2010 - 07:39

Lo que pasa es que no recuerdo el código que se usa para saltar de edit en edit sin tener que escribirlo en el evento de cada edit por ejemplo if key=vk_down  baja al 2 si es arriba lo mismo etc,como hago que salte de edit en edit sin tener que escribirlo en cada uno , establecer eso a cada edit  me toma demasiado tiempo y más cuando son proyectos que manejan mucha entrada de  información casi siempre me toma mucho tiempo,agradezco de antemano,gracias.
  • 0

#2 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 28 septiembre 2010 - 07:46

Hola
Y no serviria reconocer los edit con tComponent y hacer un solo procedimiento que lo llame?.
Bueno, es lo que se me ocurre, pero a esta hora y con un vinito no esperes mucho. (b)
Saludos
  • 0

#3 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 28 septiembre 2010 - 08:28

El siguiente código encuentra los edit del form los pasa a un array y pasa el foco con las teclas arriba y abajo según el orden de creación. Hay que compartir el procedimiento PasarFoco en el evento OnKeyDown de todos los TEdit.



delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls;
  8.  
  9. type
  10.   MisEdits = array of Tedit;
  11.  
  12. type
  13.   TForm1 = class(TForm)
  14.     Edit1: Tedit;
  15.     Edit2: Tedit;
  16.     Edit3: Tedit;
  17.     procedure FormCreate(Sender: TObject);
  18.     procedure PasarFoco(Sender: TObject; var Key: Word; Shift: TShiftState);
  19.   private
  20.     FEdits: MisEdits;
  21.     { Private declarations }
  22.   public
  23.     { Public declarations }
  24.   end;
  25.  
  26. var
  27.   Form1: TForm1;
  28.  
  29. implementation
  30.  
  31. {$R *.dfm}
  32.  
  33. procedure TForm1.FormCreate(Sender: TObject);
  34. var
  35.   i, c, k: Integer;
  36. begin
  37.   c := 0;
  38.   for i := 0 to ComponentCount - 1 do
  39.   begin
  40.     if (Components[i].ClassType = Tedit) then
  41.       c := c + 1;  //Obtenemos la dimensión del array
  42.   end;
  43.   SetLength(FEdits, c);
  44.   for k := 0 to ComponentCount - 1 do
  45.   begin
  46.     if (Components[k].ClassType = Tedit) then
  47.       FEdits[k] := Tedit(Components[k]);  ///Asignamos loe edit al array
  48.   end;
  49. end;
  50.  
  51. procedure TForm1.PasarFoco(Sender: TObject; var Key: Word; Shift: TShiftState);
  52. var
  53.   i: Integer;
  54. begin
  55.   for i := low(FEdits) to High(FEdits) do
  56.     if Tedit(Sender).Name = FEdits[i].Name then
  57.     begin
  58.       if Key = vk_down then
  59.         if i < High(FEdits) then
  60.           FEdits[i + 1].SetFocus;
  61.       if Key = vk_Up then
  62.         if i > Low(FEdits) then
  63.           FEdits[i - 1].SetFocus;
  64.     end;
  65. end;
  66.  
  67. end.


  • 0

#4 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 28 septiembre 2010 - 08:40

Saludos.

En el evento OnKeyDown del Formulario pones esto:


delphi
  1. procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  2.   Shift: TShiftState);
  3. begin
  4. Case Key Of
  5.   13 : PostMessage(Handle, Wm_NextDlgCtl, 0, 0);
  6. End; //end case
  7. end;



Utilice un Case por si se desea capturar más de una tecla por ejemplo VK_DOWN.

Te aconsejo que pongas ese código en el formulario padre. (y) ;)
  • 0

#5 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 29 septiembre 2010 - 02:56

Solo para agregar, para que el evento en el formulario funcione debe tener la propiedad KeyPreview en TRUE.  ^o|
  • 0

#6 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 29 septiembre 2010 - 03:05

Me pregunto si simplemente con pulsar VK_TAB o VK_TAB+VK_SHIFT valdría.

Pero si queremos VK_UP o VK_DOWN...


delphi
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. begin
  3.   KeyPreview := True;
  4. end;
  5.  
  6. procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  7.   Shift: TShiftState);
  8. begin
  9.   if Key = VK_UP then
  10.   begin
  11.     keybd_event(VK_SHIFT, 0, 0, 0);
  12.     keybd_event(VK_TAB, 0, 0, 0);
  13.     keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
  14.     keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);
  15.   end
  16.   else if Key = VK_DOWN then
  17.   begin
  18.     keybd_event(VK_TAB, 0, 0, 0);
  19.     keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);
  20.   end;
  21. end;
  22.  
  23. end.



Saludos.
  • 0

#7 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 29 septiembre 2010 - 06:26

Solo para agregar, para que el evento en el formulario funcione debe tener la propiedad KeyPreview en TRUE.  ^o|


Saludos.

Pensé que lo había mencionado... (y)
  • 0




IP.Board spam blocked by CleanTalk.