Autor Beitrag
Desperado
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 21.01.13 19:54 
Hallo Zusammen,
ich muss im Rahmen meines Studiums eine Abschlussarbeit in Delphi schreiben. Thema ist die Erstellung einer Musik- und Videosammlung. Nun verzweifel ich gerade an einer Stelle und hoffe, dass man mir hier weiterhelfen kann.

Zu den einzelnen Stücken wird jeweils: Interpret, Titel, Jahr und Art(Musik oder Video) erfasst. Es soll möglich sein zwischen den einzelnen Datensätzen zu navigieren (Erster, Nächster, Vorheriger und Letzter). Das ist soweit auch kein Problem. Jetzt soll ich jedoch eine zusätzliche Auswahl ermöglichen, sodass nur Videos, nur Musik oder Alles angezeigt wird. Ich habe dafür, wie bereits für die "Art" eine RadioGroup erstellt. Wie schaffe ich es nun, dass beispielsweise bei Auswahl "nur Videos", wenn ich auf meinen Button "erster Datensatz" klicke, das erste Video aus den gesamten Datensätzen angezeigt wird. Mit Schleifen bin ich leider bisher nicht zu einem Erfolg gekommen.

Ein Beispiel für den Button btnErster:


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
 procedure TForm1.btnErsterClick(Sender: TObject);
 begin
 if radiogroup2.itemindex=2 then
 
  btnErster.Visible:=true;
  btnNaechster.Visible:=true;
  btnVorheriger.Visible:=true;
  btnLetzter.Visible:=true;
  lblsongnummer.Caption:='1';
with aSammlung[1do
begin
    edtInterpret.Text:=Interpret;
    edtTitel.Text:=Titel;
    edtAlbum.Text:=Album;
    begin
      case Art of
      Musik: RadioGroup1.ItemIndex:=0;
      Video: RadioGroup1.ItemIndex:=1;
    end//case
    cBox1.Text:=Genre;
    edtJahr.Text:=IntToStr (Jahr);
    edtDauerStunden.Text:=IntToStr (DauerStunden);
    edtDauerMinuten.Text:=IntToStr (DauerMinuten);
    edtDauerSekunden.Text:=IntToStr (DauerSekunden);
    edtSpeicherort.text:=Speicherort;

end;
nIndex:=1
end//with aSammlung[1] do
end;
end;




Ich will jetzt, dass bei RadioGroup2=0 der erste Datensatz angezeigt wird, bei dem RadioGroup1=0 ist und bei RadioGroup2=1 der erste Datensatz, bei dem RadioGroup1=1 ist

Moderiert von user profile iconMartok: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Di 22.01.2013 um 11:13
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: Mo 21.01.13 21:24 
Hallo und :welcome:

Sofern ich nichts übersehen habe, kann ich mit Deinem "Quellcode-Auszug" nichts anfangen.
Soll heissen, ich sehe nur Zuweisungen, aber nicht, wie Du an Deine Daten kommst.

Vom Grundsatz her muss Du Deine Datenmenge auf die gewünschte Auswahl reduzieren (Sinngemäss "Select * from Tabelle where Sparte = Wunsch"), dann musst Du keine Verrenkungen machen.

Die Hauptfrage dürfte daher sein:
Verwendest Du eine Datenbank oder eine andere Lösung?

_________________
Es kompilert, wir können ausliefern.
Und es kompiliert wieder - das Update ist fertig - bitte 100 Euro ;-)
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 21.01.13 22:18 

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Desperado Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 22.01.13 01:59 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
procedure TForm1.btnSpeichernClick(Sender: TObject);
begin
 if (StrToInt(edtJahr.Text)<2014)                                   // Nur gültige Daten zulassen
 and (StrToInt(edtDauerSekunden.Text)<61)                           // Nur gültige Sekundenzahlen zulassen
 and (StrToInt(edtDauerMinuten.Text)<61)  then                      // Nur gültige Minutenzahlen zulassen
   begin
    if bNeu then
    begin
    nAnzahl:=nAnzahl+1;
    nIndex:=nAnzahl;
    bNeu:=false
   end;
  btnErster.Visible:=true;
  btnNaechster.Visible:=true;
  btnVorheriger.Visible:=true;
  btnLetzter.Visible:=true;
  lblSongnummer.Caption:=IntToStr(nIndex);
with aSammlung[nIndex] do
begin
    interpret:=edtInterpret.Text;
    Titel:=edtTitel.Text;
    Album:=edtAlbum.Text;
    begin
     case RadioGroup1.ItemIndex of
    0: Art:=Musik;
    1: Art:=Video;
    end//case
    Genre:=cbox1.Text;
    Jahr:= StrToInt(edtJahr.Text);
    DauerStunden:=StrToInt (edtDauerStunden.Text);
    DauerMinuten:=StrToInt (edtDauerMinuten.Text);
    DauerSekunden:=StrToInt (edtDauerSekunden.Text);
    Speicherort:= edtSpeicherort.Text;
  end;
end//with aSammlung[nIndex] do




So speicher ich meine Datensätze ein (Ich hoffe das ist das was du meintest). Dabei wird bNeu= True gesetzt, wenn man auf den Button "neuer Datensatz" klickt. Prinzipiell geht es mir ja jetzt nur darum, dass das Programm zum Index 1 springt und prüft, ob es sich um ein Video handelt. Falls dem so ist soll der ganze Datensatz angezeigt werden, wenn nicht wird der Datensatz mit dem Index 2 darauf geprüft, bis sich irgendwann eins findet.
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Di 22.01.13 09:14 
Vielleicht sollte man künftig Logik und Darstellung von einander trennen, aber das soll jetzt nicht das Thema sein. Das Einfachste dürfte IMO eine sequentielle Suche sein, in Pseudocode:
ausblenden Quelltext
1:
2:
3:
Auf Listenanfang
solange nicht Listenende und Kriterien nicht erfüllt
  nächstes Listenelement

Dazu kann man noch z.B. eine Bool'sche Variable mitführen, die angibt, ob es einen Treffer gab.

Für diesen Beitrag haben gedankt: Desperado
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: Di 22.01.13 23:38 
user profile iconDesperado hat folgendes geschrieben Zum zitierten Posting springen:
So speicher ich meine Datensätze ein (Ich hoffe das ist das was du meintest). Dabei wird bNeu= True gesetzt, wenn man auf den Button "neuer Datensatz" klickt. Prinzipiell geht es mir ja jetzt nur darum, dass das Programm zum Index 1 springt und prüft, ob es sich um ein Video handelt. Falls dem so ist soll der ganze Datensatz angezeigt werden, wenn nicht wird der Datensatz mit dem Index 2 darauf geprüft, bis sich irgendwann eins findet.

Nein, die Frage bleibt nach wie vor bestehen.

Ich sehe Zuweisungen im Sinne von
ausblenden Delphi-Quelltext
1:
  Genre:=cbox1.Text;					


Aber dies hat mit dem speichern der Daten noch gar nichst zu tun, zumindest nicht direkt.
Aktuell befüllst Du ein Array - mehr geschieht (anscheinend) noch nicht.

Willst Du also aktuell Deine Daten im Array sortieren oder, oder, oder...?


Darum nochmals:
Verwendest Du eine Datenbank oder eine eine andere Lösung?
Zitat:
Vielleicht sollte man künftig Logik und Darstellung von einander trennen, aber das soll jetzt nicht das Thema sein.
Wie wahr, aber eine logische Logik ist für mich noch nicht wirklich implementiert...

_________________
Es kompilert, wir können ausliefern.
Und es kompiliert wieder - das Update ist fertig - bitte 100 Euro ;-)