[BCB] FindDialog1->FindText Wyszukiwanie tekstu
Ostatnio zmodyfikowano 2012-01-12 20:32
wojownik266 Temat założony przez niniejszego użytkownika |
[BCB] FindDialog1->FindText Wyszukiwanie tekstu » 2012-01-12 11:44:03 Witam. Poniżej zamieszczam kod funkcji, która w takim stanie jak teraz, wyszukuje dany text w obiekcie RichEdit. W tym przypadku tekst = " 1 " i wszystko działa tak jak powinno.... Moje pytanie brzmi: Jak zmodyfikować ten kod aby wyszukać taki ciąg: " 1", "-1", "2", "-2" itd. aż do "10"? Dodam jeszcze że program po znalezieniu np. cyfry "1" ma odegrać dzwięk przypisany tej liczbie i tak samo z kolejnymi cyframi aż do konca tj. cyfry "10". Ma ktoś pomysł na to jak to zrobić? Najchętniej widziałbym jakiś kawałek kodu.... Czekam na odpowiedzi i zyczę miłego dnia. void __fastcall TForm1::Button1Click( TObject * Sender ) { int FoundAt, StartPos, ToEnd; FindDialog1->FindText = " 1 "; if( RichEdit1->SelLength ) StartPos = RichEdit1->SelStart + RichEdit1->SelLength; else StartPos = 0; ToEnd = RichEdit1->Text.Length() - StartPos; FoundAt = RichEdit1->FindText( FindDialog1->FindText, StartPos, ToEnd, TSearchTypes() << stMatchCase ); if( FoundAt != - 1 ) { RichEdit1->SetFocus(); RichEdit1->SelStart = FoundAt; RichEdit1->SelLength = FindDialog1->FindText.Length(); ButtonSound( 36 ); } } |
|
DejaVu |
» 2012-01-12 12:04:44 A jak byś to zrobił na zwykłym std::string? Bo tutaj trzeba zrobić dokładnie tak samo. |
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2012-01-12 13:31:43 A moze by tak jakis kawałek kodu? Rozwiazało by to wiele spraw. |
|
akwes |
» 2012-01-12 19:38:55 Co to ma być :P !?
Nie za bardzo się przyglądałem, ale wiesz że AnsiString numeruje swoje indeksy od 1 a nie jak każda tablica od 0? Ale warto o tym pamiętać. char & __fastcall operator []( const int idx ) { ThrowIfOutOfRange( idx ); Unique(); return Data[ idx - 1 ]; }
Nie rozumiem dlaczego tak to rozwiązali, przeładowanie operatora [], no ale cóż, na zabawach z tekstem straciłem dużo zdrowia, dlatego wolę uprzedzić :P |
|
DejaVu |
» 2012-01-12 20:32:42 W skrócie:
bool szukaj( const std::string & napis, const std::vector < std::string >& v ) { int pozycja = 0; for( std::vector < std::string >::const_iterator i = v.begin(); i != v.end(); ++i ) { if( pozycja == std::string::npos ) return false; pozycja = napis.find( * i, pozycja ); } return pozycja != std::string::npos; }
|
|
« 1 » |