Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Salto de Celdas y Filas con ENTER (https://www.clubdelphi.com/foros/showthread.php?t=1478)

Sóstrato 16-06-2003 22:24:24

Salto de Celdas y Filas con ENTER
 
Hola,
quiero saber como salto de fila (row) en un dbgrid con ENTER al final de la fila. Salto de celdas con ENTER y tambien quiero hacerlo con las filas.

jhonny 16-06-2003 22:35:01

Prueba este Trucomania:

Código:

begin
  if Key = #13 then                                               
    if not (ActiveControl is TDBGrid) then begin     
      Key := #0;                                                       
      Perform(WM_NEXTDLGCTL, 0, 0);               
    end
    else if (ActiveControl is TDBGrid) then               
      with TDBGrid(ActiveControl) do
        if selectedindex < (fieldcount -1) then           
          selectedindex := selectedindex +1
        else
          selectedindex := 0;
end;

recuerda poner la propiedad KeyPreview de la form a true.

marcoszorrilla 16-06-2003 23:02:01

Prueba con este otro código a ver que te parece:

Código:

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = vk_Return then
  begin
    if DBGrid1.SelectedIndex < Pred( DBGrid1.FieldCount  ) then
        begin
        DBGrid1.SelectedIndex :=DBGrid1.FieldCount  ;
        end
        else
        begin
        DBGrid1.SelectedIndex := 0;
        //Flecha abajo es decir nuevo registro.
        DBGrid1.Perform( wm_KeyDown, vk_Down, 0 );
        end;
    end;
end;

Un Saludo.

Roy 17-06-2003 02:13:17

...tampoco tengo mucho tiempo en Delphi, pero me llama la atención la cantidad de líneas para algo que parece tan sencillo. En otro lenguaje que uso (cada vez menos....) existe una propiedad de sesión que permite asignarle al ENTER la propiedad del TAB, o algo así. Por el tiempo que uno desee, el ENTER funciona tal como lo haría el TAB. ¿ Alguien conoce algo parecido ? ¿ que el ENTER 'simule' un TAB cuando necesite ?

Roy

marcoszorrilla 17-06-2003 08:03:33

Una cosa es que la tecla <Enter> actúe como Tab y otra lo que tu has preguntado que se refiere a una rejilla.

Si la tecla <Enter> simulara un <Tab> cuando pulses enter sobre un botón saltará al siguiente control y quedarían todos los botones inoperativos.

Fíjate en el código de Jhonny.

Bueno un saludo.

Diole cebada al mulo el buen cibulo........

"Sanmaniego"

Rox77 23-07-2003 11:44:44

Hola.

Yo queria hacer algo parecido ha esto pero en un Edit, me esplico.

En el evento OnKeyPress del Edit tengo algo asi:

if Key = #13 then
begin
Key:=#0;
Perform(CM_Dialog,VK_TAB,0); -->(creo q es esto jeje ;) )
end;

Pero el caso que yo lo que quiero saber es: para detectar la tecla intro se usa #13 para escape #27 pero para las flechas de dirección???? cual es el codigo. Ademas veo que usais los nombres de las virtual keys como VK_TAB, VK_RETURN etc...pero yo he intentado esto

if Key = VK_DOWN y me dice que tarari q te vi .... alguien me hecha una mano.

Marcoszorrilla usa Key = vk_return y parece q le funciona pero a mi me da un error el compilador cuando he puesto el vk_down.

Ademas me he fijado q la Key de OnKeypress es tipo char y sin embargo en OnKeyDown es tipo Word.... puede ser esto???

Gracias...Salu2.

marcoszorrilla 23-07-2003 18:12:13

The OnKeyDown handler can respond to all keyboard keys

Código:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key = VK_Down then
showMessage('Pulso flecha abajo');
end;

Un Saludo.

jachguate 23-07-2003 18:36:56

Debes tener en cuenta que contas con tres mètodos relacionados con la pulsación de teclas:

OnKeyDown
OnKeyPress
OnKeyUp

OnKeyDown se ejecuta cuando el usuario pulsa una tecla (practicamente cualquiera de teclado, con excepción de las teclas alt, shift ctrl y la de windows creo yo).

OnKeyUp se lanza cuando el usuario suelta la tecla.

Estos eventos son muy útiles para programar juegos, por ejemplo, y además traen un conjunto llamado ShiftState donde podes ver si el usuario tiene presionado shift, alt o ctrl (o cualquier combinación de ellas).

No recuerdo exactamente si OnKeyPress se ejecuta en medio de estos otros dos o luego de OnKeyUp, pero lo hará solamente con las teclas que tienen un código ascii asociado.

Hasta luego.

;)

Rox77 24-07-2003 12:14:46

Gracias... lo solucione con el OnKeyDown
poniendo

if key =vk_down then Table1.next;
if key= vk_up then table1.prior;

y me funciona a las mil maravillas era el evento... en onKeypress no se puede hacer esto no reconoce las constantes vk_ por la diferencia de tipos.

De nuevo Gracias a todos.

Por cierto esto lo uso en un Edit para recuperar el codigo de una tabla y debajo del edit tengo un grid q va listando el registro que se esta buscando en el edit si coincide o el mas parecido pero me gustaria hacerlo al estilo de las listas de Access en las qu vas tecleando y te sugiere (seleccionando solo el resto del texto) el campo que empieza por las letras q tu vas pulsando: no se si me entendeis->

si yo tengo en una tabla los codigos-> PATO PANTALON PATATA

y escribo en mi edit P en el edit automaticamente me aparece tras mi "P" ANTALON seleccionado y si pulso "R" me desaparece porque no hay ningun codigo que empieze con PR....

Esto como porras se hace??? ;)

Si alguien lo sabe que lo diga y no se lo guarde para el...jeje

Salu2.

marcoszorrilla 24-07-2003 15:39:11

En el evento OnChange del Tedit:
Código:

MiTabla.FindNearest([Edit1.Text]);
Es necesario que la tabla esté indexada por el campo que queremos hacer la búsqueda incremental.

Supongo que es esto lo que quieres.

Un Saludo.

Rox77 25-07-2003 16:42:46

Eso ya lo hago marcos a ver me explico .... tengo unos cuantos edit q uso para insertar lineas a una tabla

En el primer edit en el evento Onchange hago una busqueda en la tabla de articulos tal que asi

Table.FindKey[(Edit1.Text)] si esta busqueda encuentra lo que escribe el usuario en el edit lo muestra en los demas edit automaticamente y a la vez tengo debajo un grid q se va posicionando en el registro del edit...si la busqueda exacta falla el evento Onchange realiza una aproximada Table.FindNearest[(Edit1.Text)] lo cual posiciona el cursor en el registro mas parecido al que teclea el usuario en el edit.

Si el usuario pulsa intro (en el evento OnKeyPress ) simulo un Tab y ademas compruebo si la busqueda ha sido exacta y cargo los datos de la tabla a los edit esperando que introduzca que cantidad se quiere del articulo y si no es exacta cargo los datos de la busqueda aproximada.

Ademas en el evento OnKeyDown controlo que si el usuario pulsa las flechas de arriba o abajo es porq ha visto en el grid el articulo y lo selecciona del grib mientras cargo en los edit los datos de los articulos por los q se desplaza si pulsa intro pues ... le paso el control al edit de la cantidad.

Hasta aqui lo que hace mi aplicacion...y ahora lo que quiero que haga:

->>quiero que el edit se autocomplete con el codigo del articulo si existe mientras lo va tecleando (tipo access o el cuadro de busqueda del internet explorer o muchos otros...pero en un edit no en un lookupcombobox ni nada de eso) si el pulsa PA y el primer articulo de la base que coincide con PA es PATATA quiero que despues de PA le salga TATA seleccionado en el edit...y si sigue escribiendo y pulsa PAR y no hay ningun articulo que empieze por esas letras no muestre nada y cuando pulse intro solicite crearlo...no como hago ahora que cargo el mas parecido ..pero esq el mas parecido puede ser POTITOS....jeje.)


Creo que ahora esta mas claro...pufff...lo q pido.

Bueno lo he visto en aplicaciones comerciales asiq no puede ser imposible (p.ej: el TPV de IslaSoft hace lo que yo pido... como lo hace??? aaaaaaa....no se lo voy a preguntar a ellos no ;) )

Salud2.

marcoszorrilla 25-07-2003 19:29:57

Prueba con este código, no lo termino porque hoy es fiesta y estoy un poco vago pero creo que básicamente te puede servir:
Código:

  private
    { Private declarations }
    MyBuffer:String;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key in['A'..'z','Ñ','ñ']then
MyBuffer:=MyBuffer + Key;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = Vk_Back then
MyBuffer:=Copy(MyBuffer,1,Length(MyBuffer) -1);
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  if Table1.FindKey([MyBuffer]) then
  Edit1.Text:=Table1Nombre.AsString
  else
  begin
  Table1.FindNearest([MyBuffer]);
  Edit1.Text:=Table1Nombre.AsString;
  Edit1.SelStart:=Length(MyBuffer);
  Edit1.SelLength:=Length(Edit1.text);
  end;
end;

Un Saludo.


La franja horaria es GMT +2. Ahora son las 06:01:11.

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