Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[BCB] FindDialog1->FindText Wyszukiwanie tekstu

Ostatnio zmodyfikowano 2012-01-12 20:32
Autor Wiadomość
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.
C/C++
void __fastcall TForm1::Button1Click( TObject * Sender )
{
    /* std::auto_ptr<Nuta> kl(new Nuta(Application));
        kl->grajNuty(36,1);*/
   
    int FoundAt, StartPos, ToEnd;
    FindDialog1->FindText = " 1 "; // tekst do odnalezienia w richedit
    if( RichEdit1->SelLength )
         StartPos = RichEdit1->SelStart + RichEdit1->SelLength;
    else
   
         StartPos = 0;
   
    // ToEnd is the length from StartPos
    // to the end of the text in the rich edit control
   
    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 ); //Odgrywanie dzwieku przypisanego liczbie "1"
    }
}
P-47998
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.
P-47999
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.
P-48001
akwes
» 2012-01-12 19:38:55
C/C++
StartPos = 0;

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ć.

C/C++
char & __fastcall operator []( const int idx )
{
    ThrowIfOutOfRange( idx ); // Should Range-checking be optional to avoid overhead ??
    Unique(); // Ensure we're not ref-counted
    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
P-48033
DejaVu
» 2012-01-12 20:32:42
W skrócie:
C/C++
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;
}
P-48037
« 1 »
  Strona 1 z 1