purebasic.info

PureBasic forum
Текущее время: Пн апр 22, 2019 7:23 am

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Плагин для IDE PureBasic
СообщениеДобавлено: Чт апр 04, 2019 9:18 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 452
Благодарил (а): 33 раз.
Поблагодарили: 48 раз.
Пункты репутации: 0
Был занят, но с обеда не покидала мысль сделать плаг для IDE PureBasic. Дескриптор окна и Scintilla можно получить, а значит выслать в Scintilla любую команду. С уведомлениями проблема, пока даже не представляю как их ловить, а вот команды, например извлечь выделенный текст или весь, обработать и вставить, или собственное окно поиска и замены. Я уже делал внешний плаг для Notepad++ в виде окна поверх всех окон состоящее из меню, узкая панель где выбираешь пункты, не мешает и в тоже время дополняет функционалом.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин для IDE PureBasic
СообщениеДобавлено: Чт апр 04, 2019 10:02 pm 
Не в сети
профессор

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 297
Благодарил (а): 14 раз.
Поблагодарили: 33 раз.
Пункты репутации: 2
AZJIO писал(а):
С уведомлениями проблема
А так?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
Global *long = 0
 
Procedure WindowProc(hWnd.l, uMsg.l, wParam.l, lParam.l)
  If uMsg = #WM_MOUSEMOVE
    Beep_(100, 100)
  EndIf
  ProcedureReturn CallWindowProc_(*long, hWnd, uMsg, wParam, lParam)
EndProcedure
 
ProcedureDLL AttachProcess(Instance)
  hWnd.l = FindWindow_(0, @"Test")
  *long = SetWindowLong_(hWnd, #GWL_WNDPROC, @WindowProc())
EndProcedure



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин для IDE PureBasic
СообщениеДобавлено: Пт апр 12, 2019 8:32 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 452
Благодарил (а): 33 раз.
Поблагодарили: 48 раз.
Пункты репутации: 0
Есть идеи как получить дескриптор Scintilla? Если открыто несколько документов, встанет вопрос, а какой экземпляр он найдёт?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
If OpenWindow(0, 0, 0, 220, 100, "Пример...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
        ButtonGadget (1, 10, 60, 200, 30, "Дескриптор и Закрыть")
       
        Repeat
                Select WaitWindowEvent()
                        Case #PB_Event_Gadget
                                Select EventGadget()
                                        Case 1
;                                               hWnd.l = FindWindow_("WindowClass_2", @"PureBasic 5.62 (x86)")
                                                hWnd.l = FindWindow_("WindowClass_2", 0)
;                                               MessageRequester("Сообщение", Str(hWnd))
;                                               hSci = FindWindowEx_(0, "WindowClass_2", "Scintilla", 0) ; найти Scintilla
;                                               hSci = GetDlgItem_(hWnd, 1)
                                                hSci = FindWindowEx_(hWnd, 0, "Scintilla", 0) ; найти Scintilla
                                                MessageRequester("Дескриптор", Str(hSci))
                                                CloseWindow(0)
                                                End
                                EndSelect
                        Case #PB_Event_CloseWindow
                                CloseWindow(0)
                                End
                EndSelect
        ForEver
EndIf



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин для IDE PureBasic
СообщениеДобавлено: Пт апр 12, 2019 12:17 pm 
Не в сети
профессор

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 297
Благодарил (а): 14 раз.
Поблагодарили: 33 раз.
Пункты репутации: 2
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
If OpenWindow(0, 0, 0, 220, 100, "Пример...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ButtonGadget (1, 10, 60, 200, 30, "Дескриптор и Закрыть")
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 1
            hWnd.l = FindWindow_(@"WindowClass_2", 0)
            hWnd = FindWindowEx_(hWnd, 0, @"PureSplitter", 0)
            hWnd = FindWindowEx_(hWnd, 0, @"PureContainer", 0)
            hWnd = FindWindowEx_(hWnd, 0, @"Scintilla", 0)
            MessageRequester("Дескриптор", Str(hWnd))
            CloseWindow(0)
            End
        EndSelect
      Case #PB_Event_CloseWindow
        CloseWindow(0)
        End
    EndSelect
  ForEver
EndIf



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин для IDE PureBasic
СообщениеДобавлено: Пт апр 12, 2019 3:32 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 452
Благодарил (а): 33 раз.
Поблагодарили: 48 раз.
Пункты репутации: 0
Вот так уже получил, но надо без удержания окна активным.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Global NewList SciList.l(), hwnd.l
 
Procedure WNDENUMPROC (hCtrl.l, LPARAM)
        Protected wClass.s
        wClass = Space(255)
        GetClassName_(hCtrl, wClass, 255)
        If wClass = "Scintilla"
                AddElement(SciList())
                SciList() = GetDlgCtrlID_(hCtrl)
        EndIf
        ProcedureReturn #True
EndProcedure
 
MessageRequester("Сграбливаем активное", "После ОК, 3 секунды на то чтобы выбрать окно")
Delay(3000)
hwnd = GetForegroundWindow_() ; дескриптор активного окна
EnumChildWindows_(hwnd, @WNDENUMPROC(), 0) ; перечисляем элементы активного окна
FirstElement(SciList()) ; Первый элемент всегда активный экземпляр Scintilla
MessageRequester("Дескриптор активного окна Scintilla", Str(SciList()))



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин для IDE PureBasic
СообщениеДобавлено: Пт апр 12, 2019 3:37 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11432
Благодарил (а): 4 раз.
Поблагодарили: 459 раз.
https://www.purebasic.com/documentation ... tools.html
Цитата:
PB_TOOL_MainWindow - OS handle to the main IDE window
PB_TOOL_Scintilla - OS handle to the Scintilla editing component of the current source

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин для IDE PureBasic
СообщениеДобавлено: Пт апр 12, 2019 4:09 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 452
Благодарил (а): 33 раз.
Поблагодарили: 48 раз.
Пункты репутации: 0
Скомпилировал, работает.
Код:
1
2
3
4
5
6
7
8
9
Global result$
result$ + "PB_TOOL_Scintilla = " + GetEnvironmentVariable("PB_TOOL_Scintilla") + #CRLF$
result$ + "PB_TOOL_MainWindow = " + GetEnvironmentVariable("PB_TOOL_MainWindow") + #CRLF$
result$ + "PB_TOOL_Word = " + GetEnvironmentVariable("PB_TOOL_Word") + #CRLF$
result$ + "PB_TOOL_Unicode = " + GetEnvironmentVariable("PB_TOOL_Unicode") + #CRLF$
result$ + "PB_TOOL_Language = " + GetEnvironmentVariable("PB_TOOL_Language") + #CRLF$
result$ + "PB_TOOL_Project = " + GetEnvironmentVariable("PB_TOOL_Project") + #CRLF$
result$ + "PB_TOOL_IDE = " + GetEnvironmentVariable("PB_TOOL_IDE")
MessageRequester("Сообщение", result$)



Вот так вот просто!
Код:
1
2
3
4
5
6
7
8
9
Global sci_ptr.i
Declare MyFunc()
 
Procedure MyFunc()
        sci_ptr = Val(GetEnvironmentVariable("PB_TOOL_Scintilla"))
        SendMessage_(sci_ptr, #SCI_GOTOLINE, 1, 0)
EndProcedure
 
MyFunc()



Вставка даты
Код:
1
2
3
Global sci_ptr.i
sci_ptr = Val(GetEnvironmentVariable("PB_TOOL_Scintilla"))
SendMessage_(sci_ptr, #EM_REPLACESEL, 0, UTF8(FormatDate("%yyyy.%mm.%dd %hh:%ii:%ss", Date())))


Похоже версия Scintilla старая (используется #EM_), даже по размеру 370кб, а в NPP 1Мб. В справке, что я выкладывал на русском их можно найти в "Устаревшие сообщения и уведомления".


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

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


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

Сейчас этот форум просматривают: Bing [Bot] и гости: 11


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

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