Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno RichEdit v Delphi - efektivní rozlišení slov (syntaxe)

Zdravím,
řeším rozlišení slov(syntaxe) v RichEditu - mám to již funkční - používám vlastnost RichEditu SelAttributes - takže procházím znak po znaku, skládám je do slov a pokud je vybrané slovo v tabulce klíčových, označím jej pomocí SelStart + SelLength a vlastností SelAttributes nastavím požadovaný styl. Problém nastává při rozlišování většího objemu dat - když procházím a rozlišuji např: 35-ti kilový text, už to trvá asi 20 vteřin, což mi příjde moc a navíc to zdržuje.
Nezná tedy někdo jiný efektivnější způsob rozlišení slov než dle výše zmíněného postupu?

Děkuji ;-)

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Richedit je na zvýrazňování syntaxe dost nešťastné řešení. Představ si, že máš dlouhý zdroják, pracn…
Jan Fiala 17.04.2008 08:38
Jan Fiala
Dík, za tip - vyzkouším ten SynEdit ;-) Pes: kdybych chtěl rozlišovat jen viditelný text tak aby to…
mrazek 17.04.2008 12:57
mrazek
Ak chces zvyraznovat len viditelny text tak nepouzijes ziaden richedit, zvyraznovanie sa robi pri vy…
MM.. 17.04.2008 13:30
MM..
A já jen dodám, že vlastní vykreslování v RichEditu bych teda opravdu dělat nechtěl... ;-)
Jan Fiala 17.04.2008 15:08
Jan Fiala
V tom vykreslování v RichEditu nevidím problém, akorát je naprd ta rychlost ;-) Jo, kdybych se rozh…
mrazek 17.04.2008 19:10
mrazek
V tom vykreslování v RichEditu nevidím problém, akorát je naprd ta rychlost Já jsem nemluvil o nast…
Jan Fiala 17.04.2008 19:41
Jan Fiala
Tak to jsem špatně pochopil... ;-) K tomu balíku SynEditu - dík za radu, prubnu :-) A jinak pravda…
mrazek 17.04.2008 20:26
mrazek
Odsraneni baliku NetMaster a nahrazeni balikem INDY, odstraneni QuickReport a nahrazeni RaveReportem…
Jan Fiala 17.04.2008 20:50
Jan Fiala
Pravda je, že s balíkem NetMaster ani nynějším INDY nedělám, QuickReport jsem kdysi používal, ale už…
mrazek 17.04.2008 22:09
mrazek
V době, kdy BDE vyšlo ses mohl připojovat maximalně přes ODBC, popř. později přes problematicke ADO…
Jan Fiala 17.04.2008 22:21
Jan Fiala
S tím BDE jsem to asi napsal nešťastně a sám jsem ho nepoužíval, ale asi 2x jsem byl nucen rozjet ně…
mrazek 17.04.2008 22:43
mrazek
Celkem jsme odběhli od tématu ;-) Každopádně děkuji všem zúčastněným za cenné informace, které mi do… poslední
mrazek 20.04.2008 19:27
mrazek

Richedit je na zvýrazňování syntaxe dost nešťastné řešení.
Představ si, že máš dlouhý zdroják, pracně nastavíš atributy a pak na začátku vložíš komentář bloku. V té chvíli bys měl nastavit pro celý zbývající zdroj zvýraznění komentáře. Pak komentář zrušíš a můžeš začít zvýrazňovat od začátku.

Pro takové věci se používá prostý text a zvýrazňování v průběhu vykreslování obrazovky. Zvýrazňuješ jen to, co uživatel vidí. A tohle zase není tak jednoduché.

Efektivnější metodou je použít "hotové" řešení, např:
SynEdit - free komponenta s podporou zvýrazňování + spusta hotových zvýrazňovačů, nástroj na tvorbu nových atd.
PlusMemo - neni free, ale velmi dobra implementace
Scintilla - free, je to DLL, ale existuje pro ni i Delphi wrapper

Pokud bys trval na RichEdit, tak se podivej na: RichEdit Syntax Highlighter
Jsou to tridy, ktere zvyraznovani syntaxe v RichEdit umoznuji

Dík, za tip - vyzkouším ten SynEdit ;-)

Pes: kdybych chtěl rozlišovat jen viditelný text tak aby to bylo vidět i při posunu (scrollování) - bylo by asi lepší pro to rozlišení použít vlákno ne? Aby se to při posunu necukalo...
Už jsem pracoval s vlákny na grafických komponentách, ale zase je tam třeba ošetřit "kritickou sekci" a obávám se, že při použití v RichEditu to asi nebude sranda :-(

Ak chces zvyraznovat len viditelny text tak nepouzijes ziaden richedit, zvyraznovanie sa robi pri vykreslovani textu takze musel by si naprogramovat vykreslovanie textu do okna, uz som o tom pisal, (resp. pouzit na to komponentu ak to uz niekto naprogramoval nejako univerzalne - predpokladam ze nieco take bude ten SynEdit).

V tom vykreslování v RichEditu nevidím problém, akorát je naprd ta rychlost ;-)

Jo, kdybych se rozhodnul si pohrát s tím vykreslováním pouze zobrazeného obsahu, jak jsi psal v prostém textu, jakou komponentu na to nejlíp použít? Obyčejné TMemo?

Pes: jinak zkoušel jsem ten SynEdit - stáhnul jsem nějakou verzi 2.0.6, ale nepovedlo se mi to nainstalovat - teda pokud se to instaluje, jako package - nenašel jsem tam žádný *.bpl ani *.dpc soubor - možná bude problém v tom, že mám Delphi 2007 - v adresáři package toho SynEditu jsem našel jen soubory do verze 2006 (ikdyž předpokládám, že z Delphi 2006 by to mohlo jet...)

- mimochodem - tohle je další důvod, proč se od počátku snažím vyvarovat jakýchkoliv externích komponent, protože při použití standardních komponent z 99-ti % není problém s přechodem mezi verzemi Delphi - bez větších problémů jsem spustil databázový prográmek(na Oracle) napsaný v Delphi 6 pod Delphi 2007 - což je naprosto skvělé, když si vzpomenu, jak jsme přepisovali programy napsané v C# + .NET ve visual studiu 2003 - do visual studia 2005 - bylo to podobné, jako přejít z Win XP na Visty (všechno je jinak, jinak funguje a jinak vypadá) :-D (a to byl rozdíl jen dvou verzí předpokládám v rámci 3 roků - ve srovnání s Delphi 6 - Delphi 2007 - tuším 6 let a 7 hlavních verzí je to nebe a dudy 8-))

V tom vykreslování v RichEditu nevidím problém, akorát je naprd ta rychlost

Já jsem nemluvil o nastavování atributů textu, ale o vylreslování. To je docela rozdíl.

To by jet mělo, instaluje se to přes DPK v adreari Packages. BPL (zkompilovany balíček ani DPC nepotřebuješ). Popr. si uprav soubor .\Source\SynEdit.inc a dopln si tam vetev pro D2007

A ze pri pouziti standardnich komponent neni problem? Z Delphi zmizely cele baliky komponent a byly nahrazeny novymi baliky. Externi komponenty, ktere mas se zdroji bez problemu prelozis i pod novejsimi verzemi Delphi.

Odsraneni baliku NetMaster a nahrazeni balikem INDY, odstraneni QuickReport a nahrazeni RaveReportem, presouvani SQL linku v dbExpress mezi edicemi Delphi, odstraneni SQL linku v BDE, odstraneni lokalizatoru z IDE, ...
Je toho vic, ale zrejme jsi mel stesti, ze jsi na nic z toho nenarazil.
U konkurence je to podobne.

Pravda je, že s balíkem NetMaster ani nynějším INDY nedělám, QuickReport jsem kdysi používal, ale už je to docela dlouho, co jsem ho zavrhnul, Rave je celkem slušný a zdál se mi i jednoduchý na použití, ale v Delphi 2007 standardně není(nenašel jsem ho tam) a někde jsem četl, že je placený(zas tak dobrý není, aby stál za nákup...) (pro tisk používám jiné komponenty resp. nástroje).

BDE jsem taky nepoužíval(a neuraž se, ale podle mě to bylo zastaralé už v době, kdy to vyšlo - a přišlo mi divné být s připojením k DB závislý na ovladačích Borlandu a ne společností, které ty databázové stroje vytvářejí
(ikdyž v tomhle možná trochu kecám, nevím přesně, jak to s nimi je, ale je to každopádně produkt Borlandu) - navíc se mi nelíbilo, že se připojení k DB konfigurovalo v BDE a ne přímo v aplikaci... - a nešťastné je, že při přesunu aplikace využívající BDE na jiné "železo" se musí BDE doinstalovat a nastavit v něm zvlášť připojení k DB)

A pokud vím, tak dbExpress je taky výtvorem Borlandu a obsahuje konekty na nejpoužívanější DB stroje.
(ikdyž tohle už je zdařilejší balík a sám jsem zvažoval jeho použití ;-))

Osobně používám pro DB aplikace ADO resp. balík dbGO - dá se s tím připojit v podstatě k jakémukoliv DB stroji, na který jsou OLEDB ovladače - a ty jsou dneska opravdu na všechno... (vyzkoušeno to mám na Informixu, MSSQL 2000 i 2005, Oracle, DB2, MySQL, i na "souborové" databáze typu Paradox, FoxPro, Access a dokonce se dá připojit i k Excelu a dělat do něho selecty :-D) a krásné na tom je, že ConnectionString se nastavuje přímo v aplikaci, takže s přesunem na jiné PC nejsou problémy(v podstatě to stačí zkopírovat :-))

V době, kdy BDE vyšlo ses mohl připojovat maximalně přes ODBC, popř. později přes problematicke ADO (ze začátku). Takže BDE bylo ve srovnani tenkrat s tim narosto skvělé a i dnes, když je s ADO srovnám tak má pár věcí, které jsou na ADO nepříliš dobře.
Ano, BDE se muselo instalovat, ale veškeré nastavení se dělaly v aplikaci. Přes BDE administrátora to dělali jen nešťastníci, kteří si dobrovolně způsobovali problémy.
ADO se instalovat nemusí, protože je už ve Winows "nainstalované". Pokud chceš, aby tvůj program fungoval i na Win98, musíš si ADO nainstalovat.

dbExpress obsahuje připení na nejpoužívanější SQL servery, bohužel Borland (Code Gear) šibuje s jejich obsažením v různých edicích Delphi. Takže ve verzi professional 2006 už byla tuším jen Interbase a MySQL

A on se Connection string někdy nastavoval i jinde než v aplikaci? Dělat to přes nějakého administrátora připojení na stanici v ovládacích panelech je nesmysl. Je to stejně hloupé jako to dělat v BDE administrátorovi.

S tím BDE jsem to asi napsal nešťastně a sám jsem ho nepoužíval, ale asi 2x jsem byl nucen rozjet nějakou starou aplikaci(jejíž autor někde "zmizel") na novém PC a byla to celkem sranda.

Pokud jde o ADO, pravda je, že jsem ho používal od Delphi 6, ve starších verzích nevím, jak to šlapalo nebo jestli to tam vůbec bylo...

S tou Win98 jsem problém neměl, šlo tam spíše o verze ovladačů, nepamatuji si, že bych tam něco musel instalovat, ale to už je docela dlouho a lhal bych, kdybych řekl, že jsem tam nic neinstaloval, je to tak dlouho, že už to sám nevím.
(nicméně už to je stejně docela dlouho nepodporovaný systém a zřídka se na něj dostanu - mimochodem brzy bude i Win XP nepodporovaný :-()

A o tom ConnectionStringu jsem to možná napsal taky nešťastně, prostě mi to přes ten BDE administrátor, jak jsi psal přišlo podobné, resp. jsem v něm nastavoval "parametry" pro připojení, nic víc ani nic míň.

Zpět do poradny Odpovědět na původní otázku Nahoru