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 04-04-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Otra solución más siguiendo el ejemplo de egostar

Código Delphi [-]
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
   if Key = 9 then begin // La tecla TAB tiene el código ASCII 9
      if Tedit(Sender).Name = Edit1.Name then
         // pos es el uno
      else if Tedit(Sender).Name = Edit2.Name then
         // pos eso.
   end;
end;

LLegados a este punto, ahora en los demás TEdits, en su evento KeyUp elige el Edit1Keyup, por tanto todos los Tedits compartiran el mismo evento.

Si estas en el edit1, el parámetro Sender será el Edit1, si estas en el Edit32 pues el Sender será el Edit32 ... vamos... el objeto que desencadena el evento.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #2  
Antiguo 04-04-2006
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Post

Yo veo otras dos soluciones a este problema.

La primera es utilizar el evento OnKeyUp de cada Edit y usar el código que quieras para cada uno.

La otra es usar el siguiente código.

Código Delphi [-]
 
procedure TForm1.CMDialogKey(Var Msg: TWMKEY) ;
begin
   if Msg.CharCode = VK_TAB then begin
      if ActiveControl.Name = 'Edit1' then begin
         ShowMessage('TAB Presionado en TEdit1');
      end;
      if ActiveControl.Name = 'Edit2' then begin
         ShowMessage('TAB Presionado en TEdit2');
      end;
   end;
   inherited;
end;

Espero ayude y si alguien sabe de otra solución mas elegante será bienvenida.

Saludos

Última edición por egostar fecha: 04-04-2006 a las 17:55:59.
Responder Con Cita
  #3  
Antiguo 04-04-2006
JELIRM JELIRM is offline
Miembro
 
Registrado: feb 2005
Ubicación: EL SALVADOR
Posts: 124
Poder: 22
JELIRM Va por buen camino
Cool Tengo una Solucion Pero!!!.....

Hola,
Gracias Egostar mira que casualidad que algo asi hice para solucionar el problema lo unico que lo hice con el foco, como lo plantee anteriormente que queria saber como capturar en objeto se encontraba mi foco y inventando lo encontre!!!!!!!! el codigo es el siguiente:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;

procedure FormCreate(Sender: TObject);
private
procedure CMDialogKey(Var Msg: TWMKey) ;
message CM_DIALOGKEY;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
procedure TForm1.CMDialogKey(Var Msg: TWMKEY) ;
begin
if (ActiveControl is TEdit) and (Edit1.Focused) and
(Msg.Charcode = VK_TAB) then begin
ShowMessage('La Tecla TAB en Edit 1 esta Presionada?') ;
inherited;
end
else
if (ActiveControl is TEdit) and (Edit2.Focused) and
(Msg.Charcode = VK_TAB) then begin
ShowMessage('La Tecla TAB en Edit 2 esta Presionada?') ;
inherited;
end;

end;

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.

El unico problema que le veo a este forma de resolverlo es que si yo quiero que el comportamiento con la tecla Tab para otros Tedit que yo no quiera que hagan ninguna accion sino que sean normales como un TEdit sin alteracion, no se puede tendria que ponerle oblligatoriamente una accion a cada uno.
Tu mencionabas dos Soluciones mas una que es similar a la que estoy exponiendo aqui y la otra como seria?????, Es de evaluar talvez me convenga mas la otra.

Gracias.. FORO
---Las Caidas te Hacen Aprender a Caminar--
Responder Con Cita
  #4  
Antiguo 04-04-2006
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Post

Cita:
Empezado por JELIRM
Tu mencionabas dos Soluciones mas una que es similar a la que estoy exponiendo aqui y la otra como seria?????, Es de evaluar talvez me convenga mas la otra.
Bueno, hasta aqui hemos visto el uso de presionar la tecla TAB dentro de la forma, la otra opción que te dije es que a cada TEdit le coloques su propia rutina, es decir:

Código Delphi [-]
 
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
   if Key = 9 then begin // La tecla TAB tiene el código ASCII 9
     ShowMessage('Tecla TAB presionada!!!');
   end;
end;
 
procedure TForm1.Edit2KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
   if Key = 13 then begin // La tecla ENTER tiene el código ASCII 13
     ShowMessage('Tecla ENTER presionada!!!');
   end;
end;

Saludos
Responder Con Cita
  #5  
Antiguo 04-04-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.504
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
JELIRM, creo que con 72 mensajes en el foro ya no eres un novato y deberías utilizar los TAGs de DELPHI cuando añadas código a los mensajes. Que esto lo hagan los nuevos pase, pero los veteranos...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 05-04-2006
JELIRM JELIRM is offline
Miembro
 
Registrado: feb 2005
Ubicación: EL SALVADOR
Posts: 124
Poder: 22
JELIRM Va por buen camino
Cool

gracias por el regañito, pues fijate que nunca lo he hecho pero te prometo que a la proxima lo haré!!!!!
Responder Con Cita
  #7  
Antiguo 19-06-2008
Avatar de GaaK
GaaK GaaK is offline
Miembro
 
Registrado: oct 2005
Ubicación: Trujillo - Peru
Posts: 31
Poder: 0
GaaK Va por buen camino
Hola todos, he retomado este antiguo debate porque no logro entender...

Sea un Form que contiene varios Edits (u otros componentes que puedan enfocarse vía TAB).

La idea
: En Edit1 quiero mostrar el código de la tecla presionada, para ello tengo los dos procedures de dicho Edit así:

Código Delphi [-]
KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
 begin
   Edit1.Text := 'Scancode: ' + IntToStr(Key) + ' $' + IntToHex(Key,3);
 end;
 
 KeyPress(Sender: TObject; var Key: Char);
 begin
   { KeyPress isn't called if F1..F12 }
   case Key of
     { 48..57, 96..105 }
     '0'..'9'  : Edit1.Text := Key; //esta línea es para otros propósitos...
   end;
 end;
... mis rutinas funcionan bien y reconocen todas las teclas EXCEPTO la tecla TAB.
Intento reconocerla vía KeyDown (VK_TAB) o en KeyPress(#9) y siempre por siempre se enfoca el siguiente componente (Edit2 por ejemplo).

Lo que quiero: Es que me reconozca la pulsación de TAB y me muestre en Edit1 su código (9) y que termine, así como ocurre al presionar un número por ejemplo.

He intentado lo mencionado arriba (CMDialogKey) y me muestra el mensaje al presionar TAB, pero mi foco sigue moviéndose, quiero que se quede quieto.


Espero sus sabios comentarios

Gracias

- Gaak -
__________________
L'Gaak dice
Responder Con Cita
  #8  
Antiguo 19-06-2008
Avatar de GaaK
GaaK GaaK is offline
Miembro
 
Registrado: oct 2005
Ubicación: Trujillo - Peru
Posts: 31
Poder: 0
GaaK Va por buen camino
Antes que me regañen, ya conseguí la solución:

Código Delphi [-]
  private
    { Private declarations }
    procedure CMDialogKey(Var Msg: TWMKey); message CM_DIALOGKEY;

{ ... }

procedure TFormProp.CMDialogKey(var Msg: TWMKEY) ;
begin
   if (ActiveControl.Name='Edit1') then
     case Msg.Charcode of
       VK_TAB: { NOP };
     end
   else inherited; { normal for other keys }
end;
... ahora, al lado de VK_TAB intenté colocarle VK_LWIN o VK_CAPITAL y no funciona para ellos ... en fin ya conseguí lo que quería, pero si alguien puede explicar como detener (así como TAB) las teclas como CAPS, INICIO u otros, bienvenido sea.

Gracias de todas maneras.

- Gaak -
__________________
L'Gaak dice
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
Hacer una pausa fuera del evento OnTimer y sin usar Sleep DarkByte Varios 9 28-06-2007 05:08:00
en que evento del dbgrid puedo hacer un operacion matematica . . . Shidalis Varios 13 26-08-2005 23:25:06
como hacer que una columna del dbgrid contenga un valor de un TEdit en cada celda Shidalis OOP 2 02-08-2005 13:05:35
Pasar el valor de un TEdit dentro de un StringGrid a otro TEdit que está fuera atirado Varios 4 11-09-2004 20:13:48
TEdit RoyTan Varios 5 26-11-2003 22:12:33


La franja horaria es GMT +2. Ahora son las 02:27:39.


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