![]() |
Umgang mit RadioGroup
Hallo liebe Delphianer :-D
Finde das Forum hier klasse und habe auch schon diverse Themen durchsucht, aber leider keinen ähnlichen Fall entdecken könne. Ich bin seit ca. 1 Woche Delphi-Infiziert und benutze Zuhause Delphi 8, habe also nur Kenntnisse in TPW aber bin absoluter Anfänger in Delphi :wink: Zu meinem Problem: Ich möchte eine beliebige Zahlenfolge in einer Listbox ausgeben, wobei der User in der RadioGroup anklicken kann, wieviel Zahlen ausgegeben werden sollen. Ich könnte dieses mit meinem Wissen nur so realisieren: Begin case radioGroup2.itemindex of 0:Begin fibo[1]:=StrToInt(edit1.text); fibo[2]:=StrToInt(edit2.text); for i:=3 to 5 do Begin fibo[i]:=fibo[i-1]+fibo[i-2]; end; for i:=1 to 5 do Begin listbox1.Items.Add(IntToStr(fibo[i])); end; end;{of Begin 0} Nur finde ich das sehr umständlich. Ich würde gern sowas basteln wie: for i:=1 to Auswahl do listbox1.Items.Add(IntToStr(fibo[i])); Wie funktioniert das in Delphi, dass ich der Variable Auswahl mit den entsprechenden Wert der in der Listbox angeklickt wird,übergebe? Gruß Tobias |
Re: Umgang mit RadioGroup
Ein RadioGroupBox ist ungeeignet, um eine Stückzahl vorzugeben.
Es wird zu viel Platz benötigt und erlaubt keine eigenen Eingaben. Es gibt 2 sinnvolle Alternativen: a.) TComboBox, der Items mit den voreingestellten Werten gefüllt ist. Trotzdem kann der Benutzer eigene Werte eingeben:
Delphi-Quellcode:
b.) TSpinEdit (auf Palettenseite "Beispiele")
auswahl := StrToInt(ComboBoxAnzahl.Text);
Delphi-Quellcode:
auswahl := Round(SpinEditAnzahl.Value);
|
Re: Umgang mit RadioGroup
Herzlich willkommen in der Delphi-PRAXiS, Tobias.
Das mit der angemessenen Auswahl der Controls für deine Benutzeroberfläche, das wird bestimmt noch. Ansonsten musst du einfach erkennen, dass durch die rekursive Definition der Fibonacci-Zahlen viel zu viele Berechnungen stattfinden, wenn du jede Zahl einzeln berechnest und dann in die ListBox einträgst. Hier hast du etwas zum Studieren:
Delphi-Quellcode:
Freundliche Grüße vom marabu
function Fibonacci(i: cardinal; s: TStrings): cardinal;
begin if i = 0 then Result := 0 else if i = 1 then Result := 1 else Result := Fibonacci(i - 1, s) + Fibonacci(i - 2, s); if i >= s.Count then s.Add(IntToStr(Result)); end; procedure TDemoForm.RadioGroupClick(Sender: TObject); var s: TStrings; begin s := ListBox.Items; // short name intro s.BeginUpdate; s.Clear; // nachgebessert ... with Sender as TRadioGroup do case ItemIndex of 0: Fibonacci(0, s); 1: Fibonacci(5, s); 2: Fibonacci(10, s); 3: Fibonacci(20, s); end; s.EndUpdate; end; |
Re: Umgang mit RadioGroup
Zitat:
Delphi-Quellcode:
Nun erscheint die Fehlermeldung:is not a valid integer value. Man kann in der Combobox 5 Zahlen auswählen. Übernimmt dann die Variable auswahl den Wert der als Zahl ausgewählt wurde?
procedure TForm1.Button1Click(Sender: TObject);
var fibo:array[1..50] of longint; auswahl:integer; i:integer; Begin auswahl:=StrToInt(ComboBox1.Text); ListBox1.Items.Clear; fibo[1]:=StrToInt(edit1.text); fibo[2]:=StrToInt(edit2.text); for i:=3 to 50 do Begin fibo[i]:=fibo[i-1]+fibo[i-2]; end; for i:=1 to auswahl do Begin listbox1.Items.Add(IntToStr(fibo[i])); end; end; |
Re: Umgang mit RadioGroup
Probiers mal mit Combobox1.items[combobox1.itemindex] statt Combobox1.text.
Hoffe geholfen zu haben Apollonius |
Re: Umgang mit RadioGroup
Ein paar Tipps zu den vorherigen Lösungen:
Werte aus Textfeldern sollten nicht mit StrToInt umgewandelt werden. Besser ist
Delphi-Quellcode:
Beim normalen StrToInt() wird eine Exception ausgelöst, wenn der eingegebene Text nicht in eine Zahl umgewandlet werden kann. Die obige Zeile versucht, den Text in eine Zahl umzuwandeln. Wenn das nicht geht, wird der Vorgabewert übernommen, den man als zweiten Parameter angibt. Also hier: wenn eine Zahl eingegeben wurde, übernimm diese, ansonsten wird wieder der alte Wert genommen.
auswahl := StrToIntDef(ComboBox1.Text,auswahl); ComboBox1.Text := IntToStr(auswahl);
Danach wird das Textfeld nochmal neu gesetzt. Wer es richtig schön machen möchte inkl. Fehlermeldung für den Anwender, sollte sich TryStrToInt() angucken:
Delphi-Quellcode:
Auf Items[] sollte nicht ohne Prüfung zugegriffen werden, weil es auch dann wieder zu einer Exception kommen kann:
if not TryStrToInt(ComboBox1.Text, auswahl) then begin
MessageDlg('Würden Sie bitte freundlicherweise nur Zahlen eingeben, sonst komme ich durcheinander.'+#10#10+ 'Danke!', mtError, [mbOk], 0); exit; end;
Delphi-Quellcode:
Das bringt hier aber eigentlich nichts, da die Items auch wieder Strings sind, die mit StrToIntDef umgewandelt werden müssen.
if (ComboBox1.ItemIndex >= 0) then str := Combobox1.items[combobox1.itemindex];
|
Re: Umgang mit RadioGroup
Hallo :-D
Hab gleich mal folgendes übernommen...
Delphi-Quellcode:
Nun passiert folgendes:
auswahl := StrToIntDef(ComboBox1.Text,auswahl); ComboBox1.Text := IntToStr(auswahl);
Es taucht nun keine Fehlermeldung mehr. In der Listbox werden keine Zahlen ausgegebn und in der ComboBox springt der ausgewählte Wert (z.b.5) auf Null. :?: |
Re: Umgang mit RadioGroup
Das hieße aber logischerweise, dass '5' keine Zahl ist. Hast du irgendwelche Leerzeichen oder sonstige andere Zeichen drin?
|
Re: Umgang mit RadioGroup
Liste der Anhänge anzeigen (Anzahl: 3)
Also, hier im Anhang sind nochmal die Schritte von 1 -3:
Bild 1: Ich wähle die Anzahl der Ausgabe aus. Bild 2: Zu sehen ist dort, die zwei Zahlen die als Startwerte der Folge benutzt werden sollen und die unter Bild 1 vorgenommene Auswahl. Bild 3: Die Auswahl von Bild 1 springt auf Null und die Textbox bleibt leer. :?:
Delphi-Quellcode:
unit FibuU;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Borland.Vcl.StdCtrls, Borland.Vcl.ExtCtrls, System.ComponentModel; type TForm1 = class(TForm) Panel1: TPanel; Label1: TLabel; Label2: TLabel; Edit1: TEdit; Edit2: TEdit; Button1: TButton; ListBox1: TListBox; Label3: TLabel; Button2: TButton; Button3: TButton; ComboBox1: TComboBox; Label4: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.nfm} procedure TForm1.Button1Click(Sender: TObject); var fibo:array[1..50] of longint; auswahl:integer; i:integer; Begin auswahl := StrToIntDef(ComboBox1.Text,auswahl); ComboBox1.Text := IntToStr(auswahl); ListBox1.Items.Clear; fibo[1]:=StrToInt(edit1.text); fibo[2]:=StrToInt(edit2.text); for i:=3 to 50 do Begin fibo[i]:=fibo[i-1]+fibo[i-2]; end; for i:=1 to auswahl do Begin listbox1.Items.Add(IntToStr(fibo[i])); end; end; procedure TForm1.Button2Click(Sender: TObject); begin close; end; procedure TForm1.Button3Click(Sender: TObject); begin ListBox1.Items.Clear; end; end. |
Re: Umgang mit RadioGroup
ja, kannst du, sobald du eines hochgeladen hast hast du unten ein neues feld zum hochladen. :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz