purebasic.info

PureBasic forum
Текущее время: Вт ноя 20, 2018 6:51 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: Чт июн 28, 2018 4:30 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 237
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Раньше был плаг "ChangeMarker", чисто для пометки изменяемых строк, но он часто падал. Взамен него можно использовать LocationNavigate

Решил попробовать сделать аналог, но пока всё встало на этом
Код:
1
2
3
Select code
        Case SCN_MODIFIED ; реагируем на модификацию
 


Как бы ещё содержание переменной code и константы SCN_MODIFIED отправить в консоль Notepad++, чтобы видеть, что не сходится. Вроде нельзя в уведомлении делать мессагу, хотя для теста ничего не пострадает, но на будущее хотелось бы такую возможность.


Вложения:
LocationNavigate.zip [48 KiB]
Скачиваний: 21
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 28, 2018 9:30 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 441 раз.
Должна быть константа #SCN_MODIFIED, а не нигде не объявленная переменная SCN_MODIFIED, которая будет равна нулю.

Чтобы избежать в дальнейшем подобных ошибок, нужно в начало кода добавить EnableExplicit что потребует обязательной декларации переменных.

Код можно немного сократить если исключить копирование в переменные.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ProcedureCDLL beNotified(*SCNotification.SCNotification)
        ;
        ;<< Когда было получено уведомление scintilla Notepad++ >>
  ; Ваш код здесь
 
  Protected LineStart, LineEnd, res, *sciptr
        ;
  With *SCNotification
   
    ; тест работы, действительно досит скинтилу устанавливая курсор в позицию 5
    ; *sciptr = SendMessage_(NppData\_scintillaMainHandle, #SCI_GETDIRECTPOINTER, 0, 0) ; хендл главного-первого окна scintilla текущей вкладки
    ; ScintillaMsg(*sciptr, #SCI_GOTOPOS, 5) ; перемещает курсор к найденному, чтобы следить за происходящим
   
    Select \nmhdr\code
      Case #SCN_MODIFIED ; реагируем на модификацию
        *sciptr = SendMessage_(NppData\_scintillaMainHandle, #SCI_GETDIRECTPOINTER, 0, 0) ; хендл главного-первого окна scintilla текущей вкладки
        If \modificationType & 1                                                          ; если в типе модификации есть флаг вставки SC_MOD_INSERTTEXT, то
          LineStart = ScintillaMsg(*sciptr, #SCI_LINEFROMPOSITION, \position)             ; Получаем номер строки начала вставки
          LineEnd = ScintillaMsg(*sciptr, #SCI_LINEFROMPOSITION, \position + \Length)     ; Получаем номер строки конец вставки
          res = ScintillaMsg(*sciptr, #SCI_MARKERADD, LineStart, 6)                       ; Добавляет маркер
                                                                                          ; ScintillaMsg(*sciptr, #SCI_GOTOPOS, LineStart) ; перемещает курсор к найденному, чтобы следить за происходящим
          ScintillaMsg(*sciptr, #SCI_ZOOMIN)                                              ; ищу реакцию окна на событие
        EndIf
      Case #SCN_CHARADDED ; реагируем на модификацию
        *sciptr = SendMessage_(NppData\_scintillaMainHandle, #SCI_GETDIRECTPOINTER, 0, 0) ; хендл главного-первого окна scintilla текущей вкладки
        LineStart = ScintillaMsg(*sciptr, #SCI_LINEFROMPOSITION, \position)               ; Получаем номер строки начала вставки
        res = ScintillaMsg(*sciptr, #SCI_MARKERADD, LineStart, 6)                         ; Добавляет маркер
        ScintillaMsg(*sciptr, #SCI_ZOOMIN)                                                ; ищу реакцию окна на событие
    EndSelect
    ; Придумать вывод в консоль
   
  EndWith
EndProcedure


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб июн 30, 2018 8:50 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 237
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Ну по крайней мере начало сделал. Добавляется жёлтый маркер.
Обновил, добавил перекраску маркера в зелёный при сохранении.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс июл 01, 2018 2:51 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 237
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Оптимизировал оптимизировал, да не выоптимизировал.

При работе я не заметил, что первый открытый файл в Notepad++ подсвечивается весь зелёным маркером. Казалось бы почему первый? Известно что уведомление о точке сохранения также происходит при открытии документа, ставя флаг "сохранённый документ", в отличии от грязного документа - несохранённого. Так как это срабатывает только на первом файле, возможно маркеры ещё неопределены. Вставил пропуск первых 1-100 уведомлений, не помогло, и даже отключил срабатывание уведомления сохранения, не помогло.

И ещё если я делаю x+1, то x увеличивается на 1, а как передать эту сумму допустим как индекс массива но "x" отставить прежним. Допустим х=2, мне надо Arr(3) я передаю Arr(x+1), но мне надо чтобы потом "x" остался бы равным 2


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июл 02, 2018 6:11 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 694
Благодарил (а): 75 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
AZJIO писал(а):
Допустим х=2, мне надо Arr(3) я передаю Arr(x+1), но мне надо чтобы потом "x" остался бы равным 2

а оно и останется, не изменится
есть разница между вычислениями и присвоением(правильность терминов под сомнением), в справке сиё описано, только не помню где
Код:
1
2
3
4
 
x+1 - это математика
Arr(x+1) - а это не математика
 



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июл 02, 2018 8:13 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 237
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
newJS писал(а):
Код:
1
2
x+1 - это математика
Arr(x+1) - а это не математика


Сделал тестовый пример, точно, на пустой строке делает инкремент, а когда требуется результат вычислений, не делает инкремент.

__________
в "Change" подправил пометки при удалении нескольких строк.


Вложения:
Change.zip [27.45 KiB]
Скачиваний: 18
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июл 02, 2018 12:58 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 441 раз.
Думаю проще будет написать небольшое приложение с Scintilla и отладить код.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB