Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listview (gleiche Zeile- unterschiedliche Spalte) (https://www.delphipraxis.net/95929-listview-gleiche-zeile-unterschiedliche-spalte.html)

Testy 16. Jul 2007 09:49


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:
    ListItem := listview1.Items.Add;
    listitem.Caption := (r.Match[0]);
Und die zweite dann so:
Delphi-Quellcode:
ListItem := listview1.Items.Add;
listitem.SubItems.Add('Eintrag zweite Spalte');
Wie bekomme ich es hin, das die eingelesenen Zahlen in Spalte 2 von der ersten Zeile an drin stehen???

Vielen Dank im voraus!

hoika 16. Jul 2007 09:56

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:
ListItem:= ListView.Items[0];
ListItem.SubItems.Add('hoika is gut');
Um was in die 2. Zeile / 2. Spalte zu schreiben
Delphi-Quellcode:
ListItem:= ListView.Items[1];
ListItem.SubItems.Add('hoika is gut');
Heiko

bitsetter 16. Jul 2007 11:49

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');

Testy 17. Jul 2007 10:43

Re: Listview (gleiche Zeile- unterschiedliche Spalte)
 
Zitat:

Zitat von bitsetter
Hi,

oder so:
Delphi-Quellcode:
var
  ListItem: TListItem;
begin
  ListItem := listview1.Items.Add;
  Listitem.Caption := 'Eintrag erste Spalte';
  Listitem.SubItems.Add('Eintrag zweite Spalte');

So kann ich es nicht machen! Da ich mit RegExpr eine Spalte füllen lassen möchte!
Delphi-Quellcode:
 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;
Mein Problem ist jetzt: Nun soll er etwas aus einer Listbox in die zweite Spalte komplett füllen!

Gruß!

hoika 17. Jul 2007 11:16

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

Testy 17. Jul 2007 12:08

Re: Listview (gleiche Zeile- unterschiedliche Spalte)
 
Bekomme aber mit diesem Code an der Stelle
Delphi-Quellcode:
ListItem.SubItems.Add(r.Match[0]);
eine AV!
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;

hoika 17. Jul 2007 13:44

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

Testy 17. Jul 2007 13:53

Re: Listview (gleiche Zeile- unterschiedliche Spalte)
 
Dann meldet er mir für diese Zeile
Delphi-Quellcode:
Assert(ListItem<>NIL);
Im Project ist eine Exception der Klasse EAssertionFailed aufgetreten!

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
    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;
Es müssten im Moment 19 Zeilen in die Listview eingetragen werden!

SirThornberry 17. Jul 2007 13:56

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.

Testy 17. Jul 2007 14:00

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!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:29 Uhr.
Seite 1 von 2  1 2      

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