![]() |
Random?
Hi ich hab ein Problem mit dem Zufallsgenerator. Und zwar gehts drum, dass ich bei jedem Aufruf der Funktion einen anderen Wert haben möchte. Mein Quellcode:
Delphi-Quellcode:
Zur Erklärung: varia ist eine lokale Stringvariable, in den ich den selektierten Wert der ListBox hineinkopiere, um ihn weiterzuverwenden. Naja nur kommt halt jedes mal der gleiche Wert raus. Wieso??? :(
procedure TForm1.Random;
begin Randomize; DBListBox1.ItemIndex := RandomRange(0,DBListBox1.Items.Count-1); varia := DBListBox1.Items[DBListBox1.ItemIndex]; end; |
Re: Random?
Randomize nur einmal aufrufen am Besten im OnCreate der Form oder im Initialization Teil deines Progs ;)
|
Re: Random?
Hm das bringt mir aber nicht viel, da ich die Funktion per Button aufrufen möchte. Gehts nicht auch anders? :?:
|
Re: Random?
Normalerweis leitet Randomize den Startwert (RandSeed) einen aus der Systemzeit abgeleiteten Wert zu, was eigendlich bedeutet das die 1. Zufallszahl "jedesmal" eine Andere sein sollte.
Aber vesuche mal Randomize nicht in deiner Zufallsfunktion auszuführen, sondern nur einmal im OnCreate-Ereignis deines Formulars. http://www.delphipraxis.net/images/common/divider.jpg ![]() ![]() ![]() |
Re: Random?
Liegt am Randomize, führe dies nur einmal aus, z.B. direkt nach Programmstart.
|
Re: Random?
Hm nee kann nicht sein, habs in das OnCreate der Form reingemacht und will trotzdem nicht. Komischerweise beim 1ten Aufruf geht die Funktion immer :?:
|
Re: Random?
Und so:
Delphi-Quellcode:
http://www.delphipraxis.net/images/common/divider.jpg
Procedure TForm1.FormCreate(Sender: TObject);
Begin Randomize; End; Procedure TForm1.Random; Begin DBListBox1.ItemIndex := Random(DBListBox1.Items.Count); varia := DBListBox1.Items[DBListBox1.ItemIndex]; End; ![]() ![]() ![]() |
Re: Random?
Mit grosser warscheinlichkeit liegt es daran, das deine Prozedur Random heisst. Das beisst sich mit einer Delphi-Funktion, die genauso heisst. Bennen sie mal um in LBRandom oder so und teste es nochmal.
|
Re: Random?
@himitsu:
Hab ich probiert geht nicht! @scp: Geht auch nicht. Hab sie überall umbenannt. Schon komisch, wie gesagt beim 1ten Aufruf gehts, da kommt wirklich ne Zufallszahl, beim 2ten Aufruf aber nicht. :cry: |
Re: Random?
@scp:
die Prozedur Random ist ja in der Klassen TForm1 und kann sich normalerweise nich mir der Funktion Random überschneiden. @Killer: wenn möglich stell doch mal etwas mehr von deinem Code zur Verfügung. Vieleicht wird ja was anderes wichtiges überseh'n. http://www.delphipraxis.net/images/common/divider.jpg ![]() ![]() ![]() |
Re: Random?
Hm der iss relativ umfangreich. Ich kann aber mal die wichtigsten Funktionen reinschreiben:
OnCreate:
Delphi-Quellcode:
FillBox ist eine Funktion zum Einfügen der DBListBox Items!
procedure TForm1.FormCreate(Sender: TObject);
begin DBListBox1.Items.Clear; FillBox; Randomize; while not ADOQuery1.Eof do begin DBListBox1.Items.Add(ADOQuery1.FieldByName('german').AsString); ADOQuery1.Next end; end; LBRandom (Randomfunktion):
Delphi-Quellcode:
1ter Aufruf der Funktion:
procedure TForm1.LBRandom;
begin DBListBox1.ItemIndex := Random(DBListBox1.Items.Count); varia := DBListBox1.Items[DBListBox1.ItemIndex]; end;
Delphi-Quellcode:
KWizard iss ne VCL.
procedure TForm1.Button2Click(Sender: TObject);
begin LBRandom; KWizardWelcomePage3.Show; KWizardWelcomePage3.VisibleButtons := [bkNext,bkFinish]; end; 2ter Aufruf der Funktion:
Delphi-Quellcode:
Hm das war jetzt eigentlich das wichtigste...
procedure TForm1.KWizardWelcomePage3NextButtonClick(Sender: TObject;
var Stop: Boolean); begin if KWizardWelcomePage3.VisibleButtons = [bkBack,bkNext,bkFinish] then KWizardWelcomePage1.Show else LBRandom; end; |
Re: Random?
Du kannst ja auch versuchen andere faktoren mitein zu berechnen.
ZB die momentane Zeit oder das Datum:
Delphi-Quellcode:
So ist die gefahr, dass immer das selbe herauskommt nur noch 1/60.
procedure TForm1.Button1Click(Sender: TObject);
var i,randomzahl:Integer; begin For i:=1 to StrToInt(Copy(TimeToStr(now),7,2)) do begin Randomize; end; RandomZahl:=Random(100); end; Du kannst ja auch andere faktoren miteinberechnen. Datum, wochentag,... je mehr desto besser. Allerdings sollte die schleife nicht zu lange werden. |
Re: Random?
Hmm, es macht doch keinen Sinn 60 Mal hintereinander "randomize" aufzurufen, oder?
Der Befehl geht von der Systemzeit aus und berechnet daraus Zufallzahlen. Wenn man allerdings 60 Mal mit der gleichen Zeit macht (ungefähr) kommt am ende das gleiche raus, wie als wenn man das nur 1 mal macht, nämlich Zufallszahlen! Es reicht den Befehl im OnCreate einmal aufzuführen. Übrigens: Wenn man auf random(x) zugreift, ohne vorher randomize aufzurufen, werden bei jedem Programmstart die gleichen Zufallszahlen ausgeworfen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 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-2025 by Thomas Breitkreuz