AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListBox mit .ini und noch einiges.

Ein Thema von xShadowBoZz · begonnen am 17. Jul 2008 · letzter Beitrag vom 17. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von xShadowBoZz
xShadowBoZz

Registriert seit: 19. Jan 2008
Ort: Deutschland ~.~
80 Beiträge
 
Delphi 7 Enterprise
 
#1

ListBox mit .ini und noch einiges.

  Alt 17. Jul 2008, 00:13
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.
Andreas
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: ListBox mit .ini und noch einiges.

  Alt 17. Jul 2008, 00:25
Ein TStrings kennt die Methoden .SaveToFile() und .LoadFromFile()
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: ListBox mit .ini und noch einiges.

  Alt 17. Jul 2008, 01:29
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:
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;
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von p0w3r5tr34m3r
p0w3r5tr34m3r

Registriert seit: 18. Aug 2003
Ort: Monheim am Rhein
153 Beiträge
 
RAD-Studio 2009 Pro
 
#4

Re: ListBox mit .ini und noch einiges.

  Alt 17. Jul 2008, 06:43
Zitat von xShadowBoZz:
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?
falls du das mit inis machen willst würde ich vorschlagen das du dir die Unit IniFiles in der OH anguckst...


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
Florian Cülter
ich bin ein notorischer alles-klein-schreiber!

der 100. Beitrag nach 3 Jahren 25 Wochen und einem Tag
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: ListBox mit .ini und noch einiges.

  Alt 17. Jul 2008, 07:58
Ini Tutorial
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von xShadowBoZz
xShadowBoZz

Registriert seit: 19. Jan 2008
Ort: Deutschland ~.~
80 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: ListBox mit .ini und noch einiges.

  Alt 17. Jul 2008, 14:08
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:
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;
ist jetzt ein wenig 'abgespeckt' werde dazu noch was schreiben (ist net schwierig) was den Text von Memo1 in die 'datei' reinschreibt.
Dazu werd ich den code:
      Ini.ReadSections(ListBox1.Items); //Aktualisiert die LIstBox ^^ in Form1 OnActivate nochmal reinkopieren.
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:
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;
Nur wenn ich einen neuen Eintrag erstelle kann ich doch nicht einfach 'eine neue Zeile' hinzufügen.
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:
If ListBox1.Selected[SectionName in der .ini File] then
Memo1.Lines.LoadFromFile(ListBox1.Selected[SectionName in der .ini File.ReadString(ListBox1.Selected[...],'Path','-')]);
Das Funktioniert natürlich nicht.
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
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von xShadowBoZz
xShadowBoZz

Registriert seit: 19. Jan 2008
Ort: Deutschland ~.~
80 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: ListBox mit .ini und noch einiges.

  Alt 17. Jul 2008, 17:10
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:
procedure blabla ...
var ini:TInifile;
begin
  Ini:=TInifile.Create('D:\data.ini');
  Memo2.Lines.LoadFromFile(Ini.ReadString(ListBox1.Items.Strings[3],'Path',''));
end;
Also das funktioniert, theoretisch würde ich das dann alles so aussehen lassen in einer OnClick/OnKeyUp/etc procedure der ListBox.

Delphi-Quellcode:
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;
aber so wird es im endeffekt nicht korrekt funktionieren, deswegen brauch ich einen code and folgernder Stelle
  Memo2.Lines.LoadFromFile(Ini.ReadString(ListBox1.Items.Strings[X],'Path','')); An dieser Stelle das 'X'
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
Andreas
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: ListBox mit .ini und noch einiges.

  Alt 17. Jul 2008, 20:32
Hallo Andreas,

vielleicht suchst du das hier:

Delphi-Quellcode:
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;
Freundliche Grüße
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: ListBox mit .ini und noch einiges.

  Alt 17. Jul 2008, 21:31
Listbox Itemindex, was hatt das mit ini zu tun
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von xShadowBoZz
xShadowBoZz

Registriert seit: 19. Jan 2008
Ort: Deutschland ~.~
80 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: ListBox mit .ini und noch einiges.

  Alt 17. Jul 2008, 22:26
Zitat von marabu:
Hallo Andreas,

vielleicht suchst du das hier:

Delphi-Quellcode:
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;
Freundliche Grüße
ok thx trotzdem, habs vor ein paar stunden selber hingekriegt als niemand geschrieben hat xD
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:
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;
also die zeile ist ja richtig bei mir geworden zumindestens ist es das gleiche wie bei dir.
Memo2.Lines.LoadFromFile(Ini.ReadString(ListBox1.I tems.Strings[Listbox1.ItemIndex],'Path',''));

und soviel ich weiß oder denk wird mit
Delphi-Quellcode:
  with Sender as TListBox do
    if ItemIndex > -1 then
der listenindex error entfernt. richtig?

@Blackheart:
ehm ka, ich glaub der ganze thread erklärts dir schon irgendwie ^^
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:29 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