![]() |
Problem mit LixtBox, Stringlist und Memofeld
-> Problem halb gelöst, Bitte Beitrag 9 lesen :)
Tag ich habe ein Problem mit einer Listbox, einer MemoListe und einer Stringlist. ich bekomme immer einen Zugriffsfehler, egal was ich am Code tue, kommt diese Meldung. ich habe schon viele Verianten versucht, aber es will nicht funktionieren. ich möchte gerne dass wenn der user eine Reihe in einer Listbox auswählt, das Programm den dazu passenden Record suchen geht, und aus diesem eine Stringlist in ein Memofeld einfügt. // Es handelt sich Um Records, die sich in einem Array befinden Habe es mir so gedacht, dass auf einem Click Event auf die Listbox den angewählten Eintrag (welche Namen Darstellen) mit den namen der Records (.name) verglichen werden, und wenn der name passt, wird die Stelle (array) zwischengespeichert. Danach dachte ich mir folgende Methode um die Stringlist in das Memofeld zu bekommen:
Delphi-Quellcode:
Einen Code für das vergleichen und den passenden Eintrag zu posten kann ich schlecht,
// C ist der passende Record Eintrag für den angewählten Eintrag
for I:=1 to Record[C].Txt.count-1 do memMain.Lines.add(Record[C].Text[J]); da meine letzten Varianten nur "Spielereien" waren. Wie gesagt, kommt bei der for-loop aber auch bei meinen Varianten zu vergleichen immer Zugriff Fehler. --- Frage: Wie macht man es richtig, den angewählten (angeklickten) Eintrag einer Listbox zu entnehmen, den passenden Record zu finden, und später aus diesem Record eine Stringlist in ein Memofeld zu schreiben ? Mfg |
Re: Problem mit LixtBox, Stringlist und Memofeld
Ich bin zwar nicht sicher, ob ich Dich richtig verstanden habe, aber IMHO machst Du es Dir unnötig schwer. TListbox.Items ist vom Typ TStrings, welcher wiederum über eine Methode AddObject verfügt. Du könntest also Deine Stringlisten direkt in den Listboxeinträgen hinterlegen und musst dann später nicht in irgendwelchen Array of Record herumsuchen.
|
Re: Problem mit LixtBox, Stringlist und Memofeld
Kann ich damit nur Stringlisten hinzufügen ?
|
Re: Problem mit LixtBox, Stringlist und Memofeld
Nein, Du kannst alles dort einfügen, was von TObject abstammt, somit also jede Art von Klasse.
|
Re: Problem mit LixtBox, Stringlist und Memofeld
Sorry, aber hab Probleme das mit dem AddObjekt zu verstehen :S
Was muss ich angeben wenn ich gerne ein record hinter einem Eintrag setzen will und wie greif ich darauf zurück ? Mfg |
Re: Problem mit LixtBox, Stringlist und Memofeld
Hallo,
du kannst auch alles andere hinzufügen, du hast ja 4 Byte (SizeOf(TObject) [ein pointer halt]) "platz". um ein record hinzuzufügen müsstes du manuell erstellen mit "New(Pointer variable vom Record)" und hinzufügen. Bei löschen und freigeben der Liste musst du die records vorher manuell freigeben mit z.B. Dispose().
Delphi-Quellcode:
type
TMyRecord = packed record FBlah: Integer; FFoo: ShortString; FBar: Smallint; end; PMyRecord = ^TMyRecord; procedure CreateOrInitFooBarOrso; var LPMyRec: PMyRecord; begin myList := TStringList.Create; myList.OwnsObject := FALSE; //wichtig da "objects" ja keine TObject-nachfahren beinhaltet for what so ever do begin //Record erstellen New(LPMyRec) LPMyRec^.FBlah := 123456789 LPMyRec^.FFoo := 'Huhu ich bin ein shortstirng'; LPMyRec^.FBar := 1; myList.AddObject('ein String', TObject(LPMyRec)); end; end; procedure FreeIt; var LPRec: PMyRecord; begin while MyList.Count > 0 do begin LPRec := PMyRecord(myList.Objects[0]); Dispose(LPRec); end; myList.Free; end; |
Re: Problem mit LixtBox, Stringlist und Memofeld
PMyRecord = ^TMyRecord;
Diese Zeile ist ja überflüssig ? Dh in meinem Code muss ich in ein packed record ändern? Und warum Kommt der Rekord in eine Stringlist ? Denn meine Stringlist ist im Record drinne. Und das ganze soll ja in eine Listbox. |
Re: Problem mit LixtBox, Stringlist und Memofeld
sorry,
hatte den ersten beitrag nicht gelesen. mein post bezogt sich auf deine letzte frage (post #5). in der tat kann ich wie daddyh deine gedanken nicht ganz nachvollziehen. "Normalerweise" würde ich einen Reocrd in einer Liste hinzufügen nicht anderesrum. shalom |
Re: Problem mit LixtBox, Stringlist und Memofeld
Will ich ja, ich möchte auch gern ein record in eine liste setzen, jedoch soll .name das feld sein, das vom record in der liste angezeigt wird.
Beim anklicken soll dann zB eine stringlist vom record in ein Memo Feld geladen werden. Ich hoffe ich konnte es jetzt besser erklären. Mfg // Edit: Also das mit dem richtigen Record zu finden hab ich gelöst
Delphi-Quellcode:
Dies bringt den passenden Inhalt.
J := Liste.ItemIndex;
memMain.Lines.add(Record[J].name); Nun ist nur noch das Problem, wie ich am besten ein Memofeld zwischenspeichere, und dieses später wieder in das Memo Feld reinbekomme. Evt wichtig zu sagen ist, dass ich es in ein Record zwischenspeicheren will, welcher gespeichert wird. |
Re: Problem mit LixtBox, Stringlist und Memofeld
Hier mal ein Beispiel für AddObject. Auf dem Formular befinden sich nur eine ListBox und ein Memo.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var Liste: TStringlist; begin //3 Stringlisten erzeugen und per AddObject in den Listbox-Items ablegen Liste := TStringlist.Create; Liste.Text := 'Dies ist der Inhalt der ersten Liste.'; ListBox1.Items.AddObject('Eins',Liste); Liste := TStringlist.Create; Liste.Text := 'Dies ist der Inhalt der zweiten Liste.'; ListBox1.Items.AddObject('Zwei',Liste); Liste := TStringlist.Create; Liste.Text := 'Dies ist der Inhalt der dritten Liste.'; ListBox1.Items.AddObject('Drei',Liste); end; procedure TForm1.FormDestroy(Sender: TObject); var i: integer; begin //die Objekte in der Listbox freigeben for i := ListBox1.Items.Count - 1 downto 0 do ListBox1.Items.Objects[i].Free; end; procedure TForm1.ListBox1Click(Sender: TObject); var Liste: TStringlist; begin //die Stringliste zum aktuellen Listbox-Eintrag in Memo anzeigen if ListBox1.ItemIndex > -1 then begin Liste := ListBox1.Items.Objects[ListBox1.ItemIndex] as TStringlist; if Assigned(Liste) then Memo1.Lines.Assign(Liste); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 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