Zufälligen Wert aus Stringgrid in Editfeld einfügen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Conulaze
Beiträge: 4
Registriert: Di 21. Apr 2015, 21:21

Zufälligen Wert aus Stringgrid in Editfeld einfügen

Beitrag von Conulaze »

Hallo,
ich bin gerade dabei ein Vokabellernprogramm zu entwerfen.
Bis jetzt habe ich auf der ersten Form eine Stringgrid eingefügt, wo man durch 2 Editfelder jeweils ein Wort links und ein Wort rechts in die Tabelle einfügen kann. Habe bereits eine Speicherfunktion und eine Wiederaufrufungsfunktion eingefügt. Dann habe ich einen Button hinzugefügt, der eine neue Form öffnet (wo die Vokabeln abgefragt werden sollen), auf der nun wieder 2 editfelder sind.
Meine Frage ist nun wie ich einen zufälligen Wert aus der linken Seite der Stringgrid auf Knopfdruck in das Editfeld auf der anderen Form anzeigen kann.
Danke im Vorraus :)

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Zufälligen Wert aus Stringgrid in Editfeld einfügen

Beitrag von Michl »

Nehmen wir mal an, du hast eine fixierte Spalte und eine fixierte Zeile, dann könnte der Code dazu in etwa so aussehen:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  aRow: Integer;
begin
  aRow:=Random(StringGrid1.RowCount - 1) + 1;
  Form2.Edit1.Text:=StringGrid1.Cells[1, aRow];
  Form2.Show;
end;  
(wobei StringGrid1.RowCount die Zahl der vorhandenen Zeilen zurückgibt und das -1 und das darauf folgende +1 von der fixierten Zeile herrührt)

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Conulaze
Beiträge: 4
Registriert: Di 21. Apr 2015, 21:21

Re: Zufälligen Wert aus Stringgrid in Editfeld einfügen

Beitrag von Conulaze »

Michl hat geschrieben:Nehmen wir mal an, du hast eine fixierte Spalte und eine fixierte Zeile, dann könnte der Code dazu in etwa so aussehen:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  aRow: Integer;
begin
  aRow:=Random(StringGrid1.RowCount - 1) + 1;
  Form2.Edit1.Text:=StringGrid1.Cells[1, aRow];
  Form2.Show;
end;  
(wobei StringGrid1.RowCount die Zahl der vorhandenen Zeilen zurückgibt und das -1 und das darauf folgende +1 von der fixierten Zeile herrührt)
Das hat super funktioniert.
Jetzt würde ich noch gerne einen button haben der prüft ob das was in edit2 eingetragen wird mit dem wert der gleichen zeile bloß halt in der anderen spalte übereinstimmt.
Kann mir da jemand noch weiter helfen?

Conulaze
Beiträge: 4
Registriert: Di 21. Apr 2015, 21:21

Re: Zufälligen Wert aus Stringgrid in Editfeld einfügen

Beitrag von Conulaze »

Zur Info:
Habe die 2te Form jetzt weggelassen und lasse alles nur noch über eine laufen :D

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Zufälligen Wert aus Stringgrid in Editfeld einfügen

Beitrag von Michl »

Das schöne an Pascal ist, dass man im Prinzip das per Code schreiben kann, wie man selber spricht (nur zumeist Englisch).

Also:
- Klick Button
- Teste, ob Textinhalt Edit-Feld gleich ist, wie Textinhalt von Stringgrid-Zelle eins neben der vorherigen Zelle
- Ja: schreibe: "Ist gleich!"
- Nein: schreibe: "Ist anders!"

Teste selber ein wenig (ist wirklich ganz einfach), du kannst dabei nichts kaputt machen, sondern nur gewinnen. :wink:

Und wenn du wirklich nicht weiter kommst, dann poste doch den Code und erkläre was du damit erreichen wolltest. Frage, was du nicht verstehst. Wir können dir sicherlich dann weiterhelfen, wenn es nicht geht.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Conulaze
Beiträge: 4
Registriert: Di 21. Apr 2015, 21:21

Re: Zufälligen Wert aus Stringgrid in Editfeld einfügen

Beitrag von Conulaze »

Michl hat geschrieben:Das schöne an Pascal ist, dass man im Prinzip das per Code schreiben kann, wie man selber spricht (nur zumeist Englisch).

Also:
- Klick Button
- Teste, ob Textinhalt Edit-Feld gleich ist, wie Textinhalt von Stringgrid-Zelle eins neben der vorherigen Zelle
- Ja: schreibe: "Ist gleich!"
- Nein: schreibe: "Ist anders!"

Teste selber ein wenig (ist wirklich ganz einfach), du kannst dabei nichts kaputt machen, sondern nur gewinnen. :wink:

Und wenn du wirklich nicht weiter kommst, dann poste doch den Code und erkläre was du damit erreichen wolltest. Frage, was du nicht verstehst. Wir können dir sicherlich dann weiterhelfen, wenn es nicht geht.

Code: Alles auswählen

procedure TForm1.Button5Click(Sender: TObject);
begin
   if (edit2.text) =  ?(StringGrid1.RowCount - 1)?; 
   then
   Showmessage('Das ist richtig');
aRow:=Random(StringGrid1.RowCount - 1) + 1;
  Edit1.Text:=StringGrid1.Cells[1, aRow];  
   else
   Showmessage('Versuche es erneut');
end;    
 
Ich krieg einfach nicht raus wie die Zelle vor der Zelle die abgefragt zu betiteln ist
Zuletzt geändert von Lori am Di 28. Apr 2015, 19:26, insgesamt 1-mal geändert.
Grund: Highlighter

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Zufälligen Wert aus Stringgrid in Editfeld einfügen

Beitrag von Michl »

Du willst mit einem Buttonklick einen zufälligen Eintrag im Stringgrid wählen. Diese Zufallszeile benötigst du später zum Vergleich mit der Nachbarzelle im Stringgrid, daher empfiehlt es sich, diese global zu speichern oder besser als Klassenvariable:

Code: Alles auswählen

  TForm1 = class(TForm)
...
    procedure Button1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    RandomRow: Integer;  //Variable für Zufallszeile
... 
Jetzt wählst du zufällig eine Zeile z.B.:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  RandomRow:=Random(StringGrid1.RowCount - 1) + 1;
  Edit1.Text:=StringGrid1.Cells[1, RandomRow];  //zuerst Spalte (Col), dann Zeile (Row)
end;
Ob die Eingabe korrekt war, kannst du nun mit der Nachbarzelle mittels der gespeicherten Zufallszeile überprüfen:

Code: Alles auswählen

procedure TForm1.Button5Click(Sender: TObject);
begin
  if Edit2.Text = StringGrid1.Cells[2, RandomRow] then  //wenn die Spalte der Nachbarzelle z.B. 2 ist
    Showmessage('Das ist richtig')
  else
    Showmessage('Versuche es erneut');
end; 

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Antworten