Hallo!
Wir haben folgendes Problem:
Wir tragen in die ListView Ergebnisse aus einem Ethernet Scan ein. Wissen daher nicht wirklich, wann die Antworten kommen. Haben daher das ganze mit einem Timer gelöst, der die folgende Aktion nach 500 ms nach dem letzten Eintrag ausführen soll (Timestamp bei Schreibebeginn und timesince).
Wenn die Einträge in der Liste drinnen sind und nach 500 ms nichts neues mehr kommt (also der Timer nicht mehr auslöst), dann wollen wir die Spalten (Columns) auf die optimale Breite setzen (sprich den Text in den jeweiligen Columns hinsichtlich ihrer Länge analysieren und daraus die rrichtige Spaötembreite ermitteln.). Das funktioniert, detto, dass wir Spalten ohne Einträge auf 0 setzen (also ausblenden).
Nun haben wir aber das Problem, dass wir einen Indexüberlauf bekommen. Beim Debugen sehen wir, dass die zu behandelnde Spalte einen Index um 1 größer hat, als gerade verfügbar ist. Insgesamt haben wir 15 Spalten, die erste ist die Caption und dann (über die Subitems) von 0 bis 14. Nun kanns mir aber passieren, dass ich bei Subitem(12) eine
Exception wegen Indexüberlauf bekomme. Soll heißen, dass wir davon überzeugt sind, dass das Schreiben scheinbar doch noch nicht fertig war.
Daran knüpft nun meine Frage an:
Gibt es in Delphi eine Möglichkeit festzustellen, ob noch auf eine ListView geschrieben wird respektive ob das Schreiben schon fertig ist (sowas wie ein Event "Drawfinished" - in die ListView schreiben ist ja eigentlich auch nichts anderes als ein Draw Event (wird einem erst beim Umfärben einzelner Einträge bewußt). Ich muss also scheinbar erst schauen, ob auch wirklich fertig eingetragen wurde. Denn sonst ändert sich der Index während der Bearbeitung und Delphi meckert daw an.
Ich suche also ein Event oder eine Funktion, an Hand der ich erkenne, dass die ListView fertig geschrieben ist und ich mit meinem Sizer drüber kann, ohne einen Indexüberlauf auf Grund noch fehlender Spalten zu riskieren. Wenn jemand von Euch hierzu hilfreiche Tipps hätte, wäre mir sehr geholfen.
Danke schon im Voraus!
Lg,
Stephan.