Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   asignar letra a radio button (https://www.clubdelphi.com/foros/showthread.php?t=62027)

RedVenom 01-12-2008 20:03:22

asignar letra a radio button
 
Espero me puedan ayudar con esta duda tengo un grupo de 4 radio buttons cuno asignado con la letra a, otro con la , otro con la c y otro con la d entonces lo que quiero que en lugar de hacer click con el mouse me gustaria que cuando presionaran las teclas A,B,C o D seleccionara el radio boton correspondiente y pasara el foco al siguiente grupo de radio buttons.
Espero me puedan orientar.:confused:

DarkMan 01-12-2008 20:59:02

Fácil, una solución es utilizar la propiedad "KeyPreview" del Form. Lo que hace esta propiedad es captar las pulsaciones de teclas de cualquier componente de tu formulario. Solo tendrías que añadir un código como éste en el evento "OnKeyDown" del formulario:
Código Delphi [-]
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = ord('A') then
  begin
    RadioButton1.SetFocus; 
  end;
 
  if key = ord('B') then
  begin
    RadioButton2.SetFocus;
  end;
 
  if key = ord('C') then
  begin
    RadioButton3.SetFocus;
  end;
 
  if key = ord('D') then
  begin
    RadioButton4.SetFocus;
  end;
end;

Cuando un radiobutton recibe el foco, automáticamente se cambia su propiedad checked.

look 01-12-2008 21:07:29

Cita:

Empezado por RedVenom (Mensaje 328979)
Espero me puedan ayudar con esta duda tengo un grupo de 4 radio buttons cuno asignado con la letra a, otro con la , otro con la c y otro con la d entonces lo que quiero que en lugar de hacer click con el mouse me gustaria que cuando presionaran las teclas A,B,C o D seleccionara el radio boton correspondiente y pasara el foco al siguiente grupo de radio buttons.
Espero me puedan orientar.:confused:

Código Delphi [-]
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
IF Key=65 THEN RadioButton1.SetFocus; /// radio a
IF Key=66 THEN  RadioButton2.SetFocus; /// radio b
IF Key=67 THEN  RadioButton3.SetFocus /// radio c

end;
activas la propiedad keyPreview del form, y luego en el evento onKeydown pones lo anterior.... ;)

edito:
ups.
se me adelantaron .... jeje

dec 01-12-2008 21:08:38

Hola,

Otra solución pudiera ser nombrar incluir en el "Caption" de los "radio botones" el símbolo "&" (ampersand) justo antes de la letra en cuestión. Acabo de probarlo en un "Radio Group" y funciona como se espera. Claro que no sé si dependerá de alguna configuración en el sistema operativo, quiero decir, para que antes sea preciso pulsar la tecla "ALT" o no hacerlo. En mi caso no ha sido necesario.

RedVenom 01-12-2008 21:59:00

Agradezco su orientacion, pero quiero pedir una disculpa ya que lo que estoy utilizando es DBRadioGroup dentro de este grupo hay 4 radiobuttons cada uno asignado a las letras de la A a la D entonces lo que quiero es poder presionar las teclas A,B,C o D para seleccionar uno de los radiobuttons del grupo y despues pasar el foco al siguiente DBRadioGroup.
mil disculpas por no utilizar los nombres adecuados.

look 01-12-2008 22:12:15

Cita:

Empezado por RedVenom (Mensaje 328997)
Agradezco su orientacion, pero quiero pedir una disculpa ya que lo que estoy utilizando es DBRadioGroup dentro de este grupo hay 4 radiobuttons cada uno asignado a las letras de la A a la D entonces lo que quiero es poder presionar las teclas A,B,C o D para seleccionar uno de los radiobuttons del grupo y despues pasar el foco al siguiente DBRadioGroup.
mil disculpas por no utilizar los nombres adecuados.

pues no cambia mucho :

Código Delphi [-]
IF Key=65 THEN DBRadioGroup1.ItemIndex:=0; /// radio a
IF Key=66 THEN  DBRadioGroup1.ItemIndex:=1; // radio b
IF Key=67 THEN DBRadioGroup1.ItemIndex:=2 /// radio c

utiliza ItemIndex.:)

saludos.

RedVenom 01-12-2008 23:16:29

Muchas gracias por su ayuda, ya lo pude implementar.
Solo una pregunta mas como puedo saber en que componente esta posicionado el foco. Por ejemplo si tengo 4 edit como saber en cual de los 4 esta el foco.

lKinGl 02-12-2008 04:50:30

Cita:

Empezado por RedVenom (Mensaje 329009)
Muchas gracias por su ayuda, ya lo pude implementar.
Solo una pregunta mas como puedo saber en que componente esta posicionado el foco. Por ejemplo si tengo 4 edit como saber en cual de los 4 esta el foco.

Salu2 compa.... podrias usar esto para lo que quieres :D

en el evento OnEnter de cada uno de los edits pones este código

Código Delphi [-]
Edit1.Color := clYellow;

y en el evento OnExit este código...

Código Delphi [-]
  Edit1.Color := clWindow;

P.D. claro está que clYellow y clWindows son colores y lo puedes cambiar a tu gusto ;)

Caro 02-12-2008 13:44:04

Cita:

Empezado por RedVenom (Mensaje 329009)
Solo una pregunta mas como puedo saber en que componente esta posicionado el foco. Por ejemplo si tengo 4 edit como saber en cual de los 4 esta el foco.

Hola, deberías abrir otro hilo con esta pregunta, para saber que componnete tiene el foco podrías usar ActiveControl o la función Focused del control.

Has esta prueba en el evento OnEnter de uno de tus edit pon este codigo, ademas de asignar este mismo evento a los demas edit que tienes.

Código Delphi [-]
procedure TForm1.Edit1Enter(Sender: TObject);
begin
 showmessage(ActiveControl.Name);
end;
 
//En el caso de Focused deberías preguntar así
 if Edit2.Focused then
  showmessage('el edit2 tiene el foco');

Saluditos


La franja horaria es GMT +2. Ahora son las 20:24:55.

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