Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi StrinGrid, random String, Vokabel Abfrage (https://www.delphipraxis.net/4654-stringrid-random-string-vokabel-abfrage.html)

dde 7. Mai 2003 20:23


StrinGrid, random String, Vokabel Abfrage
 
Hi,

ich schreibe ein Vokabel-Trainer und leider bin ich schon bei der eigentlichen Funktion stecken geblieben.

Meine "Datenbank" ist ein StringGrid und ich möchte, dass der Vokabel_Abfrage aus willkürlichen StrinGGrid-Zellen geschieht. Also dass es eine Zufallsabfrage wird. Naja, hoffe ihr könnt mir helfen. Achja: inner boardsuche habe ich nichtsgefunden, also wenn ihr fündig werdet, dann her damit!!!

ssach 7. Mai 2003 20:27

hy,

ich muss in der schule genau das gleiche programm scchreiben!
die loesungen habe ich schon, aber leider in der schule..:(
schau dass och morgen irgendwie sie mitbrtingen kann!
bis dann


cu

dde 7. Mai 2003 20:34

jou, dank schonmal auf die schnelle antwort.
hasse so ungefähr den quelltext im kopf?? Wenns geht, dann möchte ich das noch heute zu Ende coden!!!

Stanlay Hanks 7. Mai 2003 20:41

Du hast doch in der Überschrift schon random geschrieben. Weiß jetz nicht, ob das Funktioniert, aber probier mal:

Delphi-Quellcode:
StringGrid1.cells[0,random(StringGrid1.rowcount-1)];
Hab das jetzt nicht probiert, lasse mich auch gern verbessern.


Man liest sich. Stanlay;

dde 7. Mai 2003 20:47

Jou funktioniert doch! Muss mich wohl vorher verschrieben haben.., thx a lot


EDIT: weiteres Problem: naja da das ja jetzt random ist, wie muss ich dann die abfrage machen?
beispiel: wenn sagen wir ein random string "affe" gewählt ist, dann müsste ja die antwort darauf "ape" sein, aber wie bekomm ich das hin, dass "affe" auch gleich "ape" zugeordnet ist und nicht "victim", capiché?
Naja einfacher gehts wohl nicht...

nailor 7. Mai 2003 20:57

Ich kenn zwar StringGrids nicht, aber "ich werde das krasse Gefühl nicht los, dass" der letze Eintrag so nie drankommt!

dde 7. Mai 2003 21:54

Weitere Frage: Wie kann man eigentlich ein StringGrid bewegen die Inhalte all seiner Zellen zu löschen??
Gibt es sowas wie "restart"?

dde 8. Mai 2003 14:03

hab das problem mit dem löschen mit ner schleife gelöst naja hier der code:

Delphi-Quellcode:
procedure TForm1.NeuButtonClick(Sender: TObject);
var
  x:integer;
begin
  x:=-1;
  repeat
  begin
    inc(x);
    StringGrid1.Cells[0,StringGrid1.RowCount-x]:='';
    StringGrid1.Cells[1,StringGrid1.RowCount-x]:='';
  end;
  until StringGrid1.Cells[0,0]='';
end;
[edit=Daniel B]Delphi-Tags eingefügt und Code formatiert. MfG Daniel B.[/edit]

dde 8. Mai 2003 14:53

hi nochmal,

ich verzweifle hier schon wieder wegen dieser randomsache!!!!
Also wie schon oben geschrieben, habe ich nun das Problem, dass die Abfrage nicht mehr stimmt. Die Vokabel-Abfrage.
Naja wenn der Vergleich von StringGrid.Cells[0,x] mit StringGrid.Cells[1,x] funktionieren würde, wäre cool, still waiting...

@ssach

wolltest du nicht source code geben?

Stanlay Hanks 8. Mai 2003 15:58

@ nailor: hallo. warum glaubst du, dass der letzte eintrag nicht drankommt. ich geh mal davon aus, dass du dich auf meinen Code beziehst.

Man liest sich, Stanlay 8)

Daniel B 8. Mai 2003 16:14

Hallo,

ich habe es nach VCL-Komponenten verschoben, mit Datenbanken hat das ja wirklich nichts zutun. ;)

Grüsse, Daniel :hi:

nailor 8. Mai 2003 16:23

wenn rowcount (wie ich vermute) die anzahl der reihen angibt, und du ZB. 2 zeilen hast, und dann random(2-1) aufrufst, wirst du immer das ergebnis 0 haben. gibt rowcount den höchsten index an, dann wird die sache auch nicht besser. also nehme ich an, dass es so wie es immoment ist, falsch ist

Stanlay Hanks 8. Mai 2003 16:32

Zitat:

Zitat von Nailor
wenn rowcount (wie ich vermute) die anzahl der reihen angibt, und du ZB. 2 zeilen hast, und dann random(2-1) aufrufst, wirst du immer das ergebnis 0 haben.

Ich kapier nicht, was du meinst. 2-1 ist 1. und da StringGird Werte nullbasiert sind, lese ich damit doch die 2 Zeile. Lasse mich aber gerne korigieren.

Man liest sich. Stanlay 8)

nailor 8. Mai 2003 17:20

GEnau und (Random(1) = 0) ist immer true. weil es nur eine möglichkeit gibt!

dde 8. Mai 2003 17:30

Wie ich sehe, komm ich nicht rum eine neue Prozedur mit Random_Abrage-Algorithmen zu coden. Naja, Vorschläge erwünscht. Bis dahin versuche ichs selber.

Stanlay Hanks 8. Mai 2003 17:39

@ Nailor. Ziehe mich zurück. :oops: Hast natürlich recht. :wall:

Man liest sich in Demut. Stanlay :oops:

dde 8. Mai 2003 18:32

So ich habe es nun wie folgt gemacht:

Delphi-Quellcode:
procedure TForm1.NextButtonClick(Sender: TObject);
var x:integer;
begin
  x:=0;
  x:=random(StringGrid1.rowcount-1);
  Label1.Caption:=IntToStr(x);
  VokabelLabel.Caption:=StringGrid1.cells[0,StrToInt(Label1.Caption)];
end;

und entsprechend bei der abfrage (Button):

procedure TForm1.EnterButtonClick(Sender: TObject);
begin
   VokEingabeEdit.Text=StringGrid1.cells[1,StrToInt(Label1.Caption)] end;
Zu sagen ist noch: Label1 ist Visible:=false, sprich invisible!

Naja jetzt habe ich es hinbekommen, dass die Abfrage richtig beantwortet wird, doch dann ist mir aufgefallen, dass bei Random, nicht alle Zellen drankommen, nur ein paar. Wie könnte ich denn alle abfragen lassen? Vielleicht mit nem Timer immer neue Werte erstellen und dann random?

Stanlay Hanks 8. Mai 2003 19:17

Wenn du nur Random nimmst, werden immer die gleichen Zufallszahlen erzeugt, so dumm sich das auch aanhört. Du musst vorher irgendwo die Procedur

Delphi-Quellcode:
Randomize;
aufrufen. Dann werden bei jedem Random andere Zufallszahlen erzeugt.

Man liest sich. Stanlay 8)

dde 8. Mai 2003 19:40

Zitat:

Wenn du nur Random nimmst, werden immer die gleichen Zufallszahlen erzeugt, so dumm sich das auch aanhört. Du musst vorher irgendwo die Procedur
Muss ich wirklich eine richtige Prozedur dafür machen? Denn ich habe Randomize vorher so einfach eingesetzt, aber es hat nur richtigen Nutzen, wenn viele Zellen vorhanden sind. Wenn die Zellen unter 10 sind, dann bringt diese Methode auch nichts. Danke trotzdem.
Ich dachte wieder an sowas wie ne Schleife, dass der einfach die Zellen durchgeht, aber dann könnte ich keine Abfrage mehr machen. Vielleicht ginge es ja wenn ich "break" setze:
Kann man extern (z.B per Button) eine Schleife zum Stoppen bringen (mit "break")??


Oder kennt einer unter euch ne bessere Lösung??

@ssach
wo bleibt denn jetzt der source code deines Vokabel Trainers?

Stanlay Hanks 8. Mai 2003 19:44

Ich versteh nicht was du meinst mit: "Muss ich dafür wirklich eine eigene Procedur machen?" Radomize ist doch schon eine eigene Procedur, die du einfach nur z.B. gleich nach dem begin in deinem NextButtonOnClick Ereignis vor den anderen Anweisungen schreiben musst.
Oder hab ich dich falsch verstanden?

dde 8. Mai 2003 20:18

lol, scheint so als würden wir andere delphi sprachen sprechen^^. Unter Prozedur verstehe ich immer "procedure" in delphi(f. E.: procedure TForm1.Timer1Timer(Sender: TObject);) und du meintest in meiner sprache dann eine "anweisung/befehl/command..."

Stanlay Hanks 8. Mai 2003 20:23

Sorry, wenn ich mich unklar/ungenau/undeutlich/unverständlich/unsauber :wink: ausgedrückt hab. Wir werden uns schon irgendwie verstehen, oder ? :wink:

Adler 8. Mai 2003 20:29

Zitat:

Zitat von dde
hi nochmal,

ich verzweifle hier schon wieder wegen dieser randomsache!!!!
Also wie schon oben geschrieben, habe ich nun das Problem, dass die Abfrage nicht mehr stimmt. Die Vokabel-Abfrage.
Naja wenn der Vergleich von StringGrid.Cells[0,x] mit StringGrid.Cells[1,x] funktionieren würde, wäre cool, still waiting...

@ssach

wolltest du nicht source code geben?

Hallo,

du hast die Lösung doch schon in deiner Frage stehen.
Delphi-Quellcode:
x:=Random(StringGrid1.rowcount-1);
(Sorry, habe nicht darauf geachtet das der Beitrag schon über zwei Seiten geht)

MfG
Adler

dde 8. Mai 2003 21:37

@Stanlay Hanks: kein problem
@Adler: macht nichts!

dde 11. Mai 2003 23:19

Gibt es wirklich keinen unter euch, der mir bei meinem Problem helfen könnte? Also ich geh mal krass davon aus, dass delphi sehr viele Befehle hat, mit denen man das machen könnte und sicher sind da draußen ein paar, die alle Befehle drauf haben oder die wichtigsten!!!

Greeetz


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 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