Quale pulsante di opzione è selezionato in un TRadioGroup?
-
22-09-2019 - |
Domanda
Come si può vedere nella mia storia domanda, sto sviluppando un manager eBook, che sarà open-source e io lo distribuirà in circa 10 giorni, ma ho un TRadioGroup
, come si può vedere:
TRadioGroup usati sulla mia http://img85.imageshack.us/img85/1830/radiogroup modulo. png
E voglio conservare quarantina in una variabile (che ha bisogno di essere un Integer
) che sarà "legato" con questo TRadioGroup
.
ho bisogno di fare una funzione if
come questo:
didascalia della TRadioButton - Number> che dovrà essere memorizzato nella variabile
Fit 2xWidth - Default -> 0
Montare 2xHeight -> 1
Adatta larghezza -> 2
Adatta altezza -> 3
Ma ho appena usato un TRadioGroup
e un tempo TRadioButton
uno, diverso da quello in C # che ho usato più di 20 volte. Allora io voglio sapere che cosa ho bisogno di mettere in funzione di se, perché ciò che farà so già come fare:
var
num: Integer;
begin
if(TRadioButton1 checked?)
begin
num := 0;
end;
end.
Quello che ho bisogno di mettere all'interno delle parentesi della funzione if
?
PS: ho intenzione di mettere i crediti sul programma per le persone che mi hanno aiutato in questo piccolo progetto
.Soluzione
A TRadioButton ha la proprietà Checked. Ma un TRadioGroup ha la proprietà ItemIndex.
Gli elementi in una TRadioGroup vengono memorizzati utilizzando un TStrings. Così si può associare un oggetto per ogni opzione e si può lanciare un intero ad un TObject da memorizzare.
Esempio:
// 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;
Per leggere l'impostazione corrente:
value := radiogroup.ItemIndex;
O per ottenere il numero intero associati:
index := radiogroup.ItemIndex;
Assert(index>=0); // Sanity check
value := Integer(radiogroup.Items.Objects[index]);
Nel tuo caso, i valori sono 0-3 in modo da poter utilizzare l'ItemIndex.
Come nota, se non è una funzione. Una funzione è un pezzo di codice che restituisce un valore basato sui parametri di input. Se è una dichiarazione, che è un comando che può essere eseguito. L'istruzione if è speciale perché vi permette di eseguire un'istruzione diversa in base alla condizione di se.
Altri suggerimenti
Solo un po '. SUGGERIMENTO: Impostazione .ItemIndex
non invia fuoco della tastiera alla voce della radio, so come risolvere il problema, leggere in anticipo
Invece di selezionare dal codice di una radio in un RadioGroup impostando .ItemIndex
è molto meglio farlo inviando attenzione alla voce della radio; tanto per essere molto chiaro:. Voglio dire l'invio di concentrarsi solo per la voce della radio, non l'intero gruppo della radio
Invece di: radiogroup.itemindex:=TheIndex;
Farlo come questo: TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;
Si farà il punto della radio da selezionare e inviare il fuoco della tastiera ad esso , quindi verrà visualizzato il rettangolo tratteggiato arroud, proprio come se l'utente avesse cliccato su di esso.
Nota 1: Per vedere in azione l'uso della tastiera tasti cursore e confrontare behavor di appena impostazione .ItemIndex
e l'invio di attenzione alla voce della radio
Nota 2:. Se si utilizza TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;
allora non c'è alcuna necessità di impostare .ItemIndex
a tutti, sarà anche essere fatto
La speranza che aiuta qualcuno che ha lo stesso problema di me, quando necessario impostarla dal codice, per esempio per evitare behavor tastiera circolare, ad esempio, per renderlo di rimanere in ultimo elemento radio quando ultima voce di radio viene selezionato e destra della tastiera si preme cursore stesso per primo.