Jump to content


Photo

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


  • Please log in to reply
6 replies to this topic

#1 Master23

Master23

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 230 posts
  • LocationSanto Domingo

Posted 28 September 2010 - 07:39 PM

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
  • 4266 posts
  • LocationCosta Rica

Posted 28 September 2010 - 07:46 PM

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
  • 2137 posts

Posted 28 September 2010 - 08:28 PM

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
  • 2092 posts
  • LocationRepública Dominicana

Posted 28 September 2010 - 08:40 PM

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
  • 4483 posts
  • LocationVenezuela

Posted 29 September 2010 - 02:56 PM

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
  • 4107 posts
  • LocationMadrid - España

Posted 29 September 2010 - 03:05 PM

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
  • 2092 posts
  • LocationRepública Dominicana

Posted 29 September 2010 - 06:26 PM

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.