![]() |
ListBox mit .ini und noch einiges.
Also, ich habe folgendes Problem bzw. möchte folgendes wissen.
Ich bin gerade dabei ein Program zu erstellen das einen Text in einem Memo feld darstell indem auf ein 'Item' einer ListBox klickt. Eigentlich funktioniert das alles noch bis hier hin, ABER ich will zusätzlich die funktion anbieten eigene Texte dazu zu speichern das dann automatisch einen neuen 'Item-'eintrag in der ListBox mit 'Wunschname' erstellt. Das kriege ich wahrscheinlich auch noch hin, aber hier kommt dann das Problem, ich weiß nicht wie ich diesen Eintrag abspeichern soll. Ich dachte daran das ganz einfach als textdokument in einem Unterordner zu speichern (was ich auch hinkriege) aber wie soll ich beim starten des Programs den Eintrag automatisch wiederherstellen? Ich will also alle Dateien in einem Unterordner mit Namen(Dateiname) in der Listbox darstellen und das auch so machen das wenn ich auf diesen 'selbsterstellten' Eintrag drauf klick, dass der Text in der Memo steht. Ich habe mir gedacht das man das irgendwie mit .ini Files hinkriegt. zb. das bei einem neuen Eintrag der Name und der Pfad des Eintrags/Datei in der .ini Datei abgespeichert wird. Und das beim laden dieser Pfad genutzt wird zum öffnen/lesen der Datei. .ini file aufbau: [Section] Blabla=blabla2 könnte aussehn beim Program: [NameDerDatei] Pfad=PfadDerDatei ------------------ Also kurz: 1. Wie könnte ich den [NameDerDatei] in eine ListBox laden? bzw. alle vorhandenen [NameDerDatei] , da es ja mehrere Einträge gibt. 2. Wie kann ich den PfadDerDatei mir so zu nutze machen, das ich beim anklicken von [NameDerDatei] in der ListBox der PfadDerDatei geladen wird? 3. Oder gibt eine andere möglichkeit an die ich nicht gedacht habe? Ich hoffe ihr versteht was ich meine. Na dann, danke falls ihr helfen könnt. |
Re: ListBox mit .ini und noch einiges.
Ein TStrings kennt die Methoden .SaveToFile() und .LoadFromFile()
|
Re: ListBox mit .ini und noch einiges.
Das hier ist jetzt auf eine abgeleitete Form bezogen, um die Fensterkoordinaten des jeweiligen Windows eines Benutzers direkt zu speichern (Achtung ! Prozedur ist verkürzt, ohne C+P Garantie !) :
Delphi-Quellcode:
Je nachdem, welchen Dateinamen man wählt, können damit recht einfach ganze User-"Profile" notfalls einfach umkopiert werden. In ähnlicher Weise können die Items der Listbox etc. behandelt werden.
procedure Tfrm.FormClose(Sender: TObject;
var Action: TCloseAction); var FensterIni : TIniFile; begin inherited; try FensterIni := TIniFile.Create(FensterDateiName); // Dateiname projektbezogen und global FensterIni.WriteInteger(Name,'Left',Left); FensterIni.WriteInteger(Name,'Top',Top); end; finally FensterIni.Free; end; Action := caFree; end; |
Re: ListBox mit .ini und noch einiges.
Zitat:
zu 1. ini.ReadSections(myListbox); // liest alle abschnitte aus der ini in myListbox zu 2. myListbox.LoadFromFile(filename); // lädt die daten aus filename in myListbox zu 3. z.B. XML, typisierte Dateien MfG |
Re: ListBox mit .ini und noch einiges.
|
Re: ListBox mit .ini und noch einiges.
ok danke erstmal hat mir schon geholfen, vorallem des 'ini.ReadSections(ListBox1.Items);' hab diese funktion nähmlich erst nicht verstanden aber momentan benutze ich sie.
ich zeig euch erstmal was ich sozusagen gebastelt habe.
Delphi-Quellcode:
ist jetzt ein wenig 'abgespeckt' werde dazu noch was schreiben (ist net schwierig) was den Text von Memo1 in die 'datei' reinschreibt.
procedure TForm1.Button3Click(Sender: TObject); //Buttonclick erstellt neuen eintrag in ini-file
var ini:Tinifile; // var, versteht sich von selbst. begin //... Ini:=TIniFile.Create('D:\data.ini'); //ini-file in D: namens data.ini, wird erstellt falls noch nicht vorhanden try Ini.WriteString(Edit1.Text,'Path','C:\Dokumente und Einstellungen\Andreas\Desktop\'+Edit1.Text+'.fdb'); //Schreibe String: Sectionname = Edit1.Text(dateiname-wunschname); Eigenschaft=Path; Daten von Path=Pfad+Wunschdateiname +.fdb endung (kann man mit Editor öffnen) Ini.ReadSections(ListBox1.Items); //Aktualisiert die LIstBox ^^ finally ini.Free; end; end; Dazu werd ich den code:
Delphi-Quellcode:
in Form1 OnActivate nochmal reinkopieren.
Ini.ReadSections(ListBox1.Items); //Aktualisiert die LIstBox ^^
Bis hier funktioniert noch alles gut aber ich habe noch ein Problem. Ich will ja das der Text der datei in ein Memo per OnClick/OnKeyUp/etc der ListBox geladen wird. Sonst habe ich das immer so gemacht: Beispiel ist mit OnClick:
Delphi-Quellcode:
Nur wenn ich einen neuen Eintrag erstelle kann ich doch nicht einfach 'eine neue Zeile' hinzufügen.
procedure TForm1.ListBox1Click(Sender: TObject);
begin If ListBox1.Selected[ZAHL] then Memo1.Lines.LoadFromFile('PfadDerDatei'); If ListBox1.Selected[AndereZAHL] then Memo1.Lines.LoadFromFile('PfadZurAnderenDatei'); .... end; Damit meine ich das ich nicht einfach das If ListBox1.Selected[AndereZAHL] then Memo1.Lines.LoadFromFile('PfadZurAnderenDatei'); einfach so in das Program '(r)einfügen' kann. Also brauche ich irgendeine Funktion die sagt
Delphi-Quellcode:
Das Funktioniert natürlich nicht.
If ListBox1.Selected[SectionName in der .ini File] then
Memo1.Lines.LoadFromFile(ListBox1.Selected[SectionName in der .ini File.ReadString(ListBox1.Selected[...],'Path','-')]); Aber hierzu ma die erklärung: Der ausgewählte name in der ListBox (ListBox1.Selected[...]) ist zugleich der Name der Section in der .ini File. Dann wird in die Memo1 die Daten der Eigenschaft der Section geladen (das hier ist dann der Pfad, falls nichts vorhanden wird jetzt in diesem Fall '-' geladen, was natürlich net geht). hmm ist glaub ich ein bisschen schwer zu verstehen, aber ich hoffe hier kapiert es einiger maßen ^^ kurz gesagt: Ich brauch eine Funktion die ich in ein Ereigniss der LIstBox einbauen kann, die bewirkt das beim anklicken/markieren eines Items der ListBox der dazugehörige Text in die Memo geladen wird. MfG |
Re: ListBox mit .ini und noch einiges.
hmm ncoh keine Antwort bekommen ^^ naja
hab da noch ein bisschen dran rumprobiert. Brauche nurnoch einen entscheidenden Abschnitt/Punkt um alles zum laufen zu kriegen. (sorry falls ich ein paar codeing probleme hab^^ aber es funktioniert)
Delphi-Quellcode:
Also das funktioniert, theoretisch würde ich das dann alles so aussehen lassen in einer OnClick/OnKeyUp/etc procedure der ListBox.
procedure blabla ...
var ini:TInifile; begin Ini:=TInifile.Create('D:\data.ini'); Memo2.Lines.LoadFromFile(Ini.ReadString(ListBox1.Items.Strings[3],'Path','')); end;
Delphi-Quellcode:
aber so wird es im endeffekt nicht korrekt funktionieren, deswegen brauch ich einen code and folgernder Stelle
procedure ...
var ini:TInifile; begin ini:=TIniFile.Create('D:\data.ini'); If ListBox1.Selected[0] then Memo2.Lines.LoadFromFile(Ini.ReadString(ListBox1.Items.Strings[0],'Path','')); If ListBox1.Selected[1] then Memo2.Lines.LoadFromFile(Ini.ReadString(ListBox1.Items.Strings[1],'Path','')); // usw ... end;
Delphi-Quellcode:
An dieser Stelle das 'X'
Memo2.Lines.LoadFromFile(Ini.ReadString(ListBox1.Items.Strings[X],'Path',''));
Und an dieser Stelle brauch ich etwas was sagt 'was gerade in der ListBox markiert ist', erst hab ich rumprobiert ob ich das mit ListBox1.Selected[] hinkrieg, hab ihc aber net wegen den zwei '[]', gibt es nicht einen einfachen 'trick' der sagt Listbox1.WasMarkiertIst;??? MfG |
Re: ListBox mit .ini und noch einiges.
Hallo Andreas,
vielleicht suchst du das hier:
Delphi-Quellcode:
Freundliche Grüße
procedure TDemoForm.ListBoxClick(Sender: TObject);
var fn: TFileName; begin with Sender as TListBox do if ItemIndex > -1 then begin fn := ini.ReadString(Items[ItemIndex], 'PATH', ''); Memo.Items.LoadFromFile(fn); end; end; |
Re: ListBox mit .ini und noch einiges.
Listbox Itemindex, was hatt das mit ini zu tun :gruebel:
|
Re: ListBox mit .ini und noch einiges.
Zitat:
ich glaub ich habs evtl. ein bisschen komplizierter aber es funktioniert. allerdings kommen manchma error wie zb. wenn iche min. 1 eintrag in der listbox habe und ich dann ins freie klicke, kommt fehler meldung 'Listenindex überschreitet das maximum -1', wird bei dir wahrscheinlich nicht der fall sein. und auserdem kommt bei mir beim close button ein error o.O muss aber wohl an was anderem liegen. also hier mein code ^^
Delphi-Quellcode:
also die zeile ist ja richtig bei mir geworden zumindestens ist es das gleiche wie bei dir.
procedure TForm1.ListBox1Click(Sender: TObject);
var ini:TInifile; begin Ini:=TInifile.Create('.\db\data.ini'); Memo2.Lines.LoadFromFile(Ini.ReadString(ListBox1.Items.Strings[Listbox1.ItemIndex],'Path','')); end; Memo2.Lines.LoadFromFile(Ini.ReadString(ListBox1.I tems.Strings[Listbox1.ItemIndex],'Path','')); und soviel ich weiß oder denk wird mit
Delphi-Quellcode:
der listenindex error entfernt. richtig?
with Sender as TListBox do
if ItemIndex > -1 then @Blackheart: ehm ka, ich glaub der ganze thread erklärts dir schon irgendwie ^^ |
Re: ListBox mit .ini und noch einiges.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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