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 14-07-2005
Johnny Q Johnny Q is offline
Miembro
 
Registrado: may 2005
Ubicación: Colombia
Posts: 172
Poder: 19
Johnny Q Va por buen camino
DBLookupComboBox1.Perform

Un cordial saludo a todos.

La verdad es que nunca he tenido mucho manejo de los mensajes de Windows, y la verdad en la siguiente instrucción (que Koder me aconsejo en un hilo anterior):

DBLookupComboBox1.Perform(WM_KEYDOWN, VK_DOWN, 0);

o en otras de tipo similar, no entiendo el valor 0 (que en la referencia de Delphi aparece como LParam) que significa.

Agradezco cualquier información al respecto
Responder Con Cita
  #2  
Antiguo 15-07-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Todos los mensajes de la VCL tienen esos 3 parámetros. Si alguno no se utiliza, se le da un cero.

Perform (m:Tmessage, HParam:integer, Lparam:integer)

M es el mensaje que se va a mandar, en este caso se indica que es la presion de una tecla WM_KEYDOWN, pero tambien podría ser WM_KEYUP (por ejemplo)

HParam, es tambien nombrada como High Param, parte alta del parámetro, que tambien es un entero, y en este caso, se dice la tecla que se va a pulsar, (flecha abajo).

Lparam, se conoce como Low Param, parte baja del parámetro, en algunos casos se utiliza y en otros no. Cuando no se utiliza, se le da el valor 0.

Un ejemplo en el que los 3 parámetros tienen información relevante es el siguiente:

Si usamos Perform(wm_keydown, vk_tab,1) es identico a presionar la tecla tabulador, y pasar el foco al siguiente control.

En el caso de Perform(wm_keydown, vk_tab,-1) haría el equivalente a Shift+tab, es decir, enviar el foco al control que tiene un taborder inferior. Aqui compruebas que el valor de Lparam si es relevante, ya que dependiendo de su valor se hace una cosa u otra.


(que conste que lo de vk_tab lo digo de memoria, igual son valores, -1, 0 o bien 0, 1 )

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 15-07-2005
Johnny Q Johnny Q is offline
Miembro
 
Registrado: may 2005
Ubicación: Colombia
Posts: 172
Poder: 19
Johnny Q Va por buen camino
Thumbs up

Gracias Lepe por tu respuesta, quiero confirmar si entendí los valores que puede tomar LPARAM: 0, 1 ó -1.

Saludos...
Responder Con Cita
  #4  
Antiguo 15-07-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Johnny Q
los valores que puede tomar LPARAM: 0, 1 ó -1.
No.

Hagamos algunas aclaraciones.

Los mensajes WM_XXX, realmente no son parte de la VCL, sino que forman parte del sistema de mensajes del sistema operativo.Windows se comunica con las ventanas enviando estos mensajes y cada ventana reacciona según sus necesidades.

La VCL traduce este sistema de mensajes en un sistema de eventos (OnKeyDown por ejemplo) pero deja abierta la posibilidad de acceder directamente al envío de mensajes de Windows con métodos como Perform.

Los parámetros de Perform corresponden a los parámetros de la función SendMessage de la API de Windows y sus nombres clásicos son WParam y LParam. La W y la L vienen de Word y Long, refiriéndose a los tipos de datos (Word un enterode 16 bits y Long un entero de 32 bits) aunque esto quedó para la historia ya que actualmente ambos son enteros de 32 bits.

Los valores de WParam y LParam, tal como indica Lepe, dependen del mensaje en específico y pueden ser muy variados. En ocasiones representan en realidad punteros a estructuras de datos con más información.

En el caso específico de WM_KEYDOWN, el valor de los parámetros, según el SDK de Windows es:

Cita:
wParam
Specifies the virtual-key code of the nonsystem key

lParam
Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table.

0-15
Specifies the repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative.

16-23
Specifies the scan code. The value depends on the OEM.

24
Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.

25-28
Reserved; do not use.

29
Specifies the context code. The value is always 0 for a WM_KEYDOWN message.

30
Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is zero if the key is up.

31
Specifies the transition state. The value is always zero for a WM_KEYDOWN message.
En el SDK de Windows puedes ver los valores posibles para cada mensaje WM_XXX.

// Saludos
Responder Con Cita
  #5  
Antiguo 15-07-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Muy interesante
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #6  
Antiguo 15-07-2005
Johnny Q Johnny Q is offline
Miembro
 
Registrado: may 2005
Ubicación: Colombia
Posts: 172
Poder: 19
Johnny Q Va por buen camino
Smile

Muchas gracias Roman, estudiare mas a fondo el tema con base en la explicación tuya.

Saludos...
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 07:51:51.


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