AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit LixtBox, Stringlist und Memofeld
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit LixtBox, Stringlist und Memofeld

Ein Thema von punnzall · begonnen am 27. Feb 2010 · letzter Beitrag vom 2. Mär 2010
Antwort Antwort
Seite 1 von 3  1 23      
punnzall

Registriert seit: 6. Sep 2009
18 Beiträge
 
#1

Problem mit LixtBox, Stringlist und Memofeld

  Alt 27. Feb 2010, 15:15
-> 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:
// 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]);
Einen Code für das vergleichen und den passenden Eintrag zu posten kann ich schlecht,
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem mit LixtBox, Stringlist und Memofeld

  Alt 27. Feb 2010, 15:19
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
punnzall

Registriert seit: 6. Sep 2009
18 Beiträge
 
#3

Re: Problem mit LixtBox, Stringlist und Memofeld

  Alt 27. Feb 2010, 16:19
Kann ich damit nur Stringlisten hinzufügen ?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Problem mit LixtBox, Stringlist und Memofeld

  Alt 27. Feb 2010, 16:22
Nein, Du kannst alles dort einfügen, was von TObject abstammt, somit also jede Art von Klasse.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
punnzall

Registriert seit: 6. Sep 2009
18 Beiträge
 
#5

Re: Problem mit LixtBox, Stringlist und Memofeld

  Alt 27. Feb 2010, 19:33
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
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: Problem mit LixtBox, Stringlist und Memofeld

  Alt 27. Feb 2010, 19:49
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;
  Mit Zitat antworten Zitat
punnzall

Registriert seit: 6. Sep 2009
18 Beiträge
 
#7

Re: Problem mit LixtBox, Stringlist und Memofeld

  Alt 27. Feb 2010, 19:55
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.
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Problem mit LixtBox, Stringlist und Memofeld

  Alt 27. Feb 2010, 21:39
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
  Mit Zitat antworten Zitat
punnzall

Registriert seit: 6. Sep 2009
18 Beiträge
 
#9

Re: Problem mit LixtBox, Stringlist und Memofeld

  Alt 27. Feb 2010, 22:06
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:
J := Liste.ItemIndex;
memMain.Lines.add(Record[J].name);
Dies bringt den passenden Inhalt.
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Problem mit LixtBox, Stringlist und Memofeld

  Alt 28. Feb 2010, 09:25
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 03:47 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