Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Random (https://www.delphipraxis.net/140101-random.html)

Mothergrayham 11. Sep 2009 21:22


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.

Luckie 11. Sep 2009 21:24

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.

Jens Hartmann 11. Sep 2009 21:28

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:

Form+IntToStr(i);
Die Form wählen.

Gruß Jens

Luckie 11. Sep 2009 21:33

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.

Namenloser 11. Sep 2009 21:39

Re: Random
 
Würde ich zwar normal auch so machen, aber für einen Anfänger ist diese einfachere Variante vielleicht durchschaubarer:
Delphi-Quellcode:
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;
Geht natürlich auch ohne die Variable, indem man random(10) direkt in die Case-Abfrage einsetzt.

Wolfgang Mix 11. Sep 2009 22:07

Re: Random
 
und vorher
Delphi-Quellcode:
Randomize
nicht vergessen, sonst wird's nicht wirklich zufällig :-)

Gruß

Wolfgang

DeddyH 12. Sep 2009 08:25

Re: Random
 
Aber Randomize nur einmalig aufrufen (etwa im FormCreate).

Mothergrayham 12. Sep 2009 11:39

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;

holliesoft 12. Sep 2009 11:48

Re: Random
 
Zitat:

Zitat von Mothergrayham
hab das jetzt so gemacht aber da ist irgendwo ein fehler drin

procedure TForm1.Button1Click(Sender: TObject);
begin
Randomize;

Zitat:

Zitat von DeddyH
Aber Randomize nur einmalig aufrufen (etwa im FormCreate).

Dass Du nicht das gemacht hast, was DeddyH empfohlen hast, ist schon mal der erste Fehler :mrgreen:

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

Mothergrayham 12. Sep 2009 11:56

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.

DeddyH 12. Sep 2009 11:59

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;

holliesoft 12. Sep 2009 11:59

Re: Random
 
Zitat:

Zitat von Mothergrayham
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.

Na ja, ich meinte eigentlich das hier:
Zitat:

(etwa im FormCreate).
Sonst wird das ja jedes mal beim ButtonClick aufgerufen.

Die Fehlermeldung bedeutet, dass Du die Variable RandomValue nicht deklariert hast.

Es fehlt:

Delphi-Quellcode:
var
  RandomValue: Integer;
vor dem begin.

Gruß
Patrick

//Edit: wo ist der rote Kasten, wenn man ihn braucht? :roll:

Matze 12. Sep 2009 12:01

Re: Random
 
Zitat:

Zitat von Mothergrayham
ich hab doch nur einmal randomize geschrieben.

Aber deine Prozedur wird beim Klick auf den Button komplett durchlaufen und somit wird bei jedem Klick "Randomize" aufgerufen. Es sollte pro Anwensungsstart allerdings nur einmal aufgerufen werden, egal wie oft "Random" folgt. Also packe "Randomize" ins OnCreate deines Formulars.

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.

DeddyH 12. Sep 2009 12:03

Re: Random
 
[OT] Der Opa war schneller :mrgreen: [/OT]

Mothergrayham 12. Sep 2009 12:04

Re: Random
 
wenn du mir jetzt noch sagst was oder wo formcreate ist? in der unit steht davon nix.

DeddyH 12. Sep 2009 12:04

Re: Random
 
Mach mal in der IDE einen Doppelklick auf das Formular ;)

Mothergrayham 12. Sep 2009 12:08

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

DeddyH 12. Sep 2009 12:12

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;

Mothergrayham 12. Sep 2009 12:39

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?

DeddyH 12. Sep 2009 12:44

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.

Matze 12. Sep 2009 12:47

Re: Random
 
Zitat:

Zitat von Mothergrayham
kann ich das jetzt mit unendlich vielen fenstern machen?

Nein, da u.a. dein Speicher begrenzt ist. :stupid:

Und hier noch die angesprochenen Grundlagentutorials. Speziell der Crashkurs ist hilfreich.

Mothergrayham 12. Sep 2009 12:57

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.

DeddyH 12. Sep 2009 13:00

Re: Random
 
Zitat:

Zitat von Mothergrayham
hab jetzt gelesen das wenn man hinter die klammer ne +1 macht, das formular wirklich zufällig kommt.

Wo steht denn das? Schau doch lieber einmal im Debugger nach, ob das Randomize auch wirklich aufgerufen wird, z.B. durch Setzen eines Haltepunkts.

Matze 12. Sep 2009 13:04

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

Mothergrayham 12. Sep 2009 13:12

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.

Wolfgang Mix 12. Sep 2009 13:37

Re: Random
 
Klicke 'mal irgendwo ins Formular, dann wird die leere Prozedur erzeugt.

Gruß

Wolfgang

Matze 12. Sep 2009 14:13

Re: Random
 
Zitat:

Zitat von Wolfgang Mix
Klicke 'mal irgendwo ins Formular, dann wird die leere Prozedur erzeugt.

Ich glaube du hast Seite 2 des Themas hier übersehen. ;)

DeddyH 12. Sep 2009 14:14

Re: Random
 
Jepp, scheint so, ist mir aber auch schon passiert :zwinker:

Wolfgang Mix 12. Sep 2009 14:20

Re: Random
 
OOPS ;-)

Luckie 12. Sep 2009 14:40

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.

Matze 12. Sep 2009 14:42

Re: Random
 
OT: :lol:

DeddyH 12. Sep 2009 14:43

Re: Random
 
So langsam sollte das aber nun oft genug erklärt worden sein :stupid:

Oldy 22. Sep 2009 20:15

Re: Random
 
oder
Delphi-Quellcode:
[..]
var zeigeform: TForm;
begin
zeigeform:=FindComponent(form+inttostr(random(10)) as Tform;
zeigeform.show;
end;
Habs nicht getestet, müsste aber meines Erachtens funktionieren..

(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 02:06 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