

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
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).
A já jen dodám, že vlastní vykreslování v RichEditu bych teda opravdu dělat nechtěl...
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á)
(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
)
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.
Tak to jsem špatně pochopil...
K tomu balíku SynEditu - dík za radu, prubnu
A jinak pravda je, že některé balíky byly přejmenovány či sloučeny - taky jsem psal, že není problém z 99-ti %

Ale i tak jsem osobně neměl s přepisem problém
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
) 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íň.
Celkem jsme odběhli od tématu

Každopádně děkuji všem zúčastněným za cenné informace, které mi dost pomohly.