Skocz do zawartości

[delphi] Kolorowanie składni w RichEdit


Max1414

Polecane posty

Witam!

 

Chciałbym w swoim programie zrobić kolorowanie składni Delphi...

 

Na razie robię pogrubianie, ale niestety wyniknął problem z wydajnością.

Mam w tablicy słowa kluczowe, które chcę pogrubić, ale gdy wyszukuje w RichEdit każde słowo i pogrubiam to zajmuje to dość dużo czasu, ma ktoś jakiś pomysł jak to zrobić, aby było wydajnie?

Moje projekty: http://wojciechkulik.pl

Link do komentarza
Udostępnij na innych stronach

Jeśli nie chcesz się babrać, to możesz użyć czegoś gotowego (chyba SynEdit jest dobry).

 

A jak chcesz zrobić kolorowanie składni porządnie, to chyba najlepszy sposób jest przez podpięcie własnej WndProcki RichEdita (Get/SetWindowLong z GWL_WNDPROC) i tam reagowanie na WM_PAINT i kolorowanie widocznego tekstu.

 

Tu masz dobre info: http://www.i-lo.tarnow.pl/edu/inf/prg/win32asm/pages/35.htm (nie patrz na kod. chodzi o sposób, funkcje, komunikaty).

҉

Link do komentarza
Udostępnij na innych stronach

możesz zrobić kolorowanie swojej składni w SynEdit

 

(sprawdź przykład "SynEdit\Demos\HighlighterDemo", tam masz style czcionki, słowa kluczowe itd.) - dokładniejsza odpowiedź jest w pliku "SynHighlighterSample.msg" potem taki plik przetwarzasz przez SynGen.exe na kod Delphi i gotowe (jak to podłączyć masz w przykładach)

soon Delphi will be only for veterans and finally we all will die at the end…

delphi.dathox.com - nowinki z świata Delphi/Pascala

only programmers and drug dealers call their customers "users"

 

Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą.

Link do komentarza
Udostępnij na innych stronach

może bym spróbował tego własnego kolorowania (przerobienie RichEdit), ale nie bardzo wiem jak się za to zabrać...

 

Załóżmy, że robię swój komponent oparty na TCustomRichEdit... no i teraz:

- nie bardzo rozumiem o co chodzi z tym przechwyceniem procedury okna kontrolki i po co,

- jak podczas obsługi WM_PAINT zmienić kolor wyświetlanego tekstu/skąd wziąć aktualnie wyświetlany tekst? (czy należy użyć komunikatu, aby pobrać ten tekst?)

Moje projekty: http://wojciechkulik.pl

Link do komentarza
Udostępnij na innych stronach

@nvm

no poprostu chce zrobić różne tryby - zwykły tekst i żeby można go edytować np. jak w WordPad oraz kolejny tryb - kolorowanie składni Delphi

 

wiec jak chcę sobie pogrubić jakieś słowo w tekście, który mam to nie znaczy, że chce tworzyć swoje kolorowanie składni :P

 

Wcześniej pisałem (to bym uznał za priorytet tego tematu teraz):

może bym spróbował tego własnego kolorowania (przerobienie RichEdit), ale nie bardzo wiem jak się za to zabrać...

 

Załóżmy, że robię swój komponent oparty na TCustomRichEdit... no i teraz:

- nie bardzo rozumiem o co chodzi z tym przechwyceniem procedury okna kontrolki i po co,

- jak podczas obsługi WM_PAINT zmienić kolor wyświetlanego tekstu/skąd wziąć aktualnie wyświetlany tekst? (czy należy użyć komunikatu, aby pobrać ten tekst?)

Moje projekty: http://wojciechkulik.pl

Link do komentarza
Udostępnij na innych stronach

Załóżmy, że robię swój komponent oparty na TCustomRichEdit... no i teraz:

- nie bardzo rozumiem o co chodzi z tym przechwyceniem procedury okna kontrolki i po co,

- jak podczas obsługi WM_PAINT zmienić kolor wyświetlanego tekstu/skąd wziąć aktualnie wyświetlany tekst? (czy należy użyć komunikatu, aby pobrać ten tekst?)

Nie musisz mieć swojego komponentu. Podmieniasz WndProc`kę (czyli procedurę, do której idą wszystkie komunikaty do okna/kontrolki) RichEdita, w niej reagujesz na WM_PAINT (czyli odrysowanie kontrolki) i tam już musisz 'ręcznie' rysować tekst kolorując wybrane słowa. Przejrzyj opis, który Ci podałem. Tam jest info jak zrobić takie kolorowanie składnie w win32asm. Na język nie patrz tylko sposób wykonania...

҉

Link do komentarza
Udostępnij na innych stronach

@nvm

no poprostu chce zrobić różne tryby - zwykły tekst i żeby można go edytować np. jak w WordPad

 

W TRichEdit można zrobic pogrubienia, kursywe, zmiane koloru, wyśrodkowanie tekstu (lub poszczególnych części) itp. korzystając jedynie z komponentu TActionList czy jakoś tak, dodajesz tam akcje i podpinasz pod TRichEdit i masz sporo przydatnych opcji, mój stary notatnik na tym jedzie:

 

bez_tytułu.PNG

Link do komentarza
Udostępnij na innych stronach

nom ;) ale mi chodzi, żeby były te dwie rzeczy w jednym komponencie hehe:) bo do tego na co ty odpowiedziałeś to mogę użyć RichEdit, ale tam nie ma kolorowania składni, natomiast SynEdit nie ma znowu tych podstawowych opcji :P czyli potrzebuje czegos -> RichEdit + SynEdit = MyPotrzeba

Moje projekty: http://wojciechkulik.pl

Link do komentarza
Udostępnij na innych stronach

Można też zrobić inaczej przyjmując pewne ograniczenia. Że tylko przy ładowaniu pliku koloruje tekst w jakimś wątku, a następnie przy każdym naciśnięciu klawisza sprawdzić ostatnie słowo i je pokolorować. To tak z ograniczeniem, że nie ma komentarzy i napisów. Jeśli mają być to można zrobić na przykład wątek, który na początku szuka wszystkie {,},' i sobie zapisuje gdzie są, a gdy się jakiś taki znak usunie, lub napisze do wątek aktualizuje to, i wtedy gdy się jakieś słowo napisze sprawdza się w takiej bazie czy sie jest między ' ' czy { }. Ale to chyba mało elegancko.

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Kurde, no nie mogę znaleźć - chyba pójdę na łatwiznę ;] dam dwa komponenty - RichEdit do trybu zwykłego edytora i SynEdit do trybu kodu programów ;]

E, powalcz ;-) Jak to będziesz robił to się sporo nauczysz (winapi, gdi). Myślę, że warto. Ale najłatwiej jest to chyba zrobić pisząc własny komponent od podstaw. Ewentualnie modyfikując SynEdita.

҉

Link do komentarza
Udostępnij na innych stronach

Gdyby każdy programista miał takie podejście to nie byłoby wielu rzeczy :P Pamiętaj, ze Delphi to nie tylko ustawianie komponentów na formularzu ;)

 

Ja rozumiem.... ale ja nie robie komponentów, więc jak sie rzucę na coś takiego to na pewno nie wyjdzie mi nic satysfakcjonującego, a skoro ktoś zrobił taki porządny SynEdit to chyba nie jest wielko ZLOOO jeżeli z niego skorzystam...

Moje projekty: http://wojciechkulik.pl

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...