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


Log in to reply