Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Selbstprogrammierung eines Vokabeltrainers (https://www.delphipraxis.net/180545-selbstprogrammierung-eines-vokabeltrainers.html)

Soph6297 17. Jun 2014 17:28

AW: Selbstprogrammierung eines Vokabeltrainers
 
Tut mir leid, ich versuche nur zu verstehen, was genau ich programmiere; da frage ich vielleicht zu viel /:

Zitat:

2. Wenn du ein Array[1..2] hast und du rufst ein Item daraus ab, dessen Index kleiner 1 oder dessen Index größer 2 ist, erzeugt dies einen Fehler, denn es existiert nur der Index 1 und der Index 2. Genauso ist das z.B. bei Stringlisten: Wenn du 15 Items darin hast (0..14] und du rufst z.B: das Item mit dem Index 15 auf, das gar nicht existiert, erzeugst du denselben Fehler: Listenindex übersteigt das Maximum.
Ok, das versteh ich!

Ich hab versucht auf den Index der ListBox zuzugreifen:

Delphi-Quellcode:
procedure TForm1.EreignisButtonClick(Sender: TObject);
var zufall:Integer;
     Ereignis:String;


begin

ListBox1.Items.LoadFromFile('TextEreignis.txt');

randomize;
ListBox1.Items.Strings[2];
Trennung(ListBox1.Items.Strings[Zufall], FJahr, Ereignis);
EreignisPanel.Caption:=Ereignis;




end;
Delphi-Quellcode:
ListBox1.Items.Strings[2];
Allerdings wird mir immer noch angezeigt, dass ich das Maximum überschreite.
Müsste ich dann ein Array bei den var einfügen, zB
Delphi-Quellcode:
Ereignis:Array [1..3] of String
?

mkinzler 17. Jun 2014 17:31

AW: Selbstprogrammierung eines Vokabeltrainers
 
Wieviele Zeilen hat die Textdatei?
Das randomize ist hier falsch. Es sorgt dafür, das die Fragen immer iin der selben Reihenfolge gewählt werden.

Soph6297 17. Jun 2014 17:33

AW: Selbstprogrammierung eines Vokabeltrainers
 
Momentan hat die Textdatei 3 Zeilen, es soll aber später möglich sein, die Textdatei um Zeilen zu erweitern.

Oh, ok.
Aber wenn das randomize dort falsch ist, wo muss ich es dann hinschreiben, damit die Fragen/Antworten aus der Textdatei zufällig gewählt werden?

Sir Rufo 17. Jun 2014 17:34

AW: Selbstprogrammierung eines Vokabeltrainers
 
Was für einen Wert hat denn
Delphi-Quellcode:
Zufall
?

Soph6297 17. Jun 2014 17:36

AW: Selbstprogrammierung eines Vokabeltrainers
 
Einen Integer Wert, wenn du das meinst?

Delphi-Quellcode:
var zufall:Integer;
     Ereignis:String;


begin

ListBox1.Items.LoadFromFile('TextEreignis.txt');

randomize;
ListBox1.Items.Strings[2];
Trennung(ListBox1.Items.Strings[Zufall], FJahr, Ereignis);
EreignisPanel.Caption:=Ereignis;

Sir Rufo 17. Jun 2014 17:44

AW: Selbstprogrammierung eines Vokabeltrainers
 
Zitat:

Zitat von Soph6297 (Beitrag 1262622)
Einen Integer Wert, wenn du das meinst?

Da wäre ich nie drauf gekommen :roll:

Welcher konkrete
Delphi-Quellcode:
Integer
-Wert befindet sich denn in
Delphi-Quellcode:
Zufall
wenn du die Methode
Delphi-Quellcode:
Trennung
aufrufst?

(So wie ich das sehe ist der zufälliger als dir lieb ist)

himitsu 17. Jun 2014 17:54

AW: Selbstprogrammierung eines Vokabeltrainers
 
Zitat:

Delphi-Quellcode:
randomize;
ListBox1.Items.Strings[2];
Trennung(ListBox1.Items.Strings[Zufall], FJahr, Ereignis);

Randomize darf sollte man nur einmal bei Programmstart aufrufen.

Wozu ist das
Delphi-Quellcode:
ListBox1.Items.Strings[2]
?
Du liest da den 3. Wert aus, machst damit aber nichts. (wird nirgendwo zugewiesen)

Was ist mit Zufall?
Dein Compiler sollte dir da auch sagen, daß du vergessen hast diese Variable zu initialisieren. :!:!
Initialisieren = einen Wert zuweisen (hier z.B. über Delphi-Referenz durchsuchenRandom), bevor man diese Variable ausliest/verwendet.


PS: Bei
Delphi-Quellcode:
ListBox1.Items.Strings[2]
kann man das Strings auch weglassen (
Delphi-Quellcode:
ListBox1.Items[2]
), wenn man möchte,
denn als "Default"-Array-Property baut das Delphi implizit wieder ein.

Soph6297 17. Jun 2014 17:55

AW: Selbstprogrammierung eines Vokabeltrainers
 
Delphi-Quellcode:
zufall:=random(ListBox1.Items.Count);
Wenn ich das allerdings in der procedure aufrufe, kommt die Fehlermeldung, dass ListBox1 undefiniert ist.

Delphi-Quellcode:
procedure Trennung(text:String; var TAntwort,TFrage:String);

const
Frage_Antwort='Rheinbund;1806';
Trenner=';';

var Frage, Antwort:String;
    iPos,zufall:integer;

begin

ListBox1.Items.LoadFromFile('TextEreignis.txt');

randomize;
zufall:=random(ListBox1.Items.Count);
end;

iPos:=Pos(';','Rheinbund;1806');
if iPos > 0 then
 begin
  Frage:=Copy('Rheinbund;1806',0, iPos+1);
  Antwort:=Copy('Rheinbund;1806',0, iPos-1);
 ShowMessage('Hier Nachricht eingeben');
 end;
end;
Packe ich es allerdings in den OnClick vom EreignisButton läuft das Programm, allerdings öffnet sich dann die ShowMessage von der procedure.

Delphi-Quellcode:
procedure TForm1.EreignisButtonClick(Sender: TObject);
var zufall:Integer;
     Ereignis:String;


begin

ListBox1.Items.LoadFromFile('TextEreignis.txt');

randomize;
zufall:=random(ListBox1.Items.Count);
ListBox1.Items.Strings[2];
Trennung(ListBox1.Items.Strings[Zufall], FJahr, Ereignis);
EreignisPanel.Caption:=Ereignis;




end;
Zitat:

Wozu ist das ListBox1.Items.Strings[2] ?
Du liest da den 3. Wert aus, machst damit aber nichts. (wird nirgendwo zugewiesen)
Damit wollte ich (leider vergeblich) versuchen, dass die ListBox nicht an ihr Maximum stößt... Allerdings läuft das Programm jetzt, wo ich Zufall deklariert habe. (Hatte ich irgendwie gelöscht, die zeile....)


Also im Endeffekt: Das Problem mit dem Maximum der ListBox besteht nicht mehr. Allerdings wird noch kein Ereignis im dafür vorgesehenen Panel angezeigt.

Perlsau 17. Jun 2014 19:27

AW: Selbstprogrammierung eines Vokabeltrainers
 
Mein liebes Soph6297, dir fehlen offenbar die einfachsten Grundlagen der Delphi-Programmierung:

Zitat:

Zitat von Soph6297 (Beitrag 1262632)
Wenn ich das allerdings in der procedure aufrufe, kommt die Fehlermeldung, dass ListBox1 undefiniert ist.

Das ist doch völlig normal, daß du von einer Procedure aus, die du nicht als Methode deines Formulars deklarierst, auch keinen Zugriff auf die Komponenten hast, die sich auf diesem Formular befinden. Deklariere die Procedure Trennung im Private-Abschnitt deines Interface-Abschnitts, drücke dann die Tastenkombination Strg-Shift-C und schreibe in den daraufhin erzeugten Procedure-Rumpf deine Implementation.
Delphi-Quellcode:
procedure TForm1.Trennung(text:String; var TAntwort,TFrage:String);
begin
end;
Zitat:

Zitat von Soph6297 (Beitrag 1262632)
Packe ich es allerdings in den OnClick vom EreignisButton läuft das Programm, allerdings öffnet sich dann die ShowMessage von der procedure.

Ist doch klar: Hier stellt die Procedure eine Methode deiner Form-Klasse dar. Du siehst das an dem vorangestellten TForm1.

Zitat:

Zitat von Soph6297 (Beitrag 1262632)
Delphi-Quellcode:
procedure TForm1.EreignisButtonClick(Sender: TObject);
var zufall:Integer;
     Ereignis:String;
begin
ListBox1.Items.LoadFromFile('TextEreignis.txt');
randomize;
zufall:=random(ListBox1.Items.Count);
ListBox1.Items.Strings[2];
Trennung(ListBox1.Items.Strings[Zufall], FJahr, Ereignis);
EreignisPanel.Caption:=Ereignis;
end;
Also im Endeffekt: Das Problem mit dem Maximum der ListBox besteht nicht mehr. Allerdings wird noch kein Ereignis im dafür vorgesehenen Panel angezeigt.

An dieser Stelle möchte ich dir noch einmal empfehlen, mindestens ein, besser mehrere Anfänger-Tutorials sorgfältig durchzuarbeiten. Wollte man dir deinen ganzen Kot Code korrigieren, käme das beinahe dem Schreiben eines Tutorials nahe, und dazu hab zumindest ich keine Lust. Du stocherst da wie wild in deinem Programmcode herum und hoffst, irgendwo ein Korn zu finden. So wird das nix. Da hilft auch kein Code-Korrigieren und -Liefern, denn offensichtlich begreifst du nicht wirklich, warum dies und jenes ein Fehler ist. Noch ein Hinweis: Formatiere deinen Code, arbeite zumindest mit Einrückungen, das kann doch sonst keiner lesen!

Soph6297 21. Jun 2014 17:20

AW: Selbstprogrammierung eines Vokabeltrainers
 
An dieser Stelle Danke an eure Hilfe, schlussendlich läuft das Programm jetzt wie geplant. :)

MfG


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:41 Uhr.
Seite 4 von 4   « Erste     234   

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