![]() |
INI mit Schleife auslesen
Hallo DPler,
ich soll einen kleinen Videoplayer basteln, in dem einige Schulungsvideos abgespielt werden können. Dabei soll sich die Liste aus einer INI die zur Verfügung stehenden Videos ziehen. Wenn ich das statisch im Code aufrufe, klappt das auch. Nur wenn jetzt weitere Videos hinzukommen sollten, würden diese nicht automatisch in die Liste geladen werden. Der Code vom Player müsste also immer wieder angepasst werden. Ich hab das Forum schon durchforstet, jedoch nichts gefunden, das mir weitergeholfen hätte, da es meist nur ums Schreiben einer INI ging, oder die Schleife, die ich verwenden müsste (Brauch ich doch eine, oder?) in den Posts nicht enthalten war. Bisher sieht das auslesen der INI so aus (ohne Schleife):
Delphi-Quellcode:
Ich hab auch schon versucht die Schleife selbst zu basteln, aber entweder Delphi meckert wegen einer falschen Syntax, kompiliert nicht (Compiler-Fehler) oder ich renn in eine Endlosschleife.
procedure TForm1.ListBoxFilesClick(Sender: TObject);
begin VideoIni := TIniFile.Create(PChar(ExtractFilePath(ParamStr(0)) + 'files.ini')); case ListBoxFiles.ItemIndex of 0: try MemoDesc.Text := VideoIni.ReadString('Video1','Desc','KEINE BESCHREIBUNG VORHANDEN'); //Beschreibung aus INI lesen MediaPlayerControl.FileName := VideoIni.ReadString('Video1','Path',''); //Dateipfad aus INI lesen MediaPlayerControl.Open; except error_with_file; //Falls was nicht klappt, Fehlermeldung ausgeben end; 1: try MemoDesc.Text := VideoIni.ReadString('Video2','Desc','KEINE BESCHREIBUNG VORHANDEN'); MediaPlayerControl.FileName := VideoIni.ReadString('Video2','Path',''); MediaPlayerControl.Open; except error_with_file; end; 2: try MemoDesc.Text := VideoIni.ReadString('Video3','Desc','KEINE BESCHREIBUNG VORHANDEN'); MediaPlayerControl.FileName := VideoIni.ReadString('Video3','Path',''); MediaPlayerControl.Open; except error_with_file; end; end; end; Kann es sein, dass ich in meinem Code etwas nicht berücksichtigt habe? MfG, SoD |
Re: INI mit Schleife auslesen
Du kannst dir doch aus einer Ini die Chapters in eine Liste laden, diese dann Chapter für Chapter durchgehen und die Informationen auslesen.
|
Re: INI mit Schleife auslesen
Heißt das dann nicht auch, dass ich die eingelesenen Werte wieder irgenwo hinterlegen muss?
Brauch ich dazu ReadSection oder ReadSections? |
Re: INI mit Schleife auslesen
Hier hast du aus der Hilfe ein Besipiel, darin sind alle Methoden enthalten und kommen zur Anwendung die du brauchst....und nein eine Schleife brauchts du nicht.
Delphi-Quellcode:
...probier es aus.
Das folgende Beispiel liest Informationen aus der Datei WIN.INI in drei Listenfelder eines Formulars.
uses IniFiles; procedure TForm1.FormActivate(Sender: TObject); var AppIni: TIniFile; begin AppIni := TIniFile.Create('WIN.INI'); AppIni.ReadSections(ListBox1.Items); AppIni.ReadSection('Ports',Listbox2.Items); AppIni.ReadSectionValues('Ports',ListBox3.Items); AppIni.Free; end; |
Re: INI mit Schleife auslesen
Hallo,
Du könntest Dir auch einen Key für die Anzahl der Filme anlegen und diesen zuerst auslesen. Dann kannst Du in einer Schleife die Filme auslesen und in die Liste eintragen.
Delphi-Quellcode:
Grüße
for i:=0 to anzahlFilme -1 do
ListBoxFiles.Items.add(VideoIni.ReadString('Video'+IntToStr(i+1),'Desc','KEINE BESCHREIBUNG VORHANDEN'); Klaus |
Re: INI mit Schleife auslesen
So kannst du zumindest alle Sections auslesen und verwenden:
Delphi-Quellcode:
So wie ich das sehe möchtest du aber beim anwählen eines filmes weitere Details anzeigen lassen. Dann solltest du das füllen der Liste global machen.
var VideoLst : TIniFile;
Lst : TStringList; i : Integer; begin VideoLst := TIniFile.Create(PChar(ExtractFilePath(ParamStr(0)) + 'files.ini')); Lst := TStringList.Create; try VideoLst.ReadSections(Lst); for i := 0 to Lst.Count - 1 do // Videonamen z.b. in Listbox laden ListBox1.Items.Add(VideoLst.ReadString(Lst.Strings[i], 'Filmname', '')); finally Lst.Free; VideoLst.Free; end; end; |
Re: INI mit Schleife auslesen
Hmm... Ich werd das Gefühl nicht los, dass meine Struktur der INI unvorteilhaft sein könnte... Wenn ein neues Video hinzukommen sollte, soll halt nur die INI per Hand erweitert werden müssen und das Programm zeigt beim Nächsten Start einfach den neuen Eintrag mit an.
Meine verwendete INI ist folgendermaßen aufgebaut:
Code:
Könnte ich mit so einer Struktur evtl. auf Grund laufen?
[Video1]
Path= {Pfad zum Video} Name= {Titel, der in der ListBox erscheint} Desc= {Beschreibungstext, der im Memo erscheint} [Video2] Path= Name= Desc= [Video3] Path= Name= Desc= |
Re: INI mit Schleife auslesen
Sieht doch gut aus (auch wenn ich bei so einer Struktur ein XML-File vorziehen würde).
Über ReadSections holst du dir die Namen der einzelnen Sektionen. Den Inhalt der Listbox kannst du dann über eine for-Schleife. Im OnClick-Ereigniss der Listbox kannst du dir dann mit ReadString die entsprechenden Daten holen (Mit Hilfe des ItemIndexes und evtl. Format). |
Re: INI mit Schleife auslesen
Mit XML hab ich auch schon vorher rumgetüftelt, aber ich hab das nicht so recht gerafft, wie ich das XML als Datenquelle ausles und damit ListBox, Memo und MediaPlayer speise, sonst wär's mir auch lieber gewesen.
|
Re: INI mit Schleife auslesen
Ich hab es mal mit folgender For-Schleife jetzt versucht:
Delphi-Quellcode:
Die INI hab ich auch verändert:
procedure TForm1.ListBoxFilesClick(Sender: TObject);
var I: Integer; begin VideoIni := TIniFile.Create(PChar(ExtractFilePath(ParamStr(0)) + 'files.ini')); for I := 0 to VideoIni.ReadInteger('Videoindex','Videos',0) - 1 do begin MemoDesc.Text := VideoIni.ReadSection('Desc','Desc'); MediaPlayerControl.FileName := VideoIni.ReadSection('Paths','Path'); MediaPlayerControl.Open; end;
Code:
Nur bekomm ich jetzt "E2010 Inkompatible Typen: 'TStrings' und 'string'" bei
[Videoindex]
Videos=3 [Paths] Path= Path= Path= [Name] Name= Name= Name= [Desc] Desc= Desc= Desc=
Delphi-Quellcode:
Das sind die Fehler, von denen ich geredet hab. Er kompiliert es mir gar nicht erst, weil auf einmal Typen nicht mehr zusammenpassen.
for I := 0 to VideoIni.ReadInteger('Videoindex','Videos',0) - 1 do
begin MemoDesc.Text := VideoIni.ReadSection('Desc','Desc'); //Hier und MediaPlayerControl.FileName := VideoIni.ReadSection('Paths','Path'); //Hier meldet Delphi Fehler MediaPlayerControl.Open; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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