Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TRadioGroup verschachteln
Desperado - Mo 21.01.13 19:54
Titel: TRadioGroup verschachteln
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:
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[1] do begin edtInterpret.Text:=Interpret; edtTitel.Text:=Titel; edtAlbum.Text:=Album; begin case Art of Musik: RadioGroup1.ItemIndex:=0; Video: RadioGroup1.ItemIndex:=1; end; 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; 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
Martok: Code- durch Delphi-Tags ersetztModeriert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Di 22.01.2013 um 11:13
Blawen - 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?
Desperado - Di 22.01.13 01:59
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) and (StrToInt(edtDauerSekunden.Text)<61) and (StrToInt(edtDauerMinuten.Text)<61) then 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; Genre:=cbox1.Text; Jahr:= StrToInt(edtJahr.Text); DauerStunden:=StrToInt (edtDauerStunden.Text); DauerMinuten:=StrToInt (edtDauerMinuten.Text); DauerSekunden:=StrToInt (edtDauerSekunden.Text); Speicherort:= edtSpeicherort.Text; end; end; |
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 - 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:
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.
Blawen - Di 22.01.13 23:38
Desperado hat folgendes geschrieben : |
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
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...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!