воскресенье, 20 октября 2013 г.

Визард для Delphi? Вопросик читателям…

Есть такой замечательный редактор – 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 коммент.:

Aleksey Timohin комментирует...

> Notepad++ при выделении какого-нибудь слова сразу же подсвечивает все такие же слова в тексте.
Такая штука уже есть в cnWizards - только по умолчанию отключена почему-то.

А вот в качестве альтернативы Notepad++ и даже как альтернативу Sublime Text советую посмотреть SynWrite. Исходники на Delphi на github-e.

Александр Люлин комментирует...

Странное желание, если честно. Я давно разочаровался в "интеграции всего и вся". Мне лично FAR'а за глаза хватает.

Roman Yankovsky комментирует...

Идея интересная. На самом деле в Delphi не хватает какого-то API, позволяющего открывать в текстовом редакторе IDE другие форматы файлов с синтаксической подсветкой, проверкой синтаксиса и Code Completion.

Николай Зверев комментирует...

Aleksey Timohin
> Такая штука уже есть в cnWizards
Она работает только с идентификаторами (т.е. не будет работать в произвольных файлах) и при этом подтормаживает редактор :(

> А вот в качестве альтернативы .. посмотреть SynWrite
Интересный проект! Действительно его стоит "пощупать". Только интерфейс у него порой задумчивый...
Спасибо за ссылку! :)


Александр Люлин
>Странное желание
Ну у меня порой и не такие желания возникают :) Но редактор в IDE очень даже ничего, порой просто напрягает постоянное переключение между разным софтом (а у каждого свои хоткеи и не всегда их легко настроить под себя). В идеале, я бы хотел расширить возможности именно встроенного редактора кода...

>Мне лично FAR'а..
Александр, Вы консерватор! Впрочем, это свойственно программистам...


Roman Yankovsky
Вот-вот, именно этого и не хватает...


Всем
Вопрос на Круглом Столе модерацию прошёл. Там я более детально описываю решаемую задачу.

Александр Люлин комментирует...

Я МЕГА-консерватор :-)

PUser комментирует...

Посмотрите на компонент EControl.ru. ПЛАТНЫЙ. Вместо Сцинтиллы. (Прошлое сообщение пропало)

PUser комментирует...

Да, на ECon основан SynWrite (который упомянули).

Николай Зверев комментирует...

Кстати, свою подсветку синтаксиса мне удалось сделать:
Своя подсветка синтаксиса в IDE Delphi. Пример

Отправить комментарий

.

.