BCB6, podświetlanie składni-jak to zrobić? TQRRichEdit? itp?

dział ogólny

BCB6, podświetlanie składni-jak to zrobić? TQRRichEdit? itp?

Nowy postprzez samurai-jerry » Å›roda, 11 maja 2011, 10:58

Witam!

Mam pytanie do bardziej doświadczonych programistów Borland Builder C++ (zwłaszcza jeśli chodzi o wersję 6.0):
Czy istnieje jakiś sposób na skuteczne i w miarę szybkie podświetlenie składni w tym IDE C++?

Od razu piszę, że znam temat komponentu SynEdit dla Delphi, czy tam Scintilla, ale nie bardzo wiem jak skonfigurować SynEdit dla Borland C++ Builder v.6.0, a co do Scitilli to jeszcze nie próbowałem, bo w grę wchodzi pisanie własnego komponentu a na to za bardzo nie mam czasu.

Z netu dowiedziałem się, że można wykorzystać RichEdit i posłużyć się właściwością EM_SETCHARFORMAT w celu zmiany koloru części tekstu, tzn. najpierw podświetla się wybrany fragment, potem zmienia kolor tegoż tekstu. Problemem okazuje się tutaj pamięciożerność tego komponentu.. :/
Czytałem też, że można tą niedogodność ominąć formatując TYLKO TYLE tekstu ile w danym momencie (np. w danym okienku RichEdit) jest potrzebne.
InformacjÄ™ o tym mam z tej stronki:
http://edu.i-lo.tarnow.pl/inf/prg/002_winasm/0036.php
Tam co prawda piszą o Assemblerze, ale tej odmianie Assemblera wysokiego poziomu (ze wstawkami invoke), krótko mówiąc można to bez specjalnego trudu zastosować w C++.

Drugą sprawą, która przyszła mi do głowy to to, żeby wykorzystać możliwie inny wbudowany komponent Borland C++ Builder v.6.0.
Spośród wszystkich znalazłem jedynie TQRRichEdit (od pakietu Quick Report), ale dziedziczy on od RichEdit, a więc prawdopodobnie będzie także podobnie "szybki".. :/

Zastanawiałem się, czy można wykorzystać wbudowane komponenty do pracy z MS Office, ale też jeszcze tego nie robiłem, a jak już nadmieniłem nie mam specjalnie czasu żeby brnąć w ślepą uliczkę - dlatego wolę najpierw zapytać się tutaj.

Jeżeli możecie to pomóżcie! Z góry wielkie dzięki!

Pozdrawiam! samurai-jerry
"No pain no gain" - Scorpions
Avatar użytkownika
samurai-jerry
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): sobota, 19 lutego 2011, 19:04
PodziÄ™kowaÅ‚ : 15
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: W98,W2K,WXP
Kompilator: Borland C++ Builder v6.0 Personal
wxDevCpp v.6.9
ChromeIDE+Masm32
KDevelop
Gadu Gadu: 0
    Windows XPFirefox

Re: BCB6, podświetlanie składni-jak to zrobić? TQRRichEdit? itp?

Nowy postprzez Cyfrowy Baron » Å›roda, 11 maja 2011, 11:12

Jedyny sposób na podświetlenie tekstu w RichEdit to właśnie zaznaczenie wybranego fragmentu tekstu, a potem zmiana koloru czcionki.

samurai-jerry napisał(a):Czytałem też, że można tą niedogodność ominąć formatując TYLKO TYLE tekstu ile w danym momencie (np. w danym okienku RichEdit) jest potrzebne.


Tego nie rozumiem. RichEdit korzysta z formatowania RTF i tekst albo jest formatowany, albo nie. Jeżeli jest formatowany, to kod formatowania nie jest widoczny w RichEdit o ile nie ustawisz właściwości PlainText na true.

samurai-jerry napisał(a):Spośród wszystkich znalazłem jedynie TQRRichEdit (od pakietu Quick Report), ale dziedziczy on od RichEdit, a więc prawdopodobnie będzie także podobnie "szybki".. :/


C++Builer 6 to ostatnia wersja tego środowiska, która korzysta jeszcze z Quick Report. W nowszych wersjach już tego nie ma.

Istnieje pakiet komercyjnych komponentów TRichView, które posiadają większe możliwości, w tym - nie jestem pewien do końca - posiadają wbudowaną funkcję podświetlania.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
samurai-jerry
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: BCB6, podświetlanie składni-jak to zrobić? TQRRichEdit? itp?

Nowy postprzez samurai-jerry » Å›roda, 11 maja 2011, 13:02

Cyfrowy Baron napisał(a):Jedyny sposób na podświetlenie tekstu w RichEdit to właśnie zaznaczenie wybranego fragmentu tekstu, a potem zmiana koloru czcionki.

samurai-jerry napisał(a):Czytałem też, że można tą niedogodność ominąć formatując TYLKO TYLE tekstu ile w danym momencie (np. w danym okienku RichEdit) jest potrzebne.


Tego nie rozumiem. RichEdit korzysta z formatowania RTF i tekst albo jest formatowany, albo nie. Jeżeli jest formatowany, to kod formatowania nie jest widoczny w RichEdit o ile nie ustawisz właściwości PlainText na true.

Na stronie, którą podałem o tym pisze szerzej, ale ogólnie mówiąc chodzi o to, żeby procesor w danym momencie (a ściśle po przechwyceniu w kolejce komunikatów w Windows komunikatu WMPAINT), wykonywał mniej obliczeń niż przy zwykłym przetwarzaniu tekstu (tzn. zaznaczaniu->sprawdzaniu->podświetlaniu każdej linii tekstu z osobna). Wówczas nie ma efektu migotania, albo chwilowego przestoju w trakcie przerysowywania okna RichEdit.
Tyle, że komponent RichEdit (tak mi się zdaje) nie udostępnia kontroli nad przechwyceniem komunikatu WMPAINT (w Borland C++ Builder to jest chyba jakoś tak zrobione, że jest zdarzenie OnPaint-jeśli jest zaimplementowane).
Z tego co ja zrozumiałem z tamtej stronki to optymalizacja polega na tym, że:
- przechwytuje siÄ™ komunikat WMPAINT (zdarzenie OnPaint)
- pisze się swoją obsługę komunikatu WMPAINT, gdzie podaje się ilość linii tekstu, początek i koniec linii z pliku lub strumienia i dopiero wtedy uruchamia się proces zaznaczenie, sprawdzenie, sformatowania=podświetlenia TYCH LINII które są potrzebne (widoczne w oknie RichEdit).

samurai-jerry napisał(a):Spośród wszystkich znalazłem jedynie TQRRichEdit (od pakietu Quick Report), ale dziedziczy on od RichEdit, a więc prawdopodobnie będzie także podobnie "szybki".. :/

Cyfrowy Baron napisał(a):C++Builer 6 to ostatnia wersja tego środowiska, która korzysta jeszcze z Quick Report. W nowszych wersjach już tego nie ma.


Czy pamiętasz może Cyfrowy Baronie czy TQRRichEdit z Quick Report umożliwia lepsze podświetlanie składni (tzn. bardziej zoptymalizowane i chociaż trochę prostsze w obsłudze)?

WIELKIE DZIĘKI za tak szybką odpowiedź Cyfrowy Baronie!!! :D :D :D :D :D

Sprawdzę te komponenty RichView i jeśli się nie uda to będę coś kombinował z TRichEdit lub TQRRichEdit.

Pozdrawiam! samurai-jerry
"No pain no gain" - Scorpions
Avatar użytkownika
samurai-jerry
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): sobota, 19 lutego 2011, 19:04
PodziÄ™kowaÅ‚ : 15
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: W98,W2K,WXP
Kompilator: Borland C++ Builder v6.0 Personal
wxDevCpp v.6.9
ChromeIDE+Masm32
KDevelop
Gadu Gadu: 0
    Windows XPFirefox

Re: BCB6, podświetlanie składni-jak to zrobić? TQRRichEdit? itp?

Nowy postprzez Cyfrowy Baron » Å›roda, 11 maja 2011, 18:12

Można przechwytywać komunikat WM_PAINT i go obsługiwać w RichEdit, ale komunikat przede wszystkim jest obsługiwany przez WindowProc, a do rysowania trzeba by użyć np. StretchBlt. Jednak gra jest nie warta świeczki, gdyż najdrobniejsze zmiany w polu, np. przewijanie RichEdit spowodują usuwanie tego co zostało wcześniej narysowane, więc trzeba by wszystko ponownie odrysowywać, i już widzę jak skacze tekst w RichEdit podczas przewijania. Na pewno nie byłoby wydajniej.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości

cron