Есть такой замечательный редактор – Notepad++. Я его использую почти каждый день для редактирования всяких файлов, связанных с нашими проектами, но не используемые непосредственно в IDE. Ну там sql, xml, txt, cmd, bat, makefile и прочие. Конечно эти файлы можно открывать и в Delphi, но там подсветка синтаксиса для xml-файлов более скудная, а остальные и не подсвечивает вовсе.
И захотелось мне вдруг внедрить в делфи такой редактор. Для начала – хотя бы просто в отдельный проект. В будущем, возможно, как некий визард для IDE. (Да, про SynEdit и TSynMemo я знаю.)
В общем Notepad++ базируется на компоненте Scintilla (SciLexer.dll). На нём, кстати, много программ базируется.
И первое, что я решил попробовать – это сделать обёртку над библиотекой, чтобы можно было использовать в Delphi. Сказано – сделано:
unit Scintilla; interface uses Windows, SysUtils, Controls; type TScintilla = class(TWinControl) protected procedure CreateParams(var Params: TCreateParams); override; end; implementation var hmod: HMODULE; { TScintilla } procedure TScintilla.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); CreateSubClass(Params, 'Scintilla'); end; initialization hmod := LoadLibrary('SciLexer.DLL'); if hmod = 0 then raise Exception.Create('The Scintilla DLL could not be loaded'); finalization if hmod <> 0 then begin FreeLibrary(hmod); hmod := 0; end; end.
Ну и для теста, что-то вроде этого:
uses Scintilla; procedure TForm1.FormCreate(Sender: TObject); var FScintilla: TScintilla; begin FScintilla := TScintilla.Create(Self); FScintilla.Parent := pnlNotepad; FScintilla.Align := alClient; end;
Запустил – работает. Только конечно без подсветки, сочетаний клавиш и прочего…
Накидал я этот текстик и пошёл выгулять гавкающих. Пока ходил-бродил прокручивал в голове – как много всякого надо сделать-прикрутить, изучить API (а оно всё на сях)… Ну и когда пришёл домой, решил просто поискать, нет ли уже чего-нибудь готового. И нашёл. На упомянутой выше странике в wiki есть парочка ссылок. Скачал, посмотрел, пока не буду комментировать.
На самом деле, я хочу решить такую задачу. Добавить в IDE Delphi некий визард, который при определённых обстоятельствах создаёт текстовые файл (этот файл непосредственно связан с pas-файлом) и добавляет их в проект (кстати, это не сложно, есть наработки). При этом, при открытии таких файлов, мне нужна подсветка синтаксиса. Ну и сочетания клавиш. Наверное, можно как-то научить встроенный редактор подсвечивать произвольные форматы – пока не разбирался. Но я думал, что удастся взять что-то готовое с уже готовыми схемами подсветки. В частности, мне очень нравится, что Notepad++ при выделении какого-нибудь слова сразу же подсвечивает все такие же слова в тексте.
Ещё в сторону отдельного компонента смотрю, потому что хочу, чтобы файл открывался не отдельной страницей (Page), а отдельной вкладкой снизу (где можно переключаться между Code/Design/History). Вкладку создать тоже не сложно, но внедрить в неё редактор из Delphi что-то пока не получилось.
Занимался ли кто-нибудь написанием визардов и есть ли подобный опыт? Исходники GExperts и CnPack уже активно изучаю, но пока не вижу того, что мне нужно.
Вопрос на www.delphikingdom.ru - 82253.
8 коммент.:
> Notepad++ при выделении какого-нибудь слова сразу же подсвечивает все такие же слова в тексте.
Такая штука уже есть в cnWizards - только по умолчанию отключена почему-то.
А вот в качестве альтернативы Notepad++ и даже как альтернативу Sublime Text советую посмотреть SynWrite. Исходники на Delphi на github-e.
Странное желание, если честно. Я давно разочаровался в "интеграции всего и вся". Мне лично FAR'а за глаза хватает.
Идея интересная. На самом деле в Delphi не хватает какого-то API, позволяющего открывать в текстовом редакторе IDE другие форматы файлов с синтаксической подсветкой, проверкой синтаксиса и Code Completion.
Aleksey Timohin
> Такая штука уже есть в cnWizards
Она работает только с идентификаторами (т.е. не будет работать в произвольных файлах) и при этом подтормаживает редактор :(
> А вот в качестве альтернативы .. посмотреть SynWrite
Интересный проект! Действительно его стоит "пощупать". Только интерфейс у него порой задумчивый...
Спасибо за ссылку! :)
Александр Люлин
>Странное желание
Ну у меня порой и не такие желания возникают :) Но редактор в IDE очень даже ничего, порой просто напрягает постоянное переключение между разным софтом (а у каждого свои хоткеи и не всегда их легко настроить под себя). В идеале, я бы хотел расширить возможности именно встроенного редактора кода...
>Мне лично FAR'а..
Александр, Вы консерватор! Впрочем, это свойственно программистам...
Roman Yankovsky
Вот-вот, именно этого и не хватает...
Всем
Вопрос на Круглом Столе модерацию прошёл. Там я более детально описываю решаемую задачу.
Я МЕГА-консерватор :-)
Посмотрите на компонент EControl.ru. ПЛАТНЫЙ. Вместо Сцинтиллы. (Прошлое сообщение пропало)
Да, на ECon основан SynWrite (который упомянули).
Кстати, свою подсветку синтаксиса мне удалось сделать:
Своя подсветка синтаксиса в IDE Delphi. Пример
Отправить комментарий