Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-06-2003
Sóstrato Sóstrato is offline
Miembro
 
Registrado: may 2003
Posts: 13
Poder: 0
Sóstrato Va por buen camino
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.
__________________
Sóstrato Vásquez
www.adidesa.com
Responder Con Cita
  #2  
Antiguo 16-06-2003
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
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.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 16-06-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 17-06-2003
Roy Roy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Entre Ríos/Argentina
Posts: 22
Poder: 0
Roy Va por buen camino
Question

...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
Responder Con Cita
  #5  
Antiguo 17-06-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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"
Responder Con Cita
  #6  
Antiguo 23-07-2003
Avatar de Rox77
Rox77 Rox77 is offline
Miembro
 
Registrado: may 2003
Ubicación: Caceres
Posts: 44
Poder: 0
Rox77 Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 23-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 23-07-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 24-07-2003
Avatar de Rox77
Rox77 Rox77 is offline
Miembro
 
Registrado: may 2003
Ubicación: Caceres
Posts: 44
Poder: 0
Rox77 Va por buen camino
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.
Responder Con Cita
  #10  
Antiguo 24-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
Responder Con Cita
  #11  
Antiguo 25-07-2003
Avatar de Rox77
Rox77 Rox77 is offline
Miembro
 
Registrado: may 2003
Ubicación: Caceres
Posts: 44
Poder: 0
Rox77 Va por buen camino
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.
Responder Con Cita
  #12  
Antiguo 25-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
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


La franja horaria es GMT +2. Ahora son las 15:00:21.


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