Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Funcionamiento extraño tecla rapida y tbutton (https://www.clubdelphi.com/foros/showthread.php?t=43480)

calogero 12-05-2007 03:14:35

Funcionamiento extraño tecla rapida y tbutton
 
Hola que tal compañeros !!!

Tengo una preguntita, a ver si saben la respuesta,

resulta que tengo un botón eliminar con la tecla de accesso rapido es decir asi (&Eliminar) se supone que si se presiona alt+E debe activarse este botón y asi lo hace, pero también se activa sin presionar la tecla Alt, resulta que al presionar solamente la tecla E, ya hice pruebas y no tengo codigo que interfiera, solo tengo ese botón y un dbgrid, y creo que son los dbgrid los que me provocan ese funcionamiento, en otros formularios del sistema sucede lo mismo, si alguien sabe la respuesta o algún comentarios de lo que crea que pueda ser bienvenido.

bueno gracias y hasta pronto.

cHackAll 12-05-2007 22:01:37

Solucion
 
Bueno, cuando un boton tiene el foco pues con solo apretar la tecla con "e" estando tu Caption con "&Eliminar" realizará el evento OnClick, te aconsejo revisar el orden de las propiedad de los objetos TabOrder, y tambien TabStop...

Ej. si tienes un TEdit (por ejemplo) que tiene el foco y pulsas "e" no pasará nada, si tienes otro boton y tiene el foco y haces lo mismo no pasara nada.

Suerte

dec 12-05-2007 22:07:09

Hola,

Cita:

Empezado por cHackAll
Bueno, cuando un boton tiene el foco pues con solo apretar la tecla con "e" estando tu Caption con "&Eliminar" realizará el evento OnClic (...)

Por las pruebas que hize sucede incluso si el botón no tiene el foco. Y, por otro lado, independientemente del o los "DBGrid".

cHackAll 12-05-2007 22:14:07

Huuyyy
 
Estan seguros? tengo dudas! osea:

La ventana solo tiene un DBGrid y un Boton, el boton NO tiene el foco y pulsando la tecla realiza el OnClick???? si??????

dec 12-05-2007 22:33:03

Hola,

Así parece, salvo que el foco del usuario esté en un control que admita caracteres, es decir, si está en un "TMemo", lógicamente cuando pulses la tecla "e" se escribirá en el "TMemo", pero, si hay dos botones, y uno de ellos tiene como tecla "aceleradora" la "e", y el foco del usuario está en el otro botón (por ejemplo), entonces se ejecuta el evento "OnClick" del botón de marras. :)

cHackAll 13-05-2007 00:25:14

Solucion parcial
 
1 Archivos Adjunto(s)
Ahhh tienes toda la razón!!! pero esta definitivamente relacionado (el problema) con el foco del objeto y la forma en que los botones reaccionan!
Realizado un pequeño análisis es un error de la VCL, pero bueno aca te dejo una forma de solucionar tu problema:

Código Delphi [-]
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var Index, Pos: Cardinal; WinControl: TWinControl;
begin
 Index := ControlCount;
 while Index <> 0 do
  begin
   Dec(Index);
   if (Controls[Index] is TButton) then
    with Controls[Index] as TButton do
     begin
      Pos := System.Pos('&', Caption);
      if (Pos > 0) and (Pos < Length(Caption)) and
         ((Key = $20) or (Key = (Byte(Caption[Pos + 1]) and $DF))) and
         ((ssAlt in Shift) or (ActiveControl.Name = Name)) then
       OnMouseDown(nil, mbLeft, [], 0, 0);
     end;
   end;
end;
 
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if Button <> mbLeft then Exit;
 Application.MessageBox('Button 1', 'Pseudo OnClick');
end;
 
procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if Button <> mbLeft then Exit;
 Application.MessageBox('Button 2', 'Pseudo OnClick');
end;

Espero te sirva!

fdelamo 16-05-2007 10:04:41

A mí me pasó lo mismo ...
 
Hola,

a mí me pasó lo mismo, creo que es un error de los controles de windows, no de la VCL, ya que hice una prueba con un formulario de Access y también pasaba.

Yo encontré una "solución", mira este post y eso sí, a ver si entre todos se puede mejorar ... que seguro se puede.

PD: En Win98 el programa daba un error ...

Un saludo


La franja horaria es GMT +2. Ahora son las 20:16:49.

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