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.
¿Cuál es el código que se utiliza para saltar todos los edits al press enter?
Comenzado por
Master23
, sep 28 2010 07:39
6 respuestas en este tema
#1
Escrito 28 septiembre 2010 - 07:39
#2
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.
Saludos
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.
Saludos
#3
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
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type MisEdits = array of Tedit; type TForm1 = class(TForm) Edit1: Tedit; Edit2: Tedit; Edit3: Tedit; procedure FormCreate(Sender: TObject); procedure PasarFoco(Sender: TObject; var Key: Word; Shift: TShiftState); private FEdits: MisEdits; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i, c, k: Integer; begin c := 0; for i := 0 to ComponentCount - 1 do begin if (Components[i].ClassType = Tedit) then c := c + 1; //Obtenemos la dimensión del array end; SetLength(FEdits, c); for k := 0 to ComponentCount - 1 do begin if (Components[k].ClassType = Tedit) then FEdits[k] := Tedit(Components[k]); ///Asignamos loe edit al array end; end; procedure TForm1.PasarFoco(Sender: TObject; var Key: Word; Shift: TShiftState); var i: Integer; begin for i := low(FEdits) to High(FEdits) do if Tedit(Sender).Name = FEdits[i].Name then begin if Key = vk_down then if i < High(FEdits) then FEdits[i + 1].SetFocus; if Key = vk_Up then if i > Low(FEdits) then FEdits[i - 1].SetFocus; end; end; end.
#4
Escrito 28 septiembre 2010 - 08:40
Saludos.
En el evento OnKeyDown del Formulario pones esto:
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.
En el evento OnKeyDown del Formulario pones esto:
delphi
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin Case Key Of 13 : PostMessage(Handle, Wm_NextDlgCtl, 0, 0); End; //end case 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.
#5
Escrito 29 septiembre 2010 - 02:56
Solo para agregar, para que el evento en el formulario funcione debe tener la propiedad KeyPreview en TRUE.
#6
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...
Saludos.
Pero si queremos VK_UP o VK_DOWN...
delphi
procedure TForm1.FormCreate(Sender: TObject); begin KeyPreview := True; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_UP then begin keybd_event(VK_SHIFT, 0, 0, 0); keybd_event(VK_TAB, 0, 0, 0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0); end else if Key = VK_DOWN then begin keybd_event(VK_TAB, 0, 0, 0); keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0); end; end; end.
Saludos.
#7
Escrito 29 septiembre 2010 - 06:26
Solo para agregar, para que el evento en el formulario funcione debe tener la propiedad KeyPreview en TRUE.
Saludos.
Pensé que lo había mencionado...