![]() |
Listview (gleiche Zeile- unterschiedliche Spalte)
Hallo!
Ich habe eine Listview mit zwei Columns! In die 1. Spalte lasse ich zahlen mir RegExpr einlesen. Im nächsten Schritt möchte ich etwas in der zweiten Spalte einlesen lassen. Nun habe ich aber das Problem, dass er nicht in der ersten Zeile (in der zweiten Spalte) anfängt, sondern unter der letzten Zeile! Die erste Spalte lese ich so ein:
Delphi-Quellcode:
Und die zweite dann so:
ListItem := listview1.Items.Add;
listitem.Caption := (r.Match[0]);
Delphi-Quellcode:
Wie bekomme ich es hin, das die eingelesenen Zahlen in Spalte 2 von der ersten Zeile an drin stehen???
ListItem := listview1.Items.Add;
listitem.SubItems.Add('Eintrag zweite Spalte'); Vielen Dank im voraus! |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Hallo,
du erzeugst per ListView.Items.Add immer neue Zeilen. Um was in die 1. Zeile / 2. Spalte zu schreiben
Delphi-Quellcode:
Um was in die 2. Zeile / 2. Spalte zu schreiben
ListItem:= ListView.Items[0];
ListItem.SubItems.Add('hoika is gut');
Delphi-Quellcode:
Heiko
ListItem:= ListView.Items[1];
ListItem.SubItems.Add('hoika is gut'); |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Hi,
oder so:
Delphi-Quellcode:
var
ListItem: TListItem; begin ListItem := listview1.Items.Add; Listitem.Caption := 'Eintrag erste Spalte'; Listitem.SubItems.Add('Eintrag zweite Spalte'); |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Zitat:
Delphi-Quellcode:
Mein Problem ist jetzt: Nun soll er etwas aus einer Listbox in die zweite Spalte komplett füllen!
try
r.Expression := '[0-9]{2}:[0-9]{2}:[0-9]{2}'; if r.Exec(Memo1.Lines.Text) then repeat listbox1.items.Add(r.Match[0]); //hier soll er es in Zukunft in eine Spalte der Listview eintragen until not r.ExecNext; finally r.Free; l.Free; end; Gruß! |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Hallo,
was hast du an meinem Code nicht verstanden ??? Mensch !!! ;) Du darfst kein ListView.Items.Add machen, sondern musst dir das entsprechende ListItem raussuchen, das steht ja schon drin. Jeder Aufruf von ListView.Items.Add erzeugt ne neue Zeile, und das soll es ja nicht. Da dein Code nicht sher aussagekräftig ist, mal nen Schuss ins Blöaue
Delphi-Quellcode:
var
iRow : Integer; ListItem : TListItem; begin if r.Exec(Memo1.Lines.Text) then begin iRow:= 0; repeat ListItem:= ListView.Items[iRow]; ListItem.SubItems.Add(r.Match[0]); Inc(iRow); until not r.ExecNext; end; end; Heiko |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Bekomme aber mit diesem Code an der Stelle
Delphi-Quellcode:
eine AV!
ListItem.SubItems.Add(r.Match[0]);
Habe ich etwas vergessen? Zwei Columns habe ich auch erstellt! ViewStyle der Listview ist auf vsReport! Hier nochmal ein längerer Auszug aus meinem Code:
Delphi-Quellcode:
WB_GetHTMLCode(Webbrowser1, Memo1.Lines);
l := TStringList.Create; r := TRegExpr.Create; try r.Expression := '[0-9]{2}:[0-9]{2}:[0-9]{2}'; if r.Exec(Memo1.Lines.Text) then begin iRow:= 0; repeat ListItem:= ListView1.Items[iRow]; ListItem.SubItems.Add(r.Match[0]); //hier kommt die AV Inc(iRow); until not r.ExecNext; end; finally r.Free; l.Free; end; |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Hallo
und wo kommt mit folgendem geändertem Code ? die Frage ist auch, ob es mehr matches als items (Zeilen) gibt.
Delphi-Quellcode:
var
sMatch: String; ListItem:= ListView1.Items[iRow]; Assert(ListItem<>NIL); sMatch:= r.Match[0]; ListItem.SubItems.Add(sMatch); Heiko |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Dann meldet er mir für diese Zeile
Delphi-Quellcode:
Im Project ist eine Exception der Klasse EAssertionFailed aufgetreten!
Assert(ListItem<>NIL);
Delphi-Quellcode:
Es müssten im Moment 19 Zeilen in die Listview eingetragen werden!
WB_GetHTMLCode(Webbrowser1, Memo1.Lines);
l := TStringList.Create; r := TRegExpr.Create; try r.Expression := '[0-9]{2}:[0-9]{2}:[0-9]{2}'; if r.Exec(Memo1.Lines.Text) then repeat ListItem:= ListView1.Items[iRow]; Assert(ListItem<>NIL); sMatch:= r.Match[0]; ListItem.SubItems.Add(sMatch); until not r.ExecNext; finally r.Free; l.Free; end; |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
du hast dir selbst die Antwort gegeben. Wenn Assert eine Exception wirft bei der Prüfung ist dein ListItem nil und somit kracht es wenn du damit rumhantieren willst. Ich glaub deine Programmlogic hakt irgendwo.
|
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Hier nochmal meine Vorstellung von dem Programm:
- ich habe ein Memo welches mit RegExpr nach bestimmten Zeichen durchsucht wird - die Ergebnisse sollen in eine Spalte einer Listview - danach soll eine zweite Spalte (von der ersten Zeile angefangen)der Listview einträge aus einer vorhandenen Listbox übernehmen! |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Hallo,
wie schon gesagt, deine Logik hat nen Knicks ;) Wenn im ListView weniger Einträge stehen also in der Listbox, musst du halt vorher noch ein paar ListItems eintragen.
Delphi-Quellcode:
Danach kannst du die Routine so verwenden.
iDiff:= ListBox.Items.Count-ListView.Items.Count; // oder so ähnlich
for i:= 1 to iDiff do begin ListItem:= ListView.Items.Add; end; Heiko |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Danke!!!! Nun geht es so wie ich möchte!
Wie kann ich denn jetzt den Inhalt prüfen. Ich hatte mir das so vorgestellt: Es wird in Spalte 1 Zeile für Zeile nachgeschaut. Wenn ein bestimmter Inhalt (bestimmte Zahl) gefunden ist dann soll er mit dem Inhalt in der zweiten Spalte (aber der gleichen Zeile) etwas machen! Gruß! |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
wie sieht denn dein jetziger Ansatz dafür aus und woran scheiterst du genau?
|
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Einen Ansatz habe ich noch nicht. Da ich voher noch ein Problem habe!
Habe ein dynamisches Array und will es mit dem Inhalt der zweiten Spalte füllen!
Delphi-Quellcode:
Bekomme aber jedesmal ein "Überschreitet maximum(1). Das komische ist: Wenn ich mir li.subItems[0] anzeigen lasse, zeigt er mir den Inhalt der letzten Zeile an. Dann ist das mit dem Maximum klar. Wie schaffe ich es, dass er von oben anfängt?
for i := 0 to zaehler-1 do
DynArray[i] := StrToTime(li.subItems[i]); Gruß! |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
caption = Spalte1
subitem[0] = Spalte2 subitem[1] = Spalte3 etc. du hast doch aber nur 2 spalten :) subitems[i] greift also, sobald i größer 0 ist, auf spalten zu welche nicht existieren |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Ahhhh, stimmt!
Wie ist den die Syntax um die 2. Spalte von oben nach unten in mein Array zu lesen! Danke. Gruß! |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Delphi-Quellcode:
ListView.Items.Item[Zeile].SubItems[0]
|
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Super! Jetzt klappt's! Nun muss ich mir mal Gedanken machen, wie ich das mit dem Prüfen des Inhalts hinbekomme! Und das er dann was mit dem Inhalt in der zweiten Spalte (gleiche Zeile macht).
Ist es sinnvoll die komplette erste Spalte mit RegExpr zu durchsuchen oder gibt es da etwas einfacheres? |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Habe eine Lösung für mein Problem gefunden:
Delphi-Quellcode:
So funktioniert es!
for i := 0 to zaehler-1 do
begin if Trim(ListView1.Items.Item[i].caption)='+491' then begin DynArray2[i] := StrToTime(ListView1.Items.Item[i].SubItems[0]); end; end; for i := Low(DynArray2) to High(DynArray2) do begin mobilzeit:=mobilzeit+DynArray2[i]; end; |
Re: Listview (gleiche Zeile- unterschiedliche Spalte)
Hallo,
Delphi-Quellcode:
Wenn du nicht immer so kleckerweise Code zeigen würdest,
for i := 0 to zaehler-1 do
DynArray[i] := StrToTime(li.subItems[i]); könnte man auch helfen. zaehler - auf was ist der gesetzt DynArray - wie ist es initialisiert Das dynamische Arrays sich nicht dynamisch vergrössern, weisst du ... SetLength benutzen Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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