Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-09-2012
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 19
radenf Va por buen camino
Muchas gracias Casimiro Notevi

Por cierto tu fama te precede y me parece muy bien que exijas que las normas del foro sean cumplidas por todos.

No logré hacer funcionar tu código.
Seguiré intentándolo para lograr reducir dicha acción, ya que mi programa actualmente totaliza más de 5.600 líneas de código.
Te agradezco nuevamente tu aporte y tus enseñanzas.

Salu2
Responder Con Cita
  #2  
Antiguo 24-09-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.681
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
¿Has puesto el breakpoint para saber por qué no entra en la condición?
Responder Con Cita
  #3  
Antiguo 24-09-2012
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 19
radenf Va por buen camino
Lo hice y los breakpoint aparecen con un check verde y un valor =0, pero no se modifica la posición de la selección de el DBGrid al apretar las teclas.

Salu2

Última edición por radenf fecha: 24-09-2012 a las 00:48:07.
Responder Con Cita
  #4  
Antiguo 24-09-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.681
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
¿Pero dónde tecleas?, ese código funcionará si estás tecleando en el propio dbgrid.
Cámbialo al form, por ejemplo:

Código Delphi [-]
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);  // controlar teclas pulsadas a nivel del Form
begin
  if (ActiveControl=dbgrid1) then  // si el dbgrid tiene el control/foco
    if key in ['A'..'Z','a'..'z'] then          
      tabla1.locate('nombre', key, [locaseinsensitive,lopartialkey]);
end;
Responder Con Cita
  #5  
Antiguo 24-09-2012
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 19
radenf Va por buen camino
Estimado Casimiro Notevi :

Realizé las modificaciones que sugeriste y no funciona.
Respecto a tu pregunta no tecleo en ninguna parte en especial, el DBGrid siempre tiene el foco porque ocupa gran parte del Form y está configurado para que al entrar el puntero del mouse tome el foco. La idea es que al apretar cualquier tecla alfabética, el DBGRid se posicione en el primer registro que comienze con la letra de la tecla presionada.
Por el momento me quedaré con mi código, mientras encuentro como abreviarlo.
Agradezco toda tu preocupación y desinteresada colaboración.

Saludos y muchas gracias
Responder Con Cita
  #6  
Antiguo 24-09-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola radenf.

El código que te sugirió Casimiro hace exáctamente lo que deseas. También coincido con él, que el problema pasa por donde estas realizando la captura del evento de teclado.

Para asegurarte que el evento de teclado es capturado correctamente proba de este modo:
Código Delphi [-]
...
procedure El_Form.FormCreate(Sender: TObject);
begin
  // el formulario recibe el evento de teclado antes que el control activo
  KeyPreview := True;  // asignable desde el Object Inspector
end;

procedure El_Form.FormKeyPress(Sender: TObject; var Key: Char);
begin
  // ¿ El control activo es el DBGrid y se presionó una letra ?
  if (ActiveControl = El_DBGrid) and (Upcase(Key) in['A'..'Z']) then
     Tabla_o_Query.Locate('NOMBRE_DEL_CAMPO', Key, [loPartialKeylo, CaseInSensitive]); // posicionar
end;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 24-09-2012
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 19
radenf Va por buen camino
Muchas gracias ecfisa.

Tienen toda la razón. El código no funcionaba porque el DBGrid estaba con la propiedad rowselect en True. Al ponerla en falso realiza perfectamente la selección requerida.
Gracias a ti y a Casimiro Notevi por sus aportes.
Poblema resuelto.

Salu2
Responder Con Cita
  #8  
Antiguo 27-05-2014
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 416
Poder: 17
bulc Va por buen camino
Key en KeyDown Vs. Key en KeyUp/KeyPress

Cita:
Empezado por ecfisa Ver Mensaje
Hola radenf.

El código que te sugirió Casimiro hace exáctamente lo que deseas. También coincido con él, que el problema pasa por donde estas realizando la captura del evento de teclado.

Para asegurarte que el evento de teclado es capturado correctamente proba de este modo:
Código Delphi [-]
...
procedure El_Form.FormCreate(Sender: TObject);
begin
  // el formulario recibe el evento de teclado antes que el control activo
  KeyPreview := True;  // asignable desde el Object Inspector
end;

procedure El_Form.FormKeyPress(Sender: TObject; var Key: Char);
begin
  // ¿ El control activo es el DBGrid y se presionó una letra ?
  if (ActiveControl = El_DBGrid) and (Upcase(Key) in['A'..'Z']) then
     Tabla_o_Query.Locate('NOMBRE_DEL_CAMPO', Key, [loPartialKeylo, CaseInSensitive]); // posicionar
end;
...

Saludos.
Hola. Tal vez deberíais mencionar que no es lo mismo usar el KeyDown que el KeyPress o el KeyUp. el evento onKeyDown gestiona todas las teclas, pero sólo tiene traducción directa para las teclas Virtual Key con prefijo VK. Tales como VK_RETURN, VK_END, etc. Es us valor Word y por tanto requiere más vueltas para obtener el valor de la tecla cuando es letra o número. En cambio el KeyPress o KeyUp dan el valor ASCII de la tecla. Pongo el link, sobre el tema, que he encontrado: http://delphi.about.com/od/adptips2006/qt/vkey2char.htm
No es tan fácil como pensaba. Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Simular tecla @ pulsada angelmt API de Windows 7 27-04-2010 02:39:45
Saber cuando una tecla sigue pulsada angelmsf Varios 3 22-04-2010 01:36:27
Posicionarse en un DBgrid Ubed Varios 1 02-10-2007 17:17:11
Saber si una tecla esta pulsada? fefe13 Varios 9 02-02-2006 18:06:56
LO de la tecla pulsada fefe13 Varios 1 01-02-2006 18:29:19


La franja horaria es GMT +2. Ahora son las 20:04:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi