2009-12-31 9 views
6

Wie Sie in meiner Frage Geschichte sehen können, ich bin ein E-Book-Manager zu entwickeln, wird die Open-Source sein und ich werde es in etwa 10 Tagen freigeben, aber ich habe ein TRadioGroup, wie Sie sehen können:
TRadioGroup Used On My Form http://img85.imageshack.us/img85/1830/radiogroup.pngWelcher Radiobutton ist in einer TRadioGroup ausgewählt?

Und ich möchte etwas in einer Variablen speichern (das muss ein Integer sein), die mit diesem TRadioGroup "verknüpft" werden.

Ich brauche eine if Funktion wie dies zu tun:

Beschriftung des TRadioButton -> Eine Zahl, die in der Variablen

Fit 2xWidth gespeichert werden müssen - Standard -> 0
Fit 2xHeight -> 1
Breite anpassen -> 2
Fit Höhe -> 3

Aber ich habe gerade eine TRadioGroup und eine TRadioButton einmal verwendet, anders als in C#, die ich mehr als 20 Mal verwendet habe. Dann will ich wissen, was ich brauche auf der, wenn die Funktion zu setzen, weil das, was sie tun wird bereits Ich weiß, wie zu tun:

var 
    num: Integer; 

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

Was ich brauche, in den Klammern der if Funktion setzen?

PS: Ich werde die Credits auf das Programm für die Leute setzen, die mir in diesem kleinen Projekt geholfen haben.

+0

Aus Ihrer Frage Geschichte, dachte ich, dass Sie ein Front-End für GCC schreiben. Warum muss ein E-Book-Manager einen C-Compiler aufrufen? –

+0

Es ist eine neue Funktion meines eBook-Managers. –

Antwort

9

Ein TRadioButton hat die Checked-Eigenschaft. Aber eine TRadioGroup hat die ItemIndex-Eigenschaft.

Die Elemente in einer TRadioGroup werden mit einem TStrings gespeichert. So können Sie jeder Option ein Objekt zuordnen, und Sie können eine Ganzzahl in ein zu speicherndes TObject umwandeln.

Beispiel:

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

die aktuelle Einstellung zu lesen:

value := radiogroup.ItemIndex; 

Oder die zugehörige ganze Zahl zu erhalten:

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

In Ihrem Fall sind die Werte 0 bis 3 So können Sie den ItemIndex verwenden.

Als eine Anmerkung, wenn ist keine Funktion. Eine Funktion ist ein Code, der basierend auf den Eingabeparametern einen Wert zurückgibt. If ist eine Anweisung, die ein Befehl ist, der ausgeführt werden kann. Die if-Anweisung ist speziell, da sie es Ihnen ermöglicht, eine andere Anweisung basierend auf der if-Bedingung auszuführen.

+0

Ok, aber wie kann ich dieses Stück Code verwenden, um sie auf einem "Integer" zu speichern, das nur eine Nummer enthält, die die einzige sein wird, die ausgewählt ist? –

+1

Wenn Fit Width ausgewählt ist, ItemIndex = 2, wenn Fix 2xWidth ausgewählt ist ItemIndex = 0 usw. –

+0

Vielen Dank! –

5

Nur ein kleiner Tipp: Einstellung .ItemIndex sendet keine Tastatur Fokus auf das Radio Element, ich weiß, wie es zu beheben, lesen Sie weiter.

Anstelle der Auswahl eines Radios in einer RadioGroup per Code .ItemIndex ist es viel besser, es zu tun, indem man den Fokus auf das Radioelement sendet; nur um ganz klar zu sein: ich meine den Fokus nur auf den Radiogegenstand zu richten, nicht auf die ganze Radiogruppe.

Statt: radiogroup.itemindex:=TheIndex;

es wie folgt tun: TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;

Es wird das Radio Artikel machen ausgewählt werden und den Tastaturfokus auf das senden, so wird es das gepunktete Rechteck zeigt es arroud , als ob der Benutzer darauf geklickt hätte.

Hinweis1: Um es in Aktion zu sehen, benutzen Sie die Tastatur-Cursortasten und vergleichen Sie die Einstellung .ItemIndex und senden Sie den Fokus an das Radio-Element.

Hinweis2: Wenn Sie TRadioButton(radiogroup.Controls[TheIndex]).SetFocus; verwenden, dann gibt es keine Notwendigkeit, .ItemIndex überhaupt einzustellen, es wird auch getan.

Hoffe, dass jemand mit dem gleichen Problem wie ich, wenn es durch Code, zum Beispiel, um zirkuläre Tastatur behavord, zum Beispiel um es auf letzten Radio-Element bleiben, wenn letzte Radio-Element ausgewählt ist und Tastatur Der rechte Cursor wird gedrückt, der gleiche für den ersten.

+1

Ausgezeichnete Beobachtung! – TomR

+0

Dieses geschickte Stück Logik löste ein verrücktes Problem, das wir hatten, als ein Formular in einer Schleife basierend auf dem OnClick-Ereignis steckenblieb. Vielen Dank! –