Autor |
Beitrag |
Massa
      
Beiträge: 25
|
Verfasst: Do 08.01.09 18:07
Hallo zusammen.
Ich habe eine Liste erstellt in der Buchtitel, mit dessen Autor und sowas steht.
Diese habe ich als txt-Datei gespeichert und mit LoadFromFile in ein Memofeld kopiert.
Aus dem Memofeld werden dann die einzelnen Angaben wie Titel und Autor in einzelne Editfelder geschrieben.
Sortiert habe ich sie auch, und zwar nach Titel, doch nun tut sich bei mir das Problem auf, dass ich nicht weiß,
wie ich diese Aktualisierung auch in mein Memofeld bringe.
Also im Memofeld steht sozusagen noch die alte "Version" von der Bücherliste.
Ich brauche dabei unbedingt Hilfe.
Danke im Voraus
Gruß
Massa
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 08.01.09 18:09
Wie sortierst du denn? Da müsstest du schon den Quelltext zeigen.
Eine ListView wäre vermutlich besser geeignet, diese kann auch schon selbst sortieren.
|
|
Massa 
      
Beiträge: 25
|
Verfasst: Do 08.01.09 19:04
Hallo jaenicke und danke für deine Antwort.
Hier das Sortieren:
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:
| procedure SortListe.sort; var getauscht:boolean; a, b:tSortelement; begin repeat self.tofirst; getauscht:=false; repeat a:=self.getObject; self.next; if not self.isbehind then if self.getObject.kleiner(a) then begin b:=self.getObject; self.previous; self.update(b); self.next; self.update(a); getauscht:=true; end; until self.isBehind; until not getauscht; end; |
Wie eben schon geschrieben, wird nur in den Editfeldern die richtige Reihenfolge angezeigt, jedoch nicht im Memofeld.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 08.01.09 19:08
Ich meinte vor allem den Zusammenhang zwischen den Daten im Memo, in den Edits und der sortierten Liste. Ich meine, du schreibst die sortierten Daten ja anscheinend nicht ins Memo wieder.
So ganz weiß ich auch noch nicht, wie du das mit den Edits meinst.
|
|
Massa 
      
Beiträge: 25
|
Verfasst: Do 08.01.09 19:23
Hier müsste eigentlich das drinstehen, was du suchst...
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: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94:
| constructor TBuch.create (pSachgebiet, pAutor, pTitel, pOrt, pVerlag:String; pNr, pJahr: Integer); begin inherited Create; Sachgebiet := pSachgebiet; Autor := pAutor; Titel := pTitel; Ort := pOrt; Verlag := pVerlag; Nr := pNr; Jahr := pJahr; end;
function TBuch.getSachgebiet : String; begin getSachgebiet := Sachgebiet end; function TBuch.getAutor : String; begin getAutor := Autor end; function TBuch.getTitel : String; begin getTitel := Titel end; function TBuch.getOrt : String; begin getOrt := Ort end; function TBuch.getVerlag : String; begin getVerlag := Verlag end; function TBuch.getNr : Integer; begin getNr := Nr end; function TBuch.getJahr : Integer; begin getJahr := Jahr end;
procedure TForm1.Anzeigen; var buch :TBuch; begin if not (Titelliste.isBehind or Titelliste.isBefore) then begin buch := TBuch(TitelListe.GetObject); with buch do begin edTitel.Text := getTitel; edAutor.Text := getAutor; edSachgebiet.Text := getSachgebiet; EdNr.text:=inttostr(getNr); EdVerlag.text:=getVerlag; EdOrt.text:=getOrt; EdJahr.text:=inttostr(getjahr); end; end; end;
procedure TForm1.BtEinlesenClick(Sender: TObject); var i, Code, aNr, aJahr:integer; Zeile, aSachgebiet, aAutor, aTitel, aOrt, aVerlag : String; neu : TBuch; begin memo1.Lines.LoadFromFile('Buecher.txt'); Anzahl := memo1.Lines.Count; TitelListe := SortListe.Init; for i := 0 to Anzahl-1 do begin Zeile := Memo1.Lines[i]; aNr := strtoint(copy(Zeile, 1, pos(';', zeile)-1)); delete (zeile, 1, pos(';', zeile)); aSachgebiet := copy(Zeile, 1, pos(';', zeile)-1); delete (zeile, 1, pos(';', zeile)); aAutor := copy(Zeile, 1, pos(';', zeile)-1); delete (zeile, 1, pos(';', zeile)); aTitel := copy(Zeile, 1, pos(';', zeile)-1); delete (zeile, 1, pos(';', zeile)); aOrt := copy(Zeile, 1, pos(';', zeile)-1); delete (zeile, 1, pos(';', zeile)); if copy(Zeile, 1, pos(';', zeile)-1) = '' then aJahr :=0 else val(copy(Zeile, 1, pos(';', zeile)-1),aJahr,Code ); delete (zeile, 1, pos(';', zeile)); aVerlag := Zeile; neu := TBuch.Create(aSachgebiet, aAutor, aTitel, aOrt, aVerlag, aNr, aJahr); Titelliste.toLast; TitelListe.InsertBehind(neu); end; TitelListe.toFirst; lbAnzahl.Caption := intToStr(Anzahlen)+' Datensätze'; Anzeigen; end; |
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 08.01.09 19:28
Ein Programm, das auch Bücher verwaltet, habe ich auch schonmal geschrieben. Da wäre ich allerdings nicht darauf gekommen ein TMemo zu verwenden. Warum nimmst du nicht TListView oder noch besser eine VirtualTreeView?
Zum Problem: Du liest zwar aus dem Memo aus, du müsstest aber danach sortieren und die sortierten Daten wieder ins Memo schreiben.
|
|
Massa 
      
Beiträge: 25
|
Verfasst: Do 08.01.09 19:39
Nur wie schreibe ich die sortierten Daten wieder ins Memo rein?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 08.01.09 19:44
Du musst deine Buchliste durchgehen und mit Memo1.Lines.Add die Zeilen wieder hineinlegen.
Besser wäre aber gleich nur eine TStringList unsichtbar statt der visuellen Komponente TMemo zu benutzen und dann die Daten aus der Liste in eine TListView zu schreiben. Ein Memo hat ja keine Spalten.
Eine ListView hat auch den Vorteil, dass du durch Klick auf die Überschriften nach dieser Spalte sortieren kannst, wenn du das anbieten möchtest.
|
|
Massa 
      
Beiträge: 25
|
Verfasst: Do 08.01.09 19:47
Ok...
Könntest du mir denn vieleicht eine kleine Hilfe dazu geben? Also zur TStringList und mit dem Umgang von dem TListView.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 08.01.09 20:09
Aus dem Kopf geschrieben: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var FileContents: TStringList; begin FileContents := TStringList.Create; FileContents.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Buecher.txt'); for i := 0 to FileContents.Count - 1 do begin Zeile := FileContents[i]; ... | ListView (ViewStyle auf vsReport und unter Column zwei neue Spalten erzeugt): Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var NewItem: TListItem; begin for i := 0 to 2 do begin NewItem := ListView1.Items.Add; NewItem.Caption := IntToStr(i); NewItem.Subitems.Add('Huch'); NewItem.Subitems.Add('Noch mehr'); end; | Du hast die Datei Buecher.txt im selben Verzeichnis wie die Exe liegen. Wenn du das machst, dann musst du trotzdem den Pfad angeben, wie ich es jetzt auch gemacht habe.
Dir muss aber klar sein, dass das auf anderen PCs so nicht immer funktioniert. Ich glaube aber, dass es für den Anfang reicht, wenn du die Datei korrekt im selben Verzeichnis wie die Exe verwendest.
Mehr dazu habe ich hier geschrieben, aber ich glaube das ist für dich noch etwas zu kompliziert evtl., ist aber später wichtig, wenn du Programme auch veröffentlichen willst.
|
|
|