AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

INI mit Schleife auslesen

Ein Thema von SoD · begonnen am 18. Mär 2009 · letzter Beitrag vom 19. Mär 2009
Antwort Antwort
Seite 1 von 3  1 23   
Benutzerbild von SoD
SoD

Registriert seit: 9. Dez 2008
Ort: Oberasbach
33 Beiträge
 
Delphi 2007 Professional
 
#1

INI mit Schleife auslesen

  Alt 18. Mär 2009, 13:29
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:
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;
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.

Kann es sein, dass ich in meinem Code etwas nicht berücksichtigt habe?

MfG,
SoD
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#2

Re: INI mit Schleife auslesen

  Alt 18. Mär 2009, 13:34
Du kannst dir doch aus einer Ini die Chapters in eine Liste laden, diese dann Chapter für Chapter durchgehen und die Informationen auslesen.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von SoD
SoD

Registriert seit: 9. Dez 2008
Ort: Oberasbach
33 Beiträge
 
Delphi 2007 Professional
 
#3

Re: INI mit Schleife auslesen

  Alt 18. Mär 2009, 13:39
Heißt das dann nicht auch, dass ich die eingelesenen Werte wieder irgenwo hinterlegen muss?

Brauch ich dazu ReadSection oder ReadSections?
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#4

Re: INI mit Schleife auslesen

  Alt 18. Mär 2009, 13:42
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:
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;
...probier es aus.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.753 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: INI mit Schleife auslesen

  Alt 18. Mär 2009, 13:46
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:
for i:=0 to anzahlFilme -1 do
  ListBoxFiles.Items.add(VideoIni.ReadString('Video'+IntToStr(i+1),'Desc','KEINE BESCHREIBUNG VORHANDEN');
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#6

Re: INI mit Schleife auslesen

  Alt 18. Mär 2009, 13:49
So kannst du zumindest alle Sections auslesen und verwenden:

Delphi-Quellcode:
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;
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.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von SoD
SoD

Registriert seit: 9. Dez 2008
Ort: Oberasbach
33 Beiträge
 
Delphi 2007 Professional
 
#7

Re: INI mit Schleife auslesen

  Alt 18. Mär 2009, 13:59
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:
[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=
Könnte ich mit so einer Struktur evtl. auf Grund laufen?
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#8

Re: INI mit Schleife auslesen

  Alt 18. Mär 2009, 14:05
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).
  Mit Zitat antworten Zitat
Benutzerbild von SoD
SoD

Registriert seit: 9. Dez 2008
Ort: Oberasbach
33 Beiträge
 
Delphi 2007 Professional
 
#9

Re: INI mit Schleife auslesen

  Alt 18. Mär 2009, 14:10
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.
  Mit Zitat antworten Zitat
Benutzerbild von SoD
SoD

Registriert seit: 9. Dez 2008
Ort: Oberasbach
33 Beiträge
 
Delphi 2007 Professional
 
#10

Re: INI mit Schleife auslesen

  Alt 18. Mär 2009, 14:35
Ich hab es mal mit folgender For-Schleife jetzt versucht:

Delphi-Quellcode:
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;
Die INI hab ich auch verändert:

Code:
[Videoindex]
Videos=3

[Paths]
Path=
Path=
Path=

[Name]
Name=
Name=
Name=

[Desc]
Desc=
Desc=
Desc=
Nur bekomm ich jetzt "E2010 Inkompatible Typen: 'TStrings' und 'string'" bei

Delphi-Quellcode:
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;
Das sind die Fehler, von denen ich geredet hab. Er kompiliert es mir gar nicht erst, weil auf einmal Typen nicht mehr zusammenpassen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:51 Uhr.
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