Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Durch Zufall zweite Form öffnen (https://www.delphipraxis.net/85203-durch-zufall-zweite-form-oeffnen.html)

Goldstart 27. Jan 2007 11:13


Durch Zufall zweite Form öffnen
 
Hallo Leute...

Ich und meine Freundin sind noch richtige Anfänger, was das programmieren der Delphi-Sprache angeht. Doch im Rahmen eines Schulprojektes müssen wir nun ei Delphiporgramm selbst erstellen, wobei wir jetzt gerade vor dem folgenden Problem stehe:

Ich habe Form 1 bi s 8 und versuche dass sich per Knopfdruck einer dieser zufällig öffnet.


Mein Text sieht so aus:
mit Checkboxen habe ich gearbeitet.
Delphi-Quellcode:
procedure TForm1.Panel1Click(Sender: TObject);
var z1,z2,f1,f2,f3,f4,f5,f6:integer;

begin
if (checkbox1.checked=true) //Um die nächste Seite zu öffnen
and (checkbox2.checked=false)
and (checkbox3.checked=false)
and (checkbox4.checked=false)
and (checkbox6.checked=false)
and (checkbox8.checked=false)
and (checkbox9.checked=false)
and (checkbox5.checked=true)
and (checkbox7.checked=true)
 then randomize;
for z1 := 1 to 3 do
f1:=(random(4));
edit1.text:=IntToStr(f1);

if edit1.text='0' then form2.show;
if edit1.text='1' then form2.show;
if edit1.text='2' then form2.show;



(checkbox1.checked=true) //Um die nächste Seite zu öffnen
and (checkbox2.checked=false)
and (checkbox3.checked=false)
and (checkbox4.checked=false)
and (checkbox6.checked=false)
and (checkbox8.checked=false)
and (checkbox9.checked=false)
and (checkbox5.checked=true)
and (checkbox7.checked=true)
then form1.Hide;
else showmessage('FEHLER SIND NOCH VORHANDEN');
Ich hoffe jemand könnte mir weiterhelfen.



Mit freundlichen Grüßen

Lena

[edit=SirThornberry]Delphi-Tags gesetzt und Sprache korrigiert (Schulprogrammierung ist kein .NET) - Mfg, SirThornberry[/edit]

xZise 27. Jan 2007 11:20

Re: Durch Zufall zweite Form öffnen
 
Programmierst du wirklich mit Delphi.Net?
Für mich sieht es nach Delphi Win32 aus :D

Und dann folgende Info:
  • Wenn du die Hauptform erstellst (OnCreate mal im OI nachgucken ;)) dann füre einmal Randomize aus (reicht normalerweise)
  • Wenn du nun auch einen Button drückst, dann erstelle eine Zufallszahl die von 0 bis 7 geht.
  • Jetzt überprüfst du mit case (wenn du es nicht kennst: Case) welche Zahl das ist
    • Bei 0 form 1 öffnen
    • Bei 1 Form 2 öffnen
    • ...
    • Bei 7 Form 8 öffnen

dominikkv 27. Jan 2007 11:47

Re: Durch Zufall zweite Form öffnen
 
Delphi-Quellcode:
procedure TForm1.Panel1Click(Sender: TObject);
var z1,z2,f1,f2,f3,f4,f5,f6:integer;

begin
if (checkbox1.checked=true) //warum (checkbox1.checked=true)? es reicht checkbox1.checked
and (checkbox2.checked=false) // hier auch einfach not checkbox1.checked
and (checkbox3.checked=false)
and (checkbox4.checked=false)
and (checkbox6.checked=false)
and (checkbox8.checked=false)
and (checkbox9.checked=false)
and (checkbox5.checked=true)
and (checkbox7.checked=true)
 then randomize;                 // was bringt das? einfach randomize in OnCreate, das reicht
for z1 := 1 to 3 do
f1:=(random(4));    // warum 3 mal immer neue zufallszahlen generieren?
edit1.text:=IntToStr(f1);

if edit1.text='0' then form2.show;
if edit1.text='1' then form2.show;
if edit1.text='2' then form2.show;



(checkbox1.checked=true) // if ?!?
and (checkbox2.checked=false)
and (checkbox3.checked=false)
and (checkbox4.checked=false)
and (checkbox6.checked=false)
and (checkbox8.checked=false)
and (checkbox9.checked=false)
and (checkbox5.checked=true)
and (checkbox7.checked=true)
then form1.Hide;  // semikolon ?!?
else showmessage('FEHLER SIND NOCH VORHANDEN');
wie xZise schon gesagt hat:
Delphi-Quellcode:
var N: Byte;
// 
N := Random(4);
case N of
  0:Form2.show;
  1:Form3.show;
  2:Form4.show;
  3:Form5.show;
end;

Goldstart 27. Jan 2007 13:53

Re: Durch Zufall zweite Form öffnen
 
Hey du bist echt ein riesen grosser Schatz....
doch leider habe wir immer noch ein Problem und zwar... um genau zu sein bastelln wir gerade an einem Rätsel.
Es ist so aufgebaut, dass auf jedem Form-Blatt ein Fragebogen zu sehen ist, wenn man alle Fragen richtig beantwortet hat soll sich ein neues Form-Blatt öffnen. Damit die Sache ein bisschen kniffliger und nicht so langweilig wird, versuchen wir vergebungslos (müssen schon am Montag präsentieren), dass die Form-Blätter nicht einfach hintereinander gezeigt werden, sondern die zufällig hintereinander kommen. Ich glaube unsere frage ist auch nicht so verständlich.
Aber wir hätten noch eine, wie kann man eine Verbindung zwischen zwei verschiedenen Form-Blättern erstellen, also z.B. wenn wir eine Zahl in ein edit.text in "Form 2" eingebe und eine weitere in ein edit.text in "Form 3", diese beiden Zahlen addiert werden und in ein weiteres Edit-Pfeld in "Form4" ausgegeben werden.

Trotzdem wollen wir uns herzlich bei dir bedanken für die Hilfe die die uns bis jetzt gegeben hasst.

mit lieben Grüssen

Lena und Mieke

Pfoto 27. Jan 2007 14:11

Re: Durch Zufall zweite Form öffnen
 
Zitat:

Aber wir hätten noch eine, wie kann man eine Verbindung zwischen zwei verschiedenen Form-Blättern erstellen, also z.B. wenn wir eine Zahl in ein edit.text in "Form 2" eingebe und eine weitere in ein edit.text in "Form 3", diese beiden Zahlen addiert werden und in ein weiteres Edit-Pfeld in "Form4" ausgegeben werden.
Hi!

um die Daten / Werte aus verschiedenen Units (also Forms) zu verbinden,
müsst ihr sie in die uses-Anweisung einbinden (so wie die Units der Forms heißen)

dann greift ihr so untereinander darauf zu:

Delphi-Quellcode:
var
  Gesamtwert: integer;

[...]
{ dann irgendwo das aufrufen }
Gesamtwert:= strtoint(Form1.edText.Text) + strtoint(Form2.edText.Text);
Damit könntet ihr aus Form1 den Wert des Textfeldes mit dem aus Form2 zusammenaddieren
und den Gesamtwert ausgeben oder was auch immer.


Gruß
Pfoto

Edit: inttostr nach strtoint geändert

xZise 27. Jan 2007 14:24

Re: Durch Zufall zweite Form öffnen
 
Zitat:

Zitat von Goldstart
Hey du bist echt ein riesen grosser Schatz....
doch leider habe wir immer noch ein Problem und zwar... um genau zu sein bastelln wir gerade an einem Rätsel.
Es ist so aufgebaut, dass auf jedem Form-Blatt ein Fragebogen zu sehen ist, wenn man alle Fragen richtig beantwortet hat soll sich ein neues Form-Blatt öffnen. Damit die Sache ein bisschen kniffliger und nicht so langweilig wird, versuchen wir vergebungslos (müssen schon am Montag präsentieren), dass die Form-Blätter nicht einfach hintereinander gezeigt werden, sondern die zufällig hintereinander kommen. Ich glaube unsere frage ist auch nicht so verständlich.
Aber wir hätten noch eine, wie kann man eine Verbindung zwischen zwei verschiedenen Form-Blättern erstellen, also z.B. wenn wir eine Zahl in ein edit.text in "Form 2" eingebe und eine weitere in ein edit.text in "Form 3", diese beiden Zahlen addiert werden und in ein weiteres Edit-Pfeld in "Form4" ausgegeben werden.

Trotzdem wollen wir uns herzlich bei dir bedanken für die Hilfe die die uns bis jetzt gegeben hasst.

mit lieben Grüssen

Lena und Mieke

Wäre es da nicht einfacher ein Array zu haben, mit Fragen und Antworten und die dann abzuspielen?

Goldstart 27. Jan 2007 15:28

Re: Durch Zufall zweite Form öffnen
 
VIELEN DAN`K AN ALLE, dass ist wirklich der Hammer. Wir hätten nieeee gedacht, dass wir so schnell antworten auf unsere Frage bekommen.

Xsize, was sind den Arrays?

Klaus01 27. Jan 2007 16:11

Re: Durch Zufall zweite Form öffnen
 
Delphi-Quellcode:
FragenArray: Array [0...8] of String;
Ein Array ist eine Anreihung von Felder gleichen Typs.
Ein Feld des Arrays kann mit dem Index angesprochen werden.

Delphi-Quellcode:
FragenArray[0]:='Was ....';

Edit1.Text:=FragenArray[0];
Grüße
Klaus

xZise 28. Jan 2007 11:13

Re: Durch Zufall zweite Form öffnen
 
Also mir wurden Array als "Hochhaus" erklärt ;)
Und in jeder Etage gibt es Eintrag dessen Typ man deklarieren kann... z.B. "string" oder "Integer".

Dann gibt es zwei verschiedene Typen. Einmal ein "dynamisches Array" und dann ein "statisches Array". Wie der Name sagt, kann man im dynamischen Array die "Höhe des Hochhauses" ständig bestimmen. Beim Statischen hingegen ist sie immer gleich und wird während du programmierst festgelegt.

Der Zugriff erfolgt mit [X], wobei "X" die "Etage" ist.
Bei dynamischen Array ist es von "0" bis "Länge" - 1.
Bei statischen Arrays kann man den Bereich selber festlegen. (Wobei es sich empfiehlt auch hier von 0 an zu arbeiten, da man dann immer weis, was das erste Item ist ;) )

Die Deklarierung erfolgt mit <Name des Arrays> : array of <Datentyp jedes arrayitems> (dynamisch) oder <Name des Arrays> : array [<Von>..<Bis>] of <Datentyp jedes arrayitems> (statisch).

Außerdem kann man die auch "mehrdimensional" machen, aber ich denke das es hier noch nicht zwingend notwendig ist.

Und nun zu deiner Frage:
(An alle die Konstanten kennen: Da ich davon ausgehen muss, dass "Goldstart" Konstanten nicht kennt, erspare ich es erstmal, und mach es "dynamisch" ;) Wer lust hat kann ja die Konstanten erklären ^^)
Zuerst musst du mehere Arrays deklarieren. In den einen steht die Frage und in den anderen (außer eins) stehen die Antworten. (Ich nehme hier: 3 Antworten ;)) Und im letzten steht, wo die richtige Antwort steht ;)
Delphi-Quellcode:
questions : array [0..7] of string;
answer1 : array [0..7] of string;
answer2 : array [0..7] of string;
answer3 : array [0..7] of string;
correct : array [0..7] of Integer;
Jetzt muss du beim erstellen der Frageform die Arrays belegen:
Delphi-Quellcode:
questions[0] := 'Wie lange dauert eine Woche (in Stunden)';
answer1[0] := '24';
answer2[0] := '168';
answer3[0] := '170';
correct[0] := 2;
...
questions[7] := 'Was ist der Hauptbestandteil der Erde';
answer1[7] := 'Stickstoff';
answer2[7] := 'Kohlenstoff';
answer3[7] := 'Sauerstoff';
correct[7] := 3;
Und jetzt kannst du die einzelenen Fragen "abfragen":
Delphi-Quellcode:
Label.Caption := questions[<Nummer der Frage>]
AnswerButton1.Caption := answer1[<Nummer der Frage>]
AnswerButton2.Caption := answer2[<Nummer der Frage>]
AnswerButton3.Caption := answer3[<Nummer der Frage>]
Und dann überprüfst du, wenn einer der Button geklickt wurde, ob es der richtige war:
Delphi-Quellcode:
if ClickedButton = correct[<Nummer der Frage>] then
  Showmessage('Richtig!')
else
  Showmessage('Falsch :(')

Thorben_K 28. Jan 2007 13:21

Re: Durch Zufall zweite Form öffnen
 
Ich würde daraus lieber ein Record machen, und dann ein Array of MyRec

so umgefähr, ich weiss halt nicht ob das nicht zu "hoch" ist, und euer lehrer dann denkt das das nicht euer Prog ist

Delphi-Quellcode:

type
  TFrage = record
    Frage : String;
    richtigeAntwort : Integer;
    Anwort : array[0..3] of String;
  end;

   
  TFragen = array[0..6] of TFrage;
so würde ich es machen, ich hatte für sowas mir mal nen Objekt gebaut, der Fragen und antworten Verwaltet, aber ich glaube das glaubt euch euer lehrer nicht. Und zudem ist es nicht 100 %ig ausgereift, da ich es nur einmal gebraucht habe...

Gruss Thorben


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 Uhr.
Seite 1 von 2  1 2      

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