Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-04-2012
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Un comportamiento más útil para ComboBox

Hola a todos. Gracias por leerme.

Me gustaría obtener un comportamiento más adaptado a mis pretensiones en un ComboBox, pero no sé cómo hacerlo. Llevo intentándolo y buscando en el foro unos días, pero nada. Agradecería si alguien me puede ayudar.

Esto es lo que pretendo:

Poder desplazarme con las flechas arriba/abajo sin que salte el OnChange ni el OnClck hasta que pulse Enter o haga Click en un item concreto.

Agradecería cualquier idea.

Saludos.
Responder Con Cita
  #2  
Antiguo 15-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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
Cita:
Esto es lo que pretendo:

Poder desplazarme con las flechas arriba/abajo sin que salte el OnChange ni el OnClck hasta que pulse Enter o haga Click en un item concreto.
Hola jhonalone.

Creo que no entiendo la lógica de lo que buscas, pero voy a responder estríctamente a tu consulta:

En realidad sería sólo hasta que se pulse Enter, ya que en teoría OnClick estaría desactivado y por lo tanto no debería ser capturado:
Código Delphi [-]
...
// Desactivar eventos OnClik y OnChange
procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.OnClick:= nil;
  ComboBox1.OnChange:= nil;
end;
...
// Activar o desactivar eventos OnClick y OnChange
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  // si es Enter y es el item en concreto (2 por ej.) => activar eventos
  if (Key =#13)and(ComboBox1.ItemIndex = 2) then
  begin
    ComboBox1.OnClick:= ComboBox1Click;
    ComboBox1.OnChange:= ComboBox1Change
  end
  else  // si no => desactivar eventos
  begin
    ComboBox1.OnClick:= nil;
    ComboBox1.OnChange:= nil
  end;
end;
Pero no visualizo la aplicabilidad de ese código... Concretamente, ¿ Que es lo que tratas de hacer ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 15-04-2012
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Gracias, Ecfisa, por estar siempre pendiende de ayudar.

Me voy a extender un poco más, a ver si consigo explicarme mejor.

Si en un Combo tienes código en el evento, OnClick, y mueves el ratón arriba y abajo por los items desplegados, el Combo va redibujando el item por el que pasa en azul oscuro, si haces Click sobre uno de ellos activa OnClick, pero si no haces click lo deja azul. Aunque parece que está seleccionado, si pulsas Enter no hace nada, aunque hayas puesto alguna instrucción en OnKeyDown.
Código Delphi [-]
procedure TFClien.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key=vk_RETURN
     then SpeedButton3.Click;
end;

Pero si intentas desplazarte con las flechas genera un evento ONClick, aplicado al item siguiente al marcado hacia arriba o hacia abajo, dependiendo de la flecha que utilices.

Curiosamente, si haces Click en la tecla Return o Enter, no la reconoce, he probado a incluir un Beep si pulsa enter y no lo hace, ni en OnKeyDown ni en OnkeyPress con #13.

He hecho tantas pruebas ya, que no se lo hace ni cuándo se activa cada evento.

Lo que pretendo es muy sencillo:
Si utilizo las teclas para desplazarme, hacerlo libremente y, si pulso Enter, seleccionar el item iluminado. Y si no me desplazo con las flechas, sino con el cursor, que el item iluminado si lo dejo y pulso enter lo seleccione y genere el código para OnKeyDown u OnKeyPress, me da igual. Y si hago Click sobre un item genere el OnClick corrrespondiente.

No estoy seguro si lo vas a entender, porque esta noche ya estoy muy cansado, y he hecho tantas pruebas... que lo voy a dejar.

Si no me he explicado bien, dímelo y mañana lo intentaré de nuevo más despejado.

Saludos muy cordiales.
Responder Con Cita
  #4  
Antiguo 16-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 jhonalone.

Ahora creo haber entendido.

En el evento OnClick podrías interceptar la tecla que se presionó y por ejemplo si es VK_UP o VK_DOWN salir:
Código Delphi [-]
procedure TForm1.ComboBox1Click(Sender: TObject);
begin
 if (GetKeyState(VK_DOWN)<0)or(GetKeyState(VK_UP)<0) then Exit;
  (* aquí el codigo del evento OnClick *)
  //...
  ShowMessage('OnClick')
end;

Del mismo modo en el evento OnChange:
Código Delphi [-]
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
   if (GetKeyState(VK_DOWN)<0)or(GetKeyState(VK_UP)<0) then Exit;
  (* aquí el codigo del evento OnChange *)
  //...
  ShowMessage('OnChange')
end;
Seguramente quieras controlar otras teclas, revisá Virtual key codes en la ayuda de Delphi.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 17-04-2012
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Muchas gracias, Ecfisa.

¡LA PRIMERA MISION ESTÁ CUMPLIDA!

Al controlar las teclas en el evento OnClick, como me has indicado, puedo desplazarme sin problemas por los items del Combo con las teclas arriba y abajo. He observado que, además, el texto del Combo va cambiando, lo que me indica, si no me equivoco, que ha sido seleccionado correctamente el item al cambiar las flechas.

Ahora viene la segunda parte.

Una vez que tengo seleccionado el item correspondiente con las flechas, ¿como debo hacer para que al pulsar la tecla ENTER, INTRO o RETURN, que suelen causar el mismo efecto, el programa realice las instrucciones que yo le indique?

Tengo instrucciones en los eventos OnKeyDown y OnKeyPress, que copio a continuación, y ninguno realiza acción alguna cuando pulso ENTER o RETURN,
sin embargo, cuando pulso la tecla ESC sí me cierra el Combo.


Código Delphi [-]
procedure TFClien.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13
     then SpeedButton3Click(nil);
if key = #27 then Combobox1.Visible:=False;
end;

Código Delphi [-]
procedure TFClien.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key=vk_RETURN
     then SpeedButton3Click(nil);
end;

Ninguno de los dos eventos, realiza la acción. Es como si no hubiera pulsado la tecla ENTER (RETURN en el Virtual Key Code)

Comprendo que estoy abusando mucho de tu sabiduría y buena disposición a ayudar en el foro, si alguna vez resulto pesado, por favor házmelo saber, y no te seguiré preguntando. Me siento tan mal, que parece que te pido que me hagas mis tareas.

Muchas gracias y recibe toda mi consideración y un afectuoso saludo.

Última edición por Casimiro Notevi fecha: 17-04-2012 a las 16:12:15.
Responder Con Cita
  #6  
Antiguo 17-04-2012
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
¡ Vaya |

Veo que el código no salió correctamente.

Mis disculpas.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Muy util - Trucos Firefox. marcoszorrilla La Taberna 24 27-08-2011 14:49:41
Extraño comportamiento de un ComboBox r1d2m3 OOP 2 09-07-2011 17:36:45
comportamiento extrano para QrExpr .... en QuickReport. uper Impresión 1 15-11-2005 23:20:24
Es útil saber idiomas. marcoszorrilla Humor 2 10-06-2004 08:56:09
Les regalo esta dll, que es muy util Trigger OOP 3 27-02-2004 01:04:07


La franja horaria es GMT +2. Ahora son las 04:17:33.


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