![]() |
Random
Hallo ich bin ganz frisch bei Delphi bei.
Wollte nur mal wissen ob es mit dem random befehl möglich ist aus dem Hauptfenster raus z.b. ein zufälliges von 10 verschiedenen neuen Fenstern aufzumachen? würde mich über ne antwort freuen. |
Re: Random
Und was soll an dieser Aktion zufällig sein? Die Anzahl oder die Position? In einer Schleife kann man natürlich weitere Fenster dynamisch erstellen.
|
Re: Random
Hallo erstmal,
Möglich ist das. Wenn Du z.B. deinen Fenstern die Namen Form1,Form2,Form3... gibst, könntest Du mit
Delphi-Quellcode:
Die Form wählen.Form+IntToStr(i); Gruß Jens |
Re: Random
Ach jetzt verstehe ich das. Du hast schon zehn Fenster und du willst eins davon zufällig anzeigen.
Erseuge sie alle beim Start dynamisch und unsichtbar und leg die Instanzen in einem Array ab. Dann kannst du mit random einen Index generieren und diese Instanz dann sichtbar machen. Gleiches ginge natürlich auch etwas eleganter Mit einer TObjectList. |
Re: Random
Würde ich zwar normal auch so machen, aber für einen Anfänger ist diese einfachere Variante vielleicht durchschaubarer:
Delphi-Quellcode:
Geht natürlich auch ohne die Variable, indem man random(10) direkt in die Case-Abfrage einsetzt.
RandomValue := random(10);
case RandomValue of 0: Form1.Show; 1: Form2.Show; 2: Form3.Show; 3: Form4.Show; 4: Form5.Show; 5: Form6.Show; ... end; |
Re: Random
und vorher
Delphi-Quellcode:
nicht vergessen, sonst wird's nicht wirklich zufällig :-)
Randomize
Gruß Wolfgang |
Re: Random
Aber Randomize nur einmalig aufrufen (etwa im FormCreate).
|
Re: Random
hab das jetzt so gemacht aber da ist irgendwo ein fehler drin
procedure TForm1.Button1Click(Sender: TObject); begin Randomize; RandomValue := random(10); case RandomValue of 0: Form1.Show; 1: Form2.Show; 2: Form3.Show; end; |
Re: Random
Zitat:
Zitat:
Welche Fehlermeldung bekommst Du denn? Das ist nämlich die wichtigste Info die Du vergessen hast... Hast du denn die Units der aufzurufenden Forms der aktuellen Unit hinzugefügt? Gruß Patrick |
Re: Random
ich hab doch nur einmal randomize geschrieben.
kommt der fehler "undefinierter bezeicher: randomvalue" bitte nicht so viele fachausdrücke bin da noch nicht so drin. |
Re: Random
Das Randomize packst Du zuerst einmal ins FormCreate, dann wird es nur einmal ausgeführt ;). Und RandomValue hast Du ja auch nicht als Variable deklariert (es geht aber auch ohne diese Variable).
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin //Randomize; weg, ins FormCreate damit case random(10) of 0: Form1.Show; 1: Form2.Show; 2: Form3.Show; end;//das end zum case end; |
Re: Random
Zitat:
Zitat:
Die Fehlermeldung bedeutet, dass Du die Variable RandomValue nicht deklariert hast. Es fehlt:
Delphi-Quellcode:
vor dem begin.
var
RandomValue: Integer; Gruß Patrick //Edit: wo ist der rote Kasten, wenn man ihn braucht? :roll: |
Re: Random
Zitat:
Wenn du "Random(10)" schreibst, wird dir eine Zufallszahl zwischen 0 und 9 zurückgegeben. Für deinen Testfall mit 3 Formularen müsstest du "Random(3)" nutzen. Denn wenn der Wert aktuell bsp. 5 ist, wird kein Formular aufgerufen. Vielleicht ist das schon der Fehler. Edit: Hö, der rote Kasten scheint wirklich im Urlaub zu sein. |
Re: Random
[OT] Der Opa war schneller :mrgreen: [/OT]
|
Re: Random
wenn du mir jetzt noch sagst was oder wo formcreate ist? in der unit steht davon nix.
|
Re: Random
Mach mal in der IDE einen Doppelklick auf das Formular ;)
|
Re: Random
procedure TForm1.FormCreate(Sender: TObject);
begin Randomize; end; procedure TForm1.Button1Click(Sender: TObject); begin RandomValue : random(3); case RandomValue of 0: Form1.Show; 1: Form2.Show; 2: Form3.Show; end; jetzt sieht das so aus aber den fehler macht er immer noch |
Re: Random
Sei mir nicht böse, aber ein Grundlagentutorial erscheint mir angebracht. Nichtsdestotrotz:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin Randomize; end; procedure TForm1.Button1Click(Sender: TObject); var RandomValue: integer; //Deklaration der Variablen begin RandomValue := random(3); case RandomValue of 0: Form1.Show; 1: Form2.Show; 2: Form3.Show; end; //dieses end darf nicht weggelassen werden end; |
Re: Random
das klappt super ich danke euch. kann ich das jetzt mit unendlich vielen fenstern machen?
wenn ich euch dann richtig verstanden habe muss ich einfach die zahl in klammern hintern random verändern? |
Re: Random
Zwischen die Klammern setzt Du die Anzahl der verfügbaren Formulare. Allerdings musst Du nach dieser Vorgehensweise auch für jedes Formular ein case-Label schreiben.
|
Re: Random
Zitat:
Und hier noch die angesprochenen ![]() |
Re: Random
okay das versteh ich soll erst mal nicht das problem sein für den anfang.
eine frage habe ich aber jetzt noch das immer das gleiche formular zuerst kommt. hab jetzt gelesen das wenn man hinter die klammer ne +1 macht, das formular wirklich zufällig kommt. bei mir ist jetzt aber das problem das ein formular garnicht mehr kommt. okay unendlich war jetzt etwas übertrieben lol. aber meinetwegen 100 oder so. |
Re: Random
Zitat:
|
Re: Random
Hallo,
du musst versuchen den Code zu verstehen! random(3) gibt eine Zufallszahl zwischen 0 und 2 aus. Wenn du nun random(3)+1 schreibst, wird eben immer 1 dazu addiert. Somit erhälst du eine Zufallszahl zwischen 1 und 3. Mehr nicht. Willst du es nun zufällig haben oder nicht? :gruebel: Wenn beim 1. Aufruf immer das gleiche Formular erscheinen soll und bei allen weiteren ein zufälliges, dann kannst du eine boolsche Variable wie "FirstClick" einführen. Diese setzt du bsp. zu Beginn auf "true". Dann fragst du sie bei jedem Klick ab. Ist sie "true", wird das bestimmte Formular angezeigt und du setzt sie auf "false". Ist sie "false" wählst du zufällig ein Formular aus. Wie das per Code umzusetzen ist, kannst du in den verlinkten Tutorials nachlesen (oder aus meiner Beschreibung heraus). Grüße |
Re: Random
ne sollte schon zufällig sein. hab jetzt einfach mal 10 gemacht zum gucken und das funzt schon. ich danke euch. ich meld mich wieder bei problem.
|
Re: Random
Klicke 'mal irgendwo ins Formular, dann wird die leere Prozedur erzeugt.
Gruß Wolfgang |
Re: Random
Zitat:
|
Re: Random
Jepp, scheint so, ist mir aber auch schon passiert :zwinker:
|
Re: Random
OOPS ;-)
|
Re: Random
Klick das Formular an, dann wechselst du in den Objekinspektor und dort auf den Seitenreiter mit den Ereignissen, dann klickst du doppelt neben das Feld OnCreate. Deie IDE erstellt dir dann automatisch die Deklaration des Ereignisses und den Prozedurrumpf. Dort kannst du dann deinen Code reinschreiben.
|
Re: Random
OT: :lol:
|
Re: Random
So langsam sollte das aber nun oft genug erklärt worden sein :stupid:
|
Re: Random
oder
Delphi-Quellcode:
Habs nicht getestet, müsste aber meines Erachtens funktionieren..
[..]
var zeigeform: TForm; begin zeigeform:=FindComponent(form+inttostr(random(10)) as Tform; zeigeform.show; end; (sry dass ich das so spät schreib, aber 310 RSS-Feeds durchzusehen dauert eine weile.. :D) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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