AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Umgang mit RadioGroup

Ein Thema von MarquiseDeSade · begonnen am 11. Mai 2007 · letzter Beitrag vom 12. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#1

Umgang mit RadioGroup

  Alt 11. Mai 2007, 17:28
Hallo liebe Delphianer

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

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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Umgang mit RadioGroup

  Alt 11. Mai 2007, 18:31
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:
   auswahl := StrToInt(ComboBoxAnzahl.Text); b.) TSpinEdit (auf Palettenseite "Beispiele")
auswahl := Round(SpinEditAnzahl.Value);
Andreas
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Umgang mit RadioGroup

  Alt 11. Mai 2007, 18:40
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:
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;
Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Umgang mit RadioGroup

  Alt 11. Mai 2007, 19:02
Zitat von shmia:
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:
   auswahl := StrToInt(ComboBoxAnzahl.Text); b.) TSpinEdit (auf Palettenseite "Beispiele")
auswahl := Round(SpinEditAnzahl.Value);
Ich habe das so im Programm verbaut:

Delphi-Quellcode:
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;
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?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Umgang mit RadioGroup

  Alt 11. Mai 2007, 20:29
Probiers mal mit Combobox1.items[combobox1.itemindex] statt Combobox1.text.
Hoffe geholfen zu haben
Apollonius
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
SirTwist

Registriert seit: 28. Sep 2006
198 Beiträge
 
Delphi XE Professional
 
#6

Re: Umgang mit RadioGroup

  Alt 12. Mai 2007, 13:10
Ein paar Tipps zu den vorherigen Lösungen:

Werte aus Textfeldern sollten nicht mit StrToInt umgewandelt werden. Besser ist
auswahl := StrToIntDef(ComboBox1.Text,auswahl); ComboBox1.Text := IntToStr(auswahl); 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.

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:
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;
Auf Items[] sollte nicht ohne Prüfung zugegriffen werden, weil es auch dann wieder zu einer Exception kommen kann:

if (ComboBox1.ItemIndex >= 0) then str := Combobox1.items[combobox1.itemindex]; Das bringt hier aber eigentlich nichts, da die Items auch wieder Strings sind, die mit StrToIntDef umgewandelt werden müssen.
  Mit Zitat antworten Zitat
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Umgang mit RadioGroup

  Alt 12. Mai 2007, 13:26
Hallo

Hab gleich mal folgendes übernommen...
auswahl := StrToIntDef(ComboBox1.Text,auswahl); ComboBox1.Text := IntToStr(auswahl); Nun passiert folgendes:

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.

  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Umgang mit RadioGroup

  Alt 12. Mai 2007, 13:29
Das hieße aber logischerweise, dass '5' keine Zahl ist. Hast du irgendwelche Leerzeichen oder sonstige andere Zeichen drin?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Umgang mit RadioGroup

  Alt 12. Mai 2007, 13:42
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.
Miniaturansicht angehängter Grafiken
1_190.jpg   3_193.jpg   2_163.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Umgang mit RadioGroup

  Alt 12. Mai 2007, 13:47
ja, kannst du, sobald du eines hochgeladen hast hast du unten ein neues feld zum hochladen.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz