Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Sender que no envia.... (https://www.clubdelphi.com/foros/showthread.php?t=19859)

Phacko 29-03-2005 18:58:39

Sender que no envia....
 
Que tal a todos...

Tengo una duda, trabajo en un Form con varios controles y necesito combiar entre ellos ya sea al precionar enter o bien con las teclas de dirección (fechas), todo bien pero cuando necesito diferenciar entre los controles para abrir la lista de un TComboBox no me responde con Sender, diferencia bien el control pero no abre la lista, he aqui algunas lineas de codigo:

Else
If ((Key In[VK_DOWN,VK_RETURN]) And (ActiveControl Is TComboBox)) Then
TComboBox(Sender).DroppedDown:=True;
// CBMarca.DroppedDown:=true;

Alguien podria comentar algo al respecto??????

Gracias.

delphi.com.ar 29-03-2005 19:35:49

Cita:

Empezado por Phacko
Alguien podria comentar algo al respecto??????

Yo evaluaría/utilizaría sender para todo, o para nada:

Código Delphi [-]
If ((Key In[VK_DOWN,VK_RETURN]) And (Sender Is TComboBox)) Then
  TComboBox(Sender).DroppedDown:=True;

Saludos!

Phacko 29-03-2005 23:28:03

Gracias..Pero igual no funciona.
 
Pues cambie el codigo por el que me indicaste pero sigue igual, no funciona, faltara algun swith que activar o sobornar a algun duende dentro del compilador???

Que opinan????

roman 29-03-2005 23:33:53

Hasta ahora no has dicho en dónde manejas el código que muestras. Si lo haces, como creo, en el evento OnKeyPress del formulario entonces tienes que tomar la otra opción que propone Federico: ActiveControl en todos lados. Porque Sender es el formulario y no el control y en cualquier momento la línea

TComboBox(Sender).DroppedDown:=True;

te va a mandar un "Access violation".

// Saludos

Phacko 30-03-2005 17:43:34

En efecto...
 
Que tal???

Pues casi casi, Roman, el codigo lo tengo en el evento OnKeyDown del Form, no entendi muy bien lo que quieres decir con "ActiveControl en todos lados".

Gracias por su tiempo y ayuda.

roman 30-03-2005 17:52:58

O sea, el parámetro Sender identifica al control que manda el mensaje, que en general será el control al que está asociado el evento.

Como tú estás usando el evento OnKeyDown del formulario, entonces es éste el que entra como parámetro Sender y por tanto no sirve para lo que quieres.

Por otro lado ActiveControl identifica al control del formulario que tenga el foco del teclado.

Entonces, en tu código original debes omitir Sender en todos lados (la opción "para nada" de Federico) y usar ActiveControl:

Código Delphi [-]
If (Key in [VK_DOWN, VK_RETURN]) and (ActiveControl Is TComboBox) then
  TComboBox(ActiveControl).DroppedDown := true;

Tú usabas Sender en un lado y ActiveControl en otro pero en este caso Sender <> ActiveControl y por ello no funcionaba.

// Saludos


La franja horaria es GMT +2. Ahora son las 23:38:41.

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