ďťż

Ładny brzuch

Wiec chodzi o przejście w pętli przez tekst zawarty w RichEdit1 i dostania się do poszczególnych słów składających się na zdania i jeśli dane słowo będzie odpowiadało słowu znajdującemu się w powiedzmy zmiennej slowo powinno nastąpić pogrubienie tego słowa w oknie RichEdit1.

Cos w stylu wyszukiwania, ale odwrotnego.

Jak zrealizować tą operację ?

Pozdrawiam ALL
Użytkownik Darek_c++ edytował ten post 02 maj 2007, 15:49


procedure TForm1.FindAndBold(const AText: string; at: integer = 0); var Found: integer; begin Found := Richedit1.FindText(AText, at, Length(RichEdit1.Text), [stMatchCase]); if Found <> -1 then begin with Richedit1 do begin SetFocus; SelStart := Found; SelLength := Length(AText); SelAttributes.Style := SelAttributes.Style + [fsBold]; FindAndBold(AText, at + SelLength); end; end else Richedit1.SelStart := 0; end;
Wywołanie:
FindAndBold('moj_tekst');
Użytkownik p1101 edytował ten post 02 maj 2007, 18:25
Tylko coś mi nie wychodzi z przerobieniem tego kodu na C++ a dokładniej od:
if Found <> -1 then ...
if (Found > -1 )
{
???
NIe znam paskala tylko C++ Poproszę o pomoc

-------------------

Jak się domyślam funkcja przeszukuje wybrany teksy pod kontem występowania słowa 'ala' wiec tak czy inaczej nie o to chodziło :(

Może jeszcze inaczej napiszę:
Jak przejść w pętli [to jest konieczne] przez zawartość tekstową RichEdit1 i poszczególne slowa wyświetlać w ShowMessage() ?
Ta funkcjonalność mi raczej wystarczy do rozbudowy..
Użytkownik Darek_c++ edytował ten post 02 maj 2007, 17:35
IMO może tak:
if Found <> -1 then begin with Richedit1 do begin SetFocus; SelStart := Found; SelLength := Length('ala'); SelAttributes.Style := SelAttributes.Style + [fsBold]; FindAndBold(AText, at + SelLength); end; end
if (Found != -1) { Richedit1->SetFocus; Richedit1->SelStart := Found; Richedit1->SelLength := Length("ala"); Richedit1->SelAttributes.Style := SelAttributes.Style + [fsBold]; FindAndBold(AText, at + SelLength); }
?
//ach, o rekurencji w ostatniej linijce zapomniałem :/
Użytkownik pbnan edytował ten post 02 maj 2007, 17:29


Dzięki, ale funkcja szuka tylko jednego wystąpienia... Zresztą nie o to mi chodziło wiec zapytam jeszcze raz:

Jak przejść w pętli [to jest konieczne] przez zawartość tekstową RichEdit1 i poszczególne slowa wyświetlać w ShowMessage() ?

Ta 'ala' wyżej to pozostałość z testowania u siebie :) Już poprawione. Jesli w BCB są te same funkcje co w Delphi to to, o czym mówisz:

string str; string nowy; str = Richedit1->Text; str += ' '; //potrzebne do warunku while(Pos(' ', str) > 0) { nowy = Copy(str, 1, Pos(' ', str)); ShowMessage(nowy); Delete(str, 1, Pos(' ', str)); }
Najwyżej sobie zmienisz jak coś jest nie tak.

//@down - to zrób aby było tak. A nie sypiesz tylko uwagami :> W gruncie rzeczy odpowiedź jaką powinienem Ci dać to typu "Musisz w pętli wyszukać spacji i kopiować znaki od tego momentu do następnej spacji." To, że dałem Ci kod (który u mnie działa jak należy) to tylko moja dobra wola, więc nie siedź z założonymi rękami i nie czekaj na gotowe rozwiązanie.
Użytkownik p1101 edytował ten post 02 maj 2007, 20:15

Najwyżej sobie zmienisz jak coś jest nie tak. Prawie wszystko jest nie tak...

@p11o1 Niestety mój BCB nie zna funkcji Pos ani Delete tak zapisanych wiec podajesz niedziałające kody...
Poza tym string nowy; jest z STL z klasy <string> wiec nie da się wyswietlic w ShowMessage(nowy); bez konwersji na tych *char
std::string nowy; nowy="jakis string"; ShowMessage(nowy) // <- ZLE ShowMessage(nowy.c_str());
@p11o1 ... To, że dałem Ci kod (który u mnie działa jak należy) to tylko moja dobra wola, więc ... :roll1:
Użytkownik Darek_c++ edytował ten post 02 maj 2007, 21:37
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •