In einer ListBox suchen ?
-
Hallo.
Ich habe es geschafft in einer RichEdit was zu suchen - nun verzweifle ich aber an der ListBox. Diese besitzt leider nicht die Methode FindText();Habt ihr eine Idee?
-
IndexOf()
-
Hi Sunday
danke für den tipp das hatte mich nämlich auf eine idee gebracht//wir müssen jeden string durchlaufen und wenn dort unser gesuchtess drin ist - dann //die zeile markieren int anz = ErrorLB->Items->Count; int start = 0; for(int zeile = 0 ; zeile<anz ; zeile++) { if(ErrorLB->Selected[zeile] == 1) { start = zeile+1; //wir wollen ja ab der nächsten zeile suchen } } for(int zeile = start ; zeile<anz ; zeile++) { AnsiString string = (*ErrorLB->Items)[zeile]; if(string.AnsiPos(SuchenListBox->FindText) != 0) //wenn der string drin ist { ErrorLB->SetFocus(); ErrorLB->Selected[zeile] = 1; ErrorLB->Perform( EM_SCROLLCARET,0,0); //dahin scrollen //suchfenster in vordergrund bringen SetForegroundWindow(FindWindow(0, "Suchen")); return; } } ShowMessage((AnsiString)SuchenListBox->FindText + " wurde nicht gefunden");
ist das so gut oder geeht das auch besser zu lösen?
-
oder so:
ListBox1:
Ich
bin
ein
TString
!!!ListBox1->ItemIndex = ListBox1->Items->IndexOf("TString");
-
ich habe hier echt nochmal probs.
also ich scrolle bis jetzt immer an die position. das problem ist - das, wenn der automatisch runterscrollt die zeile auch selektiert die zeile aber ganz unten ist(im bereich des angezeigten textes)
er soll nach möglichkeit ca. 10 zeilen weiter scrollen - damit das in der mitte zu sehen ist ^^habt ihr da ne möglichkeit im auge?
Ausgabe->Perform( EM_LINEFROMCHAR ,0,0); Ausgabe->Perform( EM_SETSCROLLPOS,0,10);
wirft errormessages aus
-
sowas in der Art ?
void __fastcall TForm1::Button1Click(TObject *Sender) { int pos=0; AnsiString suchstr="v"; while(pos<ListBox1->Count&&!ListBox1->Items->Strings[pos].Pos(suchstr)) pos++; if(pos==ListBox1->Count) ShowMessage("'"+suchstr+"' wurde nicht gefunden."); else { ListBox1->ItemIndex = ListBox1->Count-1; ListBox1->ItemIndex = pos; } }
-
ne so glaube ich nicht.
das muss mit diesen EM_MESSAGES gehen - da bin ich mir echt sicher - weil das sind ja alles wind00fbotschaften für die richedit. nur ich kenne mich in sachen windowsprogrammierung net so ausalso er sagt nicht beim compilieren error sondern nur wenn ich in die funktion reingehe und das anwende. und dann ist das so ein fehler - da komme ich net mehr raus - da muss ich das programm zurücksetzen
-
dann so:
int pos=0; AnsiString suchstr="u"; while(pos<ListBox1->Count&&!ListBox1->Items->Strings[pos].Pos(suchstr)) pos++; if(pos==ListBox1->Count) ShowMessage("'"+suchstr+"' wurde nicht gefunden."); else { int mi=pos+10; if(mi>=ListBox1->Count-1) mi=ListBox1->Count-1; ListBox1->ItemIndex = mi; ListBox1->ItemIndex = pos; }
-
weißt du was mir auffällt?
die lsitbox kann das bei mir ja mittlerweile ich rede hier aber von einer richedit
argh
man man man. datürlich hast du recht mit deinem ding da. so habe ich es auch für die listbox gelöst.^^
hmm.
es geht jetzt um die richedit
-
Statt mittendrin das Thema zu wechseln solltest einen neuen Thread anfangen.
Natürlich nicht, ohne dich zuvor gründlich mit der BCB-Hilfe, der FAQ und der Suchfunktion hier auseinandergesetzt zu haben.
-
jansen glaube mir - das habe ich. ich habe auch die programmierer hier im betrieb gefragt - auch dieses pberbrain kam darauf net wirklich klar ^^
-
String suchstr="r"; int pos=0; while(pos<RichEdit1->Lines->Count&&!RichEdit1->Lines->Strings[pos].Pos(suchstr)) pos++; int mi=pos+10; if(mi>=RichEdit1->Lines->Count) mi=RichEdit1->Lines->Count; RichEdit1->SelStart = RichEdit1->Perform(EM_LINEINDEX, mi, 0); RichEdit1->Perform(EM_SCROLLCARET, 0, 0); RichEdit1->SelStart = RichEdit1->Perform(EM_LINEINDEX, pos, 0); RichEdit1->SelLength = RichEdit1->Lines->Strings[pos].Length(); RichEdit1->Perform(EM_SCROLLCARET, 0, 0); RichEdit1->SetFocus();