PDA

Ver la Versión Completa : Identificar el Tabulador


AGAG4
07-09-2004, 02:02:42
Solo quiero saber con que número ó palabra puedo referenciar el TAB, esto lo quiero por que solo valido el Enter=13 en el OnkeyDown, y ya probe esto pero no me funciono: if (key=13) or (key=VK_TAB) then
de ante mano Gracias....

Neftali [Germán.Estévez]
07-09-2004, 11:22:10
Solo quiero saber con que número ó palabra puedo referenciar el TAB, esto lo quiero por que solo valido el Enter=13 en el OnkeyDown
Creo que no vas a poder hacerlo en un TEdit estandard, sino que la única forma va a ser derivando el control e intentando capturar alguno de los mensajes de tecla, ya que en los eventos de los controles estandard, cuando se lanza el evento esa tecla ya ha sido filtrada.

En cuanto a la forma de referirte a la tecla TAB esa es la correcta, sólo que en éste punto no te sirve como te he comentado antes.

Si derivas el componente TEdit puedes redefinir el mensaje


procedure WMKeyUp(var Message: TWMKeyUp); message WM_KEYUP;

y programar algo como lo que estabas haciendo tú:


// comprobación
if (Message.CharCode = VK_TAB) then begin
MessageDlg('Se ha pulsado la tecla TAB', mtInformation, [mbOK], 0)
end;
// método heredado
inherited;


verás como en éste caso sí funciona.

AGAG4
07-09-2004, 21:04:07
Sr. Germán Estévez, ya probe lo que me dijo perp en donde se declará el siguiente procedimiento:
procedure WMKeyUp(var Message: TWMKeyUp); message WM_KEYUP;

Ya lo declare en el public de la forma, en private, me lo acepta pero me marca error "Unsatisfied Forward", por lo que añado el cuerpo de este mismo procedimiento y después me marca el error en "message WM_KEYUP;", en que estoy mal????

Neftali [Germán.Estévez]
08-09-2004, 09:34:04
Bueno, como la unit es pequeña la pongo completa.
Este sería el .PAS correspondiente a un nuevo componente derivado de un Edit que detecta la punsación de la tecla TAB.


unit editTAB;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls;
type
teditTAB = class(tedit)
private
{ Private declarations }
procedure WMKeyUp(var Message: TWMKeyUp); message WM_KEYUP;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;
implementation
uses
Dialogs;
procedure Register;
begin
RegisterComponents('NoSirve', [teditTAB]);
end;
{ teditTAB }
procedure teditTAB.WMKeyUp(var Message: TWMKeyUp);
begin
if (Message.CharCode = VK_TAB) then begin
MessageDlg('TAB keyUp', mtInformation, [mbOK], 0)
end;
inherited;
end;
end.

Cosas que debes mirar:
(1) Si te fijas en el método register yo lo instalo en la paleta NoSirve, cambia ésto con el nombre de la paleta donde desees que te aparezca (Standard, Additional,...)
(2) Al redefinir el mensaje se muestra un cuadro de diálogo y psteriormente se llama a inherited (para que haga el comportamiento standard, es decir pasar al siguiente control como hace el TAB siempre).
(3) Para que sea funcional, puede instalarlo en un package existente (el de usuario) o crearte un package nuevo (File/New/Other/Package) añadirle ésta Unit e instalarlo.

Un saludo.

AGAG4
08-09-2004, 16:16:01
Gracias por su respuesta, lo voy a probar.....!!!!

AGAG4
08-09-2004, 19:42:54
Entonces tendría que hacerlo por cada componente que tengo, lo que pasa es que mezclo los BdEdit, Edit, ComboBox y ListBox, No es posible Cachar el TAB de otra forma, es decir que cualquier componente sin necesidad de crear nuevos componentes ó bien de los mismos que uso, modificarlos, agregandoles el código que me proporcionó usted????

Neftali [Germán.Estévez]
09-09-2004, 11:26:09
Si lo quieres hacer con todos (eso no lo habías dicho antes...:mad: ) creo que entonces habría que apuntar al formulario; Supongo que si pruebas con la propiedad KeyPreview del Form no funcionará (pruébalo por si acaso); Habría que intentar hacer algo similar en el form. Si la cosa no funciona como último caso siempre tienes derivar los 4 o 5 componentes que utilizas de la misma forma que se ha hecho con el Edit (de todas formas verás que nos es mucho trabajom, ya que sólo tiene unas pocas líneas).