2009-12-31 15 views
6

Como se puede ver en mi historial de preguntas, estoy desarrollando un gestor de libros electrónicos, que será de código abierto y permite que se abra en unos 10 días, pero tengo una TRadioGroup, como se puede ver:
TRadioGroup Used On My Form http://img85.imageshack.us/img85/1830/radiogroup.png¿Qué botón de opción se selecciona en un TRadioGroup?

Y quiero almacenar algo en una variable (que debe ser un Integer) que será "vinculado" con este TRadioGroup.

tengo que hacer una función if así:

título de la TRadioButton -> Número que tendrá que ser almacenado en la variable

Fit 2xWidth - por defecto -> 0
Fit 2xHeight -> 1
Ajustar ancho -> 2
Altura Fit -> 3

Pero acabo de usar un TRadioGroup y un TRadioButton una vez, diferente de C# que he usado más de 20 veces. Entonces me gustaría saber lo que necesito para poner en el caso de la función, porque lo que hará que ya sé cómo hacerlo:

var 
    num: Integer; 

begin 
    if(TRadioButton1 checked?) 
    begin 
    num := 0; 
    end; 
end. 

Lo que necesito para poner dentro de los corchetes de la función if?

PD: Voy a poner los créditos en el programa para las personas que me ayudaron en este pequeño proyecto.

+0

De su historial de preguntas, pensé que estaba escribiendo un front-end para GCC. ¿Por qué un administrador de libros electrónicos necesita invocar un compilador de C? –

+0

Es una nueva característica de mi administrador de libros electrónicos. –

Respuesta

9

A TRadioButton tiene la propiedad Controlada. Pero A TRadioGroup tiene la propiedad ItemIndex.

Los elementos en un TRadioGroup se almacenan utilizando una TStrings. De modo que puede asociar un objeto a cada opción y puede convertir un entero a un objeto TO para ser almacenado.

Ejemplo:

// fill the radiogroup 
radiogroup.Items.AddObject('Fit 2xWidth', TObject(0)); 
radiogroup.Items.AddObject('Fit 2xHeight', TObject(1)); 
radiogroup.Items.AddObject('Fit Width', TObject(2)); 
radiogroup.Items.AddObject('Fit Height', TObject(3)); 
radiogroup.ItemIndex := 0; 

Para leer la configuración actual:

value := radiogroup.ItemIndex; 

o para obtener el entero asociado:

index := radiogroup.ItemIndex; 
Assert(index>=0); // Sanity check 
value := Integer(radiogroup.Items.Objects[index]); 

En su caso, los valores son 0 a 3 para que pueda usar el ItemIndex.

Como nota, si no es una función. Una función es una pieza de código que devuelve un valor basado en los parámetros de entrada. If es una instrucción, que es un comando que se puede ejecutar. La instrucción if es especial porque le permite ejecutar una instrucción diferente basada en la condición if.

+0

Bien, pero ¿cómo puedo usar este fragmento de código para almacenarlos en un 'Entero ', que solo tendrá un número, que será el único seleccionado? –

+1

Si se selecciona Ancho de ajuste, ItemIndex = 2, si se seleccionó Fix 2xWidth ItemIndex = 0 etc. –

+0

¡Muchas gracias! –

5

Solo un pequeño CONSEJO: El ajuste .ItemIndex no envía el foco del teclado al elemento de radio, sé cómo solucionarlo, lea adelante.

En lugar de seleccionar por código una Radio en un RadioGroup configurando .ItemIndex, es mucho mejor hacerlo enviando el foco al elemento de radio; solo para ser muy claro: me refiero a enviar el foco solo al elemento de radio, no a todo el grupo de radio.

En lugar de: radiogroup.itemindex:=TheIndex;

hacerlo como esto: TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;

que hará que el elemento de radio para ser seleccionado y enviar el foco del teclado a ella, por lo que mostrará el rectángulo de puntos arroud se , como si el usuario hubiera hecho clic en él.

Nota1: Para verlo en acción, use las teclas del cursor del teclado y compare el comportamiento de simplemente establecer .ItemIndex y enviar el enfoque al elemento de la radio.

Nota 2: Si usa TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;, no es necesario configurar .ItemIndex, también se realizará.

Espero que ayude a alguien a tener el mismo problema que yo, cuando deba configurarlo por código, por ejemplo para evitar el comportamiento circular del teclado, por ejemplo para que permanezca en el último elemento de radio cuando se selecciona el último elemento de radio y el teclado se presiona el cursor derecho, lo mismo para el primero.

+1

Excelente observación! – TomR

+0

Este ingenioso poco de lógica resolvió un problema absurdo que tuvimos con un formulario bloqueado en un bucle basado en el evento OnClick. ¡Gracias! –

Cuestiones relacionadas