Как я могу обнаружить изменения в тексте и выделении из моего плагина Notepad ++? - PullRequest
2 голосов
/ 10 сентября 2011

Разработка плагина Notepad ++ с использованием Delphi (с использованием DelphiPluginTemplate NPP в качестве основы), как создать обработчики событий, такие как onSelectionChanged, onChange и т. Д .?

Я представляю, как создать такую ​​функцию, а затем как-то зарегистрировать ее в Notepad ++:

procedure onTextChanged(...); stdcall;
begin
  ShowMessage('Text was changed');
end;
...
initialization
RegisterMyNotepadPlusPlusOnChangeEvent(onTextChanged);

Ответы [ 2 ]

2 голосов
/ 29 мая 2012

используйте beNotific. достаточно получить информацию об изменениях. если вы используете заголовки Delphi по умолчанию - вы должны изменить BeNotified в TnppPlugin с обычного метода на виртуальный. и переопределите его в своем классе.

procedure TIHelpPlugin.BeNotified(sn: PSCNotification);
begin
  inherited;
  if NppData.NppHandle <> HWND(sn.nmhdr.hwndFrom) then begin
    case sn.nmhdr.code of
      SCN_UPDATEUI,SCN_MODIFIED,SCN_CHARADDED: begin
        onTextChanged(...);
      end;
    end;
  end;
end;
2 голосов
/ 12 сентября 2011

Notepad ++, по-видимому, не предоставляет эту информацию плагинам, но он действительно предоставляет базовый элемент управления Scintilla для редактирования , который предоставляет многочисленные уведомления в окно своего контейнера с помощью сообщений wm_Notify.

Когда выбор изменяется, код уведомления равен scn_UpdateUI, а поле updated будет содержать sc_Update_Selection.

При изменении текста код будет scn_Modified, а в поле modificationType будет указано, что было изменено, что определяет, какие другие поля будут содержать полезную информацию.

Эти сообщения отправляются родительскому элементу элемента редактирования, который Notepad ++ не делает.Т обязательно выставить.Он выставляет дескрипторы двум элементам управления Scintilla, и вы можете вызвать GetParent, чтобы найти окно, которое оно уведомляет.Затем вы можете сделать его подклассом , предоставив собственную процедуру замены окна, которая обрабатывает интересующие вас уведомления и затем перенаправляет все в следующую процедуру окна в списке подклассов.

...