ListBox mit Wertevergleich
-
Hallo Leute!
ich beiß mir schon seit Tagen an ein eigentlich simples Problem die Zähne aus, hoffe ihr könnt mir da weiterhelfen.Also: ich habe mehrere ListBoxen welche mit Werte aus der Registry sekündlich aufgefüllt (Refresht) werden, die Refreshtime kann man auswählen. Mein Problem liegt nun dabei, das ich während des Refresh nen Wertevergleich durchführen will, dieser aber wegen ListBox ItemIndex-Fehler fehlschlägt (Maximum ...). Leider finde ich den Fehler nicht.
int TForm1::MakroInput() { AnsiString vWert; //Value-Wertekette Bsp.: 888|00095BE7CCA8|-72|-86|19.12.2004 19:03:13 int tPos=0; //Position des Trennzeichen ListBox1->Items->Clear(); ListBox2->Items->Clear(); ListBox3->Items->Clear(); ListBox4->Items->Clear(); ListBox5->Items->Clear(); TStringList *TempList = new TStringList; // Liste deklarieren try{ //Stringliste benutzen TRegistry*reg=new TRegistry();//Registry-eintrag reg->RootKey = HKEY_LOCAL_MACHINE; reg->OpenKey("Software\\AWS",true); //Setzt ein Registry Pfad reg->GetValueNames(TempList); //Ließt alle Values aus (alle Namen der Netze) for(int i=0;i <= TempList->Count-1;i++) //Zerlegt die Stringliste { if(TempList->Strings[i] != "AWS_ACTIVE") { //ShowMessage(TempList->Strings[i]); //BSSID ListBox2->Items->Add(TempList->Strings[i]); //BSSID auslesen //WERTE des Value auslesen vWert = reg->ReadString(TempList->Strings[i]); //Wertekette auslesen //SSID tPos = vWert.Pos("|"); ListBox1->Items->Add(vWert.SubString(0,tPos-1)); vWert = vWert.SubString(tPos+1,vWert.Length()); //Signal tPos = vWert.Pos("|"); ListBox3->Items->Add(vWert.SubString(0,tPos-1)); //FEHLERSTELLE !!!!!!!!!!!!!!!!!!!!!!!!! if(ListBox7->Items->Count < 1) { ListBox7->Items->Add(vWert.SubString(0,tPos-1)); } else { if(ListBox7->Items->Strings[i] < ListBox3->Items->Strings[i]) { ListBox7->Items->Strings[i] = ListBox3->Items->Strings[i]; } } //Fehlerstelle !!!!!!!!!!!!!!!!! ende vWert = vWert.SubString(tPos+1,vWert.Length()); //Noise tPos = vWert.Pos("|"); ListBox4->Items->Add(vWert.SubString(0,tPos-1)); vWert = vWert.SubString(tPos+1,vWert.Length()); //Last Seen ListBox5->Items->Add(vWert.SubString(0,vWert.Length())); } } reg->CloseKey(); } __finally{ delete TempList; // Stringlistenobjekt freigeben } SignalAuswertung(); //Signalauswertung starten return 0; }
Danke für eure Hilfe.
Gruss
KMB
-
Hallo
bei dem Vergleich
if(ListBox7->Items->Strings[i] < ListBox3->Items->Strings[i])
solltest du mal schauen, ob in beiden ListBoxen wirklich mindestens i+1 Strings vorhanden sind. Am besten mal den Debugger benutzen und einen Haltepunkt auf den Vergleich setzen.
bis bald
akari
-
Danke,
Ok, ich werde das mal prüfe. Gibts eigentlich eine Möglichkeit auch ohne vorher Werte in eine Listbox gefüllt zu haben sie per Item->Strings hinzuzufügen?
Ich kenne nur noch die Methode im Listeditor leere Returns einzufügen und eben die reguläre Add Methode, beide sind nicht unbedingt die besten für mein Fall.Gruss
KMB
-
Hallo
Versteh ich nicht ganz. Die Werte einer ListBox sind genau die Items->Strings. Die beiden von dir benannten Methoden fügen neue Strings hinzu. Mir fällt noch Items->Assign() ein, um die Werte einer anderen TStringList zu übernehmen.
Aber warum sind die Möglichkeiten nicht passend für dich?bis bald
akari