/ / Rich Edit Delphi контроли, които поддържат RegEx търсения - Делфи

Ритъм Редактиране Delphi контроли, които поддържат RegEx Търсения - Делфи

Бих се радвал много на помощ на всеки, който има опит в работата с контролите на Rich Edit в Delphi, които поддържат търсения от Regular Expression.

Аз съм играл наоколо с RichEdit.dll V3 базирани контроли само за да установи, че MSe ITextSelection.FindText изпълнение използва някакъв MS Mickey Mouse вариант на регулярните изрази (т.е. ^ p за параграф) и т.н.

Редовните изрази за търсене срещу TRichEdit1.text връщат несъответстващите на SelStart местоположения поради скритото RTF форматиране.

Предполагам, че това изключва всички контроли / компоненти, базирани на RichEdit.dll, освен ако някой не може да предложи решение?

Аз също погледнах Редактор на богати мечти но се притеснявам, че това е по-дълго поддържано (от 2005 г.). В противен случай това изглежда идеално, но не може да намери никаква информация за връзка, за да попита какво е поддържан синтекса на ReGex (т.е. PCRE?)

Друг вариант беше ProfHTMLEdit но това се натрапва на 2MB HTML файла, който го изпробвах. Редактирането също не отговаряше на големи файлове. Срам, тъй като контролът изглеждаше обещаващ.

Още един компонент беше TRichView но за съжаление изглежда, че не поддържа търсене чрез Регулярни изрази.

Просто казано, моето изискване е контролът на Delphi 7, които позволяват прости редакции (т.е. получер, курсив, подреждане на селекциите) и най-важното е способността на търсенето да се използва регулярни изрази (за предпочитане PCRE .. но не задължително). Не е твърде тревожно какво е основният механизъм за съхранение (rtf, html, xyz).

Всяка помощ или насоки / съвети / съвети много оценявам.

Отговори:

2 за отговор № 1

Тази връзка може да помогне. Не мога да говоря от опита с изброените компоненти, но като помощник от много години мога да кажа, че подкрепата на Jan Goyvaert за продуктите му постоянно е изключителна. Може да опитате да се свържете с него - той може да знае за полезен компонент. На мен ми се струва, че ако сте копирали текста от контрола RichEdit на низ променлива (без форматиране), може да сте в състояние да търсите, че след това карта, която се позиционира обратно към текста във вашия контрол. Просто мисъл.


2 за отговор № 2

Странно е, но повечето списъци с компоненти на Regexp за Delphi не споменават тази, която използвам почти през цялото време:

VBScript_RegExp_55_TLB.pas

получени чрез импортиране на "Microsoft VBScriptRegular Expressions 5.5 "библиотека с тип" VBScript ", тъй като е била въведена с VBScript / Javascript 5.5 заедно с Internet Explorer 5.5, което означава, че сте сигурни, че клиентът на крайния потребител има библиотеката, ако искате потребителите да имат IE5. 5 или по-горе. Не го комбинирах с богат редакторски контрол.


1 за отговор № 3

Използвам TRichView и въпреки че, както казвате, че не поддържа търсене чрез Regular Expressions, получавате го с пълен изходен код.

Аз направих различни персонализации на пакета за моя собствен софтуер, а за да променям интернационалите на функционалността за търсене, за да поддържам регулярните изрази, не би било твърде трудно според мен.

Това вероятно е вярно за всеки RichEdit контрол, в който имаш изходния код.

След това погледнете: "... използвайте Редовни изрази в Делфи?" за идея как да го добавите сами.


И аз намерих един потребител на TRichView, който изпълни регекс. Описва малко как го е направил, а опаковката, която използва, е TRegEx. Аз не съм запознат с TRegEx себе си, но може би той се позовава към тази, или бихте могли да опитате да използвате TRegExpr.

Можете да намерите добър списък на RegEx библиотеки за Delphi на About.com.


1 за отговор № 4

Аз направих още изследвания на TRichEdit и RichEd20.dll, въз основа на отличната обратна връзка към този въпрос.

Някакъв фон. Искам да използвам TPerlRegEx за търсене на съдържание за контрол на TRichEdit и да подчертая съвпадащи резултати. Предишни опити за използване на RichEdit1.Lines.Text като предмет на търсене доведоха до несъответстващи RegEx MatchedExpressionOffset и RichEdit1.SelStart.

Бях си помислил, че това се дължи на форматирането на RTF .. но това беше само аз с мозъчна перда!

При по-внимателно разглеждане има два проблема, които трябва да бъдат взети под внимание, когато не използвате RichEdit.FindText:

  1. Ако използвате RichEdit.Text или RichEdit.Lines.Text, тогава имайте предвид, че те съдържат допълнителни символи # $ D и # $ A возврат на карета и подаване на ред.
  2. Ако използвате TPerlRegex.MatchedExpressionOffset, това е един, докато TRichEdit.SelStart е базиран на нула.

За да намерите правилно SelStart, използвайки връщанията на превозни средства TPerlRegex и емисиите на линиите, трябва да се вземат предвид при определяне на SelStart.