Zapis formatowania tekstu do zmiennej.

0

Pomimo, że pisze w C++/CLI pisze w tym dziale gdyż nie zależny mi czy odpowiedź będzie w c++ czy C#. To tak dla informacji.
Przechodząc do sedna. Jestem w trakcie pisania algorytmu do kolorowania składni php i wszystko jest ok, ale niestety kolorowanie jak na razie polega na tym, że zmienia kolor w richtextboxie i następnie dodaje do niego wyraz, potem znowu zmienię kolor i podaje kolejnego tokena. Jak zapewne wiecie takie działanie dość znacząco zwalnia działanie algorytmu. kolorowanie w pamięci komputera i wypisanie wszystkiego za jednym zamachem znacząco by przyspieszyło to. I tego momentu nie mogę przebrnąć. Samo dodanie tekstu formatowanego to pikuś.

 richTextBox->Rtf = "tekst"; 

Natomiast jak to do stringa dodać formatowanie tego już nie wiem. Próbowałem tak String^ tekst = richTextBox->SelectionColor::set(Color::Black).ToString();

 wywala 2 błędy które w tłumaczeniu znaczą "krytyczny błąd kompilatora" i tyle. Jeżeli ktoś coś wie na ten temat to bardzo proszę o pomoc.
1

wywala 2 błędy które w tłumaczeniu znaczą "krytyczny błąd kompilatora"
Podałbyś dokładnie treść błędów.
Krytyczny błąd kompilatora oznacza błąd kompilatora. Zainstaluj aktualizacje, a zwłaszcza Service Packa do Visual Studio.

Sam String raczej kolorów nie przechowuje. Robi się to w RichTextBox, najpierw zaznaczasz tekst (SelectionStart, SelectionEnd) a potem ustawiasz SelectionColor.

Dam ci też wskazówkę, jak koloryzuje tekst samo Visual Studio, bo ostatnio napisałem kolorowanie Pascala jako plugin do VS.
Kolorowanie jest w pamięci. Jak to jest potem dokładnie rysowane — nie wiem, edytora nie ruszałem.

Ale „koloryzator” nie przebiega za każdym naciśnięciem klawisza na nowo po całym pliku, tylko pojedynczo liniami, tak że edycja danej linii powoduje tylko kolorowanie (i odrysowanie) bieżącej linii.
To jednak wymaga znajomości kontekstu, bo może jesteśmy w środku wielolinijkowego komentarza – i koloryzować w zasadzie nie ma co. Dlatego Visual zapamiętuje jaki jest stan parsera między wierszami — także kolorowanie może być wznowione od dowolnej linijki (wcześniej nic się nie zmieniło) i po tej jednej linijce zatrzymane, jeśli wiadomo że nie ma wpływu na resztę.

Przykładowo, mamy taki plik:

/* ala ma kota
   ala ma psa
   ala ma kanarka */
  x++;

wstępnie jest koloryzowany w całości, i zapamiętywane stany między wierszami:

początek pliku /* ala ma kota wewnątrz komentarza ala ma psa</code><i> wewnątrz komentarza</i> ala ma kanarka */<i> poza komentarzem</i><code> x++; poza komentarzem
koniec pliku

Teraz gdy coś piszemy:

początek pliku /* ala ma kota wewnątrz komentarza ala ma psa TUTAJ COŚ PISZEMY_ wewnątrz komentarza ala ma kanarka */</code><i> poza komentarzem</i><code> x++; poza komentarzem
koniec pliku

odświeżany jest tylko środkowy wiersz, w którym piszemy — bo wiadomo że jesteśmy wewnątrz komentarza, i dalej też jest komentarz: nic poza bieżącą linią nie trzeba analizować.
ale gdy zakończymy komentarz:

początek pliku /* ala ma kota wewnątrz komentarza ala ma psa TUTAJ COŚ PISZEMY */ poza komentarzem ala ma kanarka */</code><i> poza komentarzem</i><code> x++; poza komentarzem
koniec pliku

zmienia się stan pod koniec linii 2: dlatego trzeba odświeżyć też linię 3, która przestaje być komentarzem (a zaczyna być błędem, ale koloryzator musi błędy ignorować). Linii 4 już nie trzeba uaktualniać, bo stan parsera między liniami 3 a 4 się nie zmienił.

0

Co do błędów to w tym momencie nie powiem jakie bo nie mam projektu przy sobie. Do vs mam zainstalowane wszystkie możliwe łatki i sp błędy są spowodowane ta instrukcja co tam podałem, a którą na pewno jakoś da się zapisać tak aby działało. Co do pobierani jednej linii to ja o tym wiem tyle, że w tym momencie nie doszedłem jeszcze do kolorowania w czasie rzeczywistym, za to miałem się brać kiedy tylko skończę kolorowanie przy wczytywaniu pliku. Bo mówię, wszystko działa tylko ten jeden szkopuł mnie drażni że trochę to trwa zanim mi wczyta przez wyświetlanie po kolei kolejnych wyrazów. Dużo zyskałem tym, że na czas wczytywania ukrywam RTB ale to znowu jest to trochę nieprofesjonalnie zrobione. Co do kolorowania już wyświetlonego tekstu to też chyba coś źle robię bo jak mi leci przez wszystkie słowa to RTB przewija się za miejscem zaznaczania tekstu do pokolorowania. Jest możliwość, żeby to zablokować jakoś?

0

String^ tekst = richTextBox->SelectionColor::set(Color::Black).ToString();
Co to w ogóle za konstrukcja? Jawne wywołanie settera i wywołanie metody na wyniku.. settera? I dziwisz się, że kompilator błąd zwrócił ;)? Wiesz co to są właściwości?

1 użytkowników online, w tym zalogowanych: 0, gości: 1