|
[ IDE @ 10.09.2005. 14:54 ] @
| pokusavam odraditi da mi RichEdit prepoznaje rezervisane rijeci, tj. naredbe u c-u...
znaci ako ukucam int, while ili npr. #include da ih on automatski oboji i/ili bolduje...
znaci klasicna stvar kod editora koje koristimo za programiranje....
ja imam sljedecu ideju:
napravio bih f-ju koja:
-pri OnKeyDown ili OnKeyPress event od RichEdit-a (sta je bolje upotrebiti, iz vaseg iskustva) provjerava slova s lijeva koja cine jednu rijec, tj. provjerava sva slova koja se nalaze lijevo od trenutnog polozaja kursora a do prvog razmaka, tj. prvog " " i ako se takva ista rijec nalazi u jednoj bazi koja bi sadrzala sve rezervisane rijeci u c-u , onda tu rijec (sva slova ulijevo do prvog razmaka ) boldujem ili obojim...
sve ovo bi bilo poprilicno lako odraditi da se citav tekst provjeri na klik dugmeta, i onda tek oznaci sve rezervisane rijeci, ali, naravno zelim da se to odradjue u realnom vremenu, tj. dok kucamo, i da se ne provjerava uvijek citav tekst, vec samo zadnja kucana rijec
za sada ne bih rijesavao da mi se "{" i "}" zagrade odvajaju za jedan tab, tj. kasnije kad zatvaramo petlju vracaju za jedan tab (znate sta mislim), vec bih za sada SAMO uradio da mi se podebljavaju ili oboje rezervisane rijeci....
mene interesuje ima li ko bolji predlog za rijesavanje ovog problema (NARAVNO da postoji) i da mi isti predlog ovdje izlozi....
drugo, iako sam otprilike smislio kako da odradim , pomenutu f-ju ne mogu da napravim...
interesuje me moze li mi ko pomoci u vezi pomenute f-je, ne da mi je uradi, vec da mi pomogne koje f-je da pogledam da je sa njima zavrsim,npr: "pri uporedjivanju pogledaj f-ju "AnsiContainsText(const AnsiString AText, const AnsiString ASubText);" ", na sta da vodim racuna...
Npr. trenutno ne znam kako da gledam slova u RichEdit-u u nazad do prvog razmaka, a u odnosu na trenutni polozaj kursora....
interesuje me i kako napraviti kod, da kad ukucamo npr. #, da se ono AUTOMATSKI zamjeni sa npr. zelenim #...
nesto sam pokusavao, ali....
znam da trazim MNOGO, pa ako vam je tezina, ne morate ni odgovarati... a ako mi neko pomogne-hvala...
kazem-makar samo usmjerenja u pravom smjeru....
u svakom slucaju- necu odustajati dok ne napravim receno...
[Ovu poruku je menjao fucking voodoo dana 10.09.2005. u 15:55 GMT+1] |
[ japan @ 10.09.2005. 15:57 ] @
sto se tice f-je, savetujem ti da pogledas lex(flex) i yacc(bison) alate, u tvom slucaju lex(flex) pogotovo... alat za leksicku analizu, koji na osnovu tvoje specifikacije pravi C-kod za prepoznavanje reci. a sto se tice toga kako bi ovoj funkciji prosledjivao text, prvo sto mi pad ana pamet je da imas neki buffer, koji sadrzi text levo i desno od kursora do prvog white-space-a, i da taj text prosledjujes f-ji koja bi ga u slucaju da prepozna neku od kljucnih reci vracala npr. neku cekobrojnu konstantu... verovatno postoji i pametnije resenje...
[Ovu poruku je menjao japan dana 10.09.2005. u 17:18 GMT+1]
[ IDE @ 10.09.2005. 17:11 ] @
pogledacu ovo sto si mi prvo rekao
a drugo u sustini predstavlja ono sto sam ja rekao...zar ne?
znaci gleda skup slova do prvog razmaka s lijeve strane kursora (znaci prvu rijec lijevo) i nju saljem f-ji koja gleda da li je to neka rezervisana rijec....
hvala na odgovoru...
jos neko??
[ japan @ 10.09.2005. 17:50 ] @
Citat: fucking voodoo:
a drugo u sustini predstavlja ono sto sam ja rekao...zar ne?
u principu da, ali ne bi smeo da posmatras tekst samo levo od cursora, jer bi onda eliminisao mogucnost npr. kad pogresis u kucanju i napises #incude, da stanes kursorom iza n, i da samo dodas l... znaci moras da posmatras tekst i levo i desno od kursora, do prvog white-space-a..
[ IDE @ 10.09.2005. 22:39 ] @
da, Ok!
u pravu si...
trebalo bi tako gledati...
ima li ko ideju kako da u odnosu na kursor "uhvatim" rijec, tj. slova lijevo i desno , do prvog razmaka??
[ X Files @ 11.09.2005. 18:50 ] @
[ IDE @ 11.09.2005. 19:44 ] @
hvala ovo mi je i trebalo...(bar mi se na prvi pogled cini)
prostudiracu malo ovo...
hvala!!!
[ X Files @ 11.09.2005. 19:49 ] @
Evo ti i kod iz datog primera:
[ IDE @ 11.09.2005. 20:21 ] @
da, ok, skinuo sam kod (napokon nakon klikanja po linkovima onim)
ali...ali...
kad se pokusa iskompajlirati javlja sljedecu stvar:
[C++ Error] Unit1.cpp(82): E2015 Ambiguity between 'FINDTEXTA' and 'Richedit::FINDTEXTA'
i
[C++ Error] Unit1.cpp(128): E2015 Ambiguity between 'FINDTEXTA' and 'Richedit::FINDTEXTA'
u cemu je stvar?? kako to popraviti? volio bih da vidim kako se ponasa ovakav kod pri radu...nesto sam pokusao, ali nemam bas toliko znanje, ili nesto ne vidim sta sam trebao uvidjeti....
[ X Files @ 11.09.2005. 22:02 ] @
Probaj ovo:
::FINDTEXT FindText;
umesto:
FINDTEXT FindText;
[ itf @ 11.09.2005. 22:52 ] @
Pa zar to ne bi trebalo biti isto?
[ X Files @ 12.09.2005. 05:39 ] @
Ponekad isti naziv postoji i u VCL-u i u Win32 API-ju, sto je posledica razvoja
VCL-a. Tada je potrebno razresiti koja ti verzija treba, i to se radi sa one dve
tackice (kada hocemo Win32 API, i to obicno u slucaju kada sumnjamo da slicna
stvar postoji i u VCL-u).
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|