PDA

Ver la Versión Completa : asignar letra a radio button


RedVenom
01-12-2008, 20:03:22
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:

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
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:


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
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 :


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
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


Edit1.Color := clYellow;


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


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
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.


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