Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DJ BPM Programm,brauche dringend Hilfe!!! (https://www.delphipraxis.net/5969-dj-bpm-programm-brauche-dringend-hilfe.html)

joe.fresh 24. Jun 2003 20:56


DJ BPM Programm,brauche dringend Hilfe!!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!
Muss ein Programm für die Schule machen.
Und zwar sollen in das Programm ein Interpret(edit1.text),Titel(edit2.text) und Geschwindigkeit(edit3.text)
eines Songs aufgenommen werden und gespeichert bleiben.
Gespeichert soll alles in einen File oder in ein Array[1..300] das in einem File gespeichert wird.Anschliessend soll man auch wieder alles einzeln löschen können.(Also ein Interpret,Titel und eine Geschwindigkeit eines einzelnen Liedes sollen gelöscht werden]

Was ich bereits geschafft habe ist :
Um alles leichter Anzeigen zu können werden die eingegebenen
Interpreten und Titel in einer Listbox angezeigt.
Und es können Einträge aus der Listbox gelöscht werden.


Kann mir jemand bei dem Programm Code helfen bzw ihn ergänzen?

Danke im Vorraus

Joe.Fresh

Hier sollen die Titel hinzugefügt werden und dann in einer Datei gespeichert werden.

Code:
procedure TForm1.Button2Click(Sender: TObject);

var hilf,hilf2,hilf3:string ; zaehler:integer;

begin

hilf:=edit1.text;
hilf2:=edit2.text;
hilf3:=' - ';
if edit1.text=''
then showmessage ('Bitte erst den Namen eingeben')
else listbox1.items.add(hilf+hilf3+hilf2);
zaehler:=listbox1.items.count;
end;

Hier sollen die gespeicherten Daten einzeln gelöscht werden.
Code:
procedure TForm1.Button3Click(Sender: TObject);

var i:integer;
begin
if listbox1.itemindex = -1
then showmessage ('Bitte erst Eintrag markieren')
else showmessage ('Eintrag gelöscht');
for i:=0 to 300 do
begin
if listbox1.itemindex = i
then listbox1.items.delete (i);
end;

end;

und hier sollen die gespeicherten Daten wieder angezeigt werden.
Am besten in den 3 Textfeldern.
Code:
procedure TForm1.Button4Click(Sender: TObject);

begin

end;

Christian Seehase 24. Jun 2003 21:08

Moin Joe,

mal eben zu Punkt 2:
Die for-Schleife brauchst Du da gar nicht.
Wenn ListBox1.ItemIndex <> -1 ist, kannst Du diesen Wert auch direkt zum löschen verwenden.

Delphi-Quellcode:
// Statt der for Schleife
ListBox1.Items.Delete(ListBox1.ItemIndex);
Da Du ja vorher geprüft hast, das es ein gültiger Index ist sollte da so gehen.
Wenn, müsste die Schleife von 0 bis ListBox1.Items.Count-1 gehen, da der Index hier nullbasiert ist. Passieren würde in Deinem Beispiel zwar nichts, aber es ist sauberer.

Habt ihr irgendeine Vorgabe, wie das Array aussehen soll?

joe.fresh 24. Jun 2003 21:13

Danke schonmal für das mit der Schleife.
Ja das bei dem Array is eigentlich egal

Hauptsache so in der Art

teintrag=Record
interpret,titel,geschwindigkeit:string[100];

und das vielleicht das ganze array so maximal
1000 felder hat.aller höchstens.


mfg

joe.fresh

Christian Seehase 24. Jun 2003 21:24

Moin Joe,

was das Speichern angeht:
Welche Zugriffe auf Dateien habt ihr denn behandelt?
Es gibt da verschiedene Möglichkeiten, die zwar intern gleich funktionieren, aber nach aussen hin doch ganz anders zu handhaben sind.
Wäre vielleicht nicht so passend, die falsche Variante hier anzubieten, die ihr noch gar nicht hattet.

joe.fresh 24. Jun 2003 21:35

Hmm wir haben die ganz normalen
standardmässigen ein und ausgabe routinen
behandelt.also so sachen mit assign file
write und read usw.
das alles in einer datei. z b datei.dat gespeichert wird.
also so die anfänge von speichern.
also nur normale dateien keine textdateien.

mfg

dominik

Christian Seehase 25. Jun 2003 14:57

Moin Dominik,

sorry, aber mit diesen Funktionen hab' ich leider keine sonderliche Erfahrung.
Ich hatte sie schon "befürchtet".

Das sollte sich mal jemand ansehen, der Dir da gezielt helfen kann.

Christian Seehase 25. Jun 2003 15:39

Moin Dominik,

zwei Sachen fallen mir da noch ein
  1. Was ist hiermit gemeint:
    "und hier sollen die gespeicherten Daten wieder angezeigt werden. "
    Die Daten stehen doch in der Listbox, was soll da zusätzlich mit angezeigt werden?
  2. Wenn Du beim Einfügen in die Listbox einfach nur die drei Felder hintereinander setzt, sähe das etwas seltsam aus. Du müsstest sie also mindestens mit Leerzeichen trennen.

BTW: Gibt es eine genaue Aufgabenstellung für dieses Programm?

Christian Seehase 25. Jun 2003 15:46

Moin Dominik,

zum Thema Dateien mit Assign usw. kannst Du mal hier schauen

Filmarchiv in Delphi

joe.fresh 25. Jun 2003 15:51

ja das mit der ausgabe steht nur da,
es soll halt der 4te button angeklickt werden und
dann die daten ausgegeben werden in die 3 textfelder.

und mir is eingefallen eigentlich könnte man ja nur die listbox in einen file speichern und alles ohne arrays machen,oder?
und dann wie du gesagt hast alles einfach mit leerzeichen in die
listbox schreiben oder?

mfg


dominik

joe.fresh 25. Jun 2003 15:57

hehe,das is einer aus meiner klasse :-)

mfg

dominik

Niko 25. Jun 2003 16:10

Zitat:

Zitat von joe.fresh
und mir is eingefallen eigentlich könnte man ja nur die listbox in einen file speichern und alles ohne arrays machen,oder?

Das wäre zwar möglich, allerdings müsstes du dann sicherstellen, dass Interpret, Titel, etc. durch ein Zeichen getrennt sind, das in ihnen selbst nicht vorkommt, aber in der Listbox darstellbar ist - dürfte schwierig werden...

Andere Möglichkeiten:
Daten bei jeder Eingabe parallel zur Speicherung in der Listbox noch in einem Array speichern und dieses dann in eine Datei schreiben oder
Daten bei jeder Eingabe gleich in eine typisierte Datei schreiben.

Christian Seehase 25. Jun 2003 16:14

Moin Dominik,

Zitat:

Zitat von joe.fresh
und mir is eingefallen eigentlich könnte man ja nur die listbox in einen file speichern und alles ohne arrays machen,oder?

Kann man ;-)
was ich aber wichtig finde: Du bist von alleine drauf gekommen.

Deshalb allerdings auch meine Frage bezüglich der Aufgabenstellung.
Wenn die Aufgabe vorsieht, dass ihr das mit den Datei Prozeduren, und Arrays macht hilft diese Überlegung leider nicht viel weiter.

Als Trennzeichen kann aber nur ein Zeichen fungieren, dass in den eigentlichen Daten nicht zugelassen ist.

Zitat:

Zitat von joe.fresh
hehe,das is einer aus meiner klasse :-)

Das hatte ich mir noch dem Posting auch fast gedacht ;-)

joe.fresh 25. Jun 2003 16:16

Ja habe die durch ein - getrennt,wird auch
dann etwa so in der listbox angezeigt

z.b.

50Cent - 21Questions - 93

was muss ich eingeben damit das in einem file gespeichert
wird und dann beim nächsten programmstart noch sichtbar ist?


mfg

joe.fresh


Code:
hilf:=edit1.text;
hilf2:=edit2.text;
hilf3:=' - ';
hilf4:=edit3.text;
if edit1.text=''
then showmessage ('Bitte erst den Namen eingeben')
else listbox1.items.add(hilf+hilf3+hilf2+hilf3+hilf4);

joe.fresh 25. Jun 2003 16:20

Hi Christian!
Ja die Aufgabestellung ist eigentlich dass
etwas eingegeben wird und dann in einem File gespeichert wird
und dann auch wieder aufgerufen werden kann.
auch nachdem das Programm geschlossen worden ist

man kann arrays benutzten,muss aber zum glück nicht.

meinst du ich könnte das mit dem direk speichern der listbox
hinbekommen?


mfg

dominik

Christian Seehase 25. Jun 2003 16:24

Moin Dominik,

ich könnte es Dir natürlich direkt hier schreiben, halte es aber für sinnvoller es, vorerst, mal nicht zu tun (sollte ich mich irren ... ;-) )

Schau mal in der Hilfe unter TListBox, mit besonderem Augenmerk auf die Eigenschaften, und deren Methoden.

Soweit wie Du jetzt bist dürfte das nicht allzu schwierig werden.

joe.fresh 25. Jun 2003 16:32

hi!habe nur eine sache gefunden
bis auf dass jetzt alle einträge sortiert
in die listbox eingetragen werden.
das hab ich auch shcon lange gesucht.

aber das hier is mir aufgefallen
Destination.Assign(Source);

vielleicht kann man ja einfach die listbox in den file kopieren?

mfg

dominik

Christian Seehase 25. Jun 2003 16:39

Moin Dominik,

OK, noch ein Hinweis:
In welcher Eigenschaft der Listbox stehen die Daten?

joe.fresh 25. Jun 2003 16:43

in den items,oder?
also muss ich die immer die items in den file speichern?

dominik

Christian Seehase 25. Jun 2003 16:57

Moin Dominik,

so isses ;-)

Und wenn Du Dir mal anschaust, welche Methoden die Items haben, dürfte es auch nicht schwer sein herauszufinden, wie Du das machen kannst.

joe.fresh 25. Jun 2003 17:11

property Data: Pointer;

???
ansonsten hab ich keine ahnung.


mfg

dominik

Christian Seehase 25. Jun 2003 17:21

Moin Dominik,

TListBox.Items nicht TListView.Items ;-)

[EDIT]
Ausserdem: Methoden, nicht Eigenschaften
[/EDIT]

joe.fresh 25. Jun 2003 17:29

hi!
ich finde da einfach nix.
kannst du nicht mal einfach ein paar zeilen vom coe hinschreiben?

mfg

dominik

Christian Seehase 25. Jun 2003 18:04

Moin Dominik,

dann mal die Auflösung ;-)

Die TListBox.Items sind vom Typ TStrings, und TStrings hat die Methode LoadFromFile.
Ergo:

Delphi-Quellcode:
ListBox1.Items.LoadFromFile('Hier der Pfad zu der Datei');

joe.fresh 25. Jun 2003 18:07

ah danke dir!!!

ok und speichern in die datei is dann
Code:
listbox1.item.savetofile (' ');
oder wie?


mfg

dominik

Daniel B 25. Jun 2003 18:17

Hallo,

ja mit SaveToFile('C:\Test.txt');

Grüsse, Daniel :hi:

joe.fresh 25. Jun 2003 18:52

hi!bis jetzt ist alles glatt gelaufen
aber beim versuch alles zu speichern komm
die meldung dass die datei nicht erstellt werden kann.
wieso das?
hier ein teil vom quelltext.



danke

dominik

Code:
type
tdatei = file;
var speicher :tdatei;


procedure TForm1.Button1Click(Sender: TObject);
var hilf,hilf2,hilf3,hilf4:string;
begin
//hinzufügen
hilf:=edit1.text;
hilf2:=edit2.text;
hilf3:=' - ';
hilf4:=edit3.text;
if edit1.text=''
then showmessage ('Bitte erst den Namen eingeben')
else listbox1.items.add(hilf+hilf3+hilf2+hilf3+hilf4);

assignfile(speicher,'speicher.dat');
{$I-}
Reset (speicher);
{$I+}
if ioresult<>0 then rewrite(speicher);

listbox1.items.savetofile ('speicher.dat');
closefile(speicher);
end;
und hier der button der dann die listbox aus dem file lädt.
Code:
procedure TForm1.Button4Click(Sender: TObject);
begin
ListBox1.Items.LoadFromFile('speicher.dat');
end;

Christian Seehase 25. Jun 2003 18:55

Moin Dominik,

weil Du Dir das ganze Assing, Rewrite usw. sparen kannst, ausserdem damit sperrst Du die Datei.

joe.fresh 25. Jun 2003 19:00

jawuuhl es klappt!

boah,danke chris du hast mir echt sau geholfen!!!!
ich werde jetzt erstmal rausgehen und später noch ein
paar features dazu machen!
DANKE DANKE DANKE


bis dann
dominik


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