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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
|
x=10 : y=10
Global Dim KEY.s(4)
KEY(0)="Procedure"
KEY(1)="ProcedureDll"
KEY(2)="EndProcedure"
KEY(3)="End"
Global Dim Numb.a(9) ;- Подсветка цифр
Numb(0)='0'
Numb(1)='1'
Numb(2)='2'
Numb(3)='3'
Numb(4)='4'
Numb(5)='5'
Numb(6)='6'
Numb(7)='7'
Numb(8)='8'
Numb(9)='9'
; Эти константы будут использоваться для подсветки синтаксиса.
Enumeration 0
#LexerState_Space ; Пробелы и другие разделители
#LexerState_Comment ; Комментарии
#LexerState_Keyword ; Обычный текст
#LexerState_FoldKeyword ; Ключевые слова
#LexerState_Calc
#LexerState_Numb
#LexerState_S
EndEnumeration
If InitScintilla("Scintilla.dll")=0 ; Активируем файл Scintilla.dll
MessageRequester("Нет файла", " Файл " + Chr(34) + "Scintilla.dll" + Chr(34) + " не найден!" + Chr(10) + "Дальнейшая работа программы невозможна!", #MB_OK|#MB_ICONERROR)
End
EndIf
Procedure StringGadgetCursorX(Gadget) ; Узнаём положение курсора в строке
POS = ScintillaSendMessage(Gadget,#SCI_GETCURRENTPOS) ; Узнаём текущее положение курсора в документе.
CursorX = ScintillaSendMessage(Gadget,#SCI_GETCOLUMN,POS) ; Узнаём положение курсора в строке
ProcedureReturn CursorX
EndProcedure
Procedure StringGadgetCursorY(Gadget) ; Узнаём номер строки, сейчас находится курсор
POS = ScintillaSendMessage(Gadget,#SCI_GETCURRENTPOS) ; Узнаём текущее положение курсора в документе.
CursorY= ScintillaSendMessage(Gadget,#SCI_LINEFROMPOSITION,POS) ; Узнаём номер строки, сейчас находится курсор
ProcedureReturn CursorY
EndProcedure
Procedure LoadFile(Gadget,FileName.s) ; Читаем текст из файла
TextHnd.l=ReadFile(2,FileName) ; Открываем файл
If TextHnd ; Проверяем, был ли открыт файл
Textlg.l=Lof(2) ; Узнаём размер файла
If Textlg>0
TextFile.s=Space(Textlg) ; Заполняем переменную "TextFile" количеством пробелов, равным размеру файла.
ReadData(2,@TextFile,Textlg) ; Считываем данные из файла
ScintillaSendMessage(Gadget,#SCI_SETTEXT,0,@TextFile) ; Помещаем данные в редактор
CloseFile(2) ; Закрываем файл
TextFile=""
EndIf
Else
MessageRequester("Открытие файла","Не удалось открыть файл!",#MB_OK | #MB_ICONERROR)
EndIf
ProcedureReturn TextHnd
EndProcedure
Procedure Savefile(Gadget,FileName.s) ; Записываем текст из редактора в файл.
TextHnd.l=CreateFile(1,FileName) ; Создаём пустой файл.
If TextHnd ; Проверяем, был ли открыт файл
LenText=ScintillaSendMessage(Gadget,#SCI_GETLENGTH) ; Узнаём количество символов в тексте
TextFile.s=Space(LenText+1) ; Создаём буфер под данные
ScintillaSendMessage(Gadget,#SCI_GETTEXT,LenText+1,@TextFile) ; Считываем текст из редактора в буфер.
WriteString(1,TextFile,#PB_Ascii) ; Записываем данные как одну большую строку.
CloseFile(1) ; Закрываем файл
TextFile=""
Else
MessageRequester("Запись файла","Не удалось сохранить файл!",#MB_OK | #MB_ICONERROR)
EndIf
ProcedureReturn TextHnd
EndProcedure
; В этой процедуре обрабатываются события от редактора
Procedure SCI_Callback(Gadget, *scinotify.SCNotification)
; Переписываем данные из структуры в переменные
code= *scinotify.SCNotification\nmhdr\code
POS= *scinotify.SCNotification\Position
ch= *scinotify.SCNotification\ch
modificationType= *scinotify.SCNotification\modifiers
text= *scinotify.SCNotification\text
Length= *scinotify.SCNotification\length
linesAdded= *scinotify.SCNotification\linesAdded
message= *scinotify.SCNotification\message
wParam= *scinotify.SCNotification\wParam
lParam= *scinotify.SCNotification\lParam
LINE= *scinotify.SCNotification\LINE
foldLevelNow= *scinotify.SCNotification\foldLevelNow
foldLevelPrev= *scinotify.SCNotification\foldLevelPrev
margin= *scinotify.SCNotification\margin
listType= *scinotify.SCNotification\listType
x= *scinotify.SCNotification\x
y= *scinotify.SCNotification\y
Select code
Case #SCN_MARGINCLICK ; Щёлчок по области маркеров
; Update folding
linenumber = ScintillaSendMessage(Gadget,#SCI_LINEFROMPOSITION,POS ) ; Узнаём номер строки
Select margin
Case 2 ; Если был щелчок пополю с идентификатором 2, сворачиваем или разворачиваем текст
ScintillaSendMessage(Gadget,#SCI_TOGGLEFOLD,linenumber)
EndSelect
Case #SCN_STYLENEEDED
; Syntax highlighter
EndPos=POS
EndStyledPos = ScintillaSendMessage(Gadget,#SCI_GETENDSTYLED) ; Узнаём до какой позиции следует подсвечивать синтаксис в редакторе.
linenumber = ScintillaSendMessage(Gadget,#SCI_LINEFROMPOSITION,EndStyledPos) ; Узнаём номер строки, до которой следует подсвечивать синтаксис.
If linenumber = 0
level = #SC_FOLDLEVELBASE
Else
linenumber - 1
level = ScintillaSendMessage(Gadget,#SCI_GETFOLDLEVEL,linenumber) & ~ #SC_FOLDLEVELHEADERFLAG ; Получаем данные, необходимые для свёртки текста
EndIf
thislevel = level
nextlevel = level
CurrentPos.l = ScintillaSendMessage(Gadget,#SCI_POSITIONFROMLINE,linenumber) ; Узнаём позицию первого символа в строке, заданной в "linenumber".
ScintillaSendMessage(Gadget,#SCI_STARTSTYLING,CurrentPos, $1F | #INDICS_MASK) ; Подготовка к стилистической правке (подсветке синтаксиса).
State = #LexerState_Space
KeywordStartPos = CurrentPos
keyword.s = ""
While CurrentPos <= EndPos
OldState = State
CalcState = State
Char.l = ScintillaSendMessage(Gadget,#SCI_GETCHARAT, CurrentPos) ; Получаем символ из текущей позиции курсора.
If Char = ';' ; Находим комментарии
State = #LexerState_Comment ; Отмечаем текущий текст как комментарий
ElseIf Char = 10 Or Char = 13 Or Char = 9 Or Char = ' ' ; Отмечаем символы "возврата каретки" и "перевода строки" как пробелы.
State = #LexerState_Space
ElseIf Char = '$'
State = #LexerState_S
ElseIf State <> #LexerState_Comment And State <> #LexerState_S; Если текущий текст не комментарий, отмечаем символы "Tab" "Пробел" и "Точка" как пробелы.
If Char = '.'
State = #LexerState_Space
Else
State = #LexerState_Keyword ; Если совпадения нет, тогда отмечаем как обычный текст
keyword + Chr(Char) ; В переменной "keyword" сохраняется текст для поиска ключевых слов
EndIf
For n=0 To 9 ; Сравниваем слова из массива с текущими
If Char = Numb(n)
State = #LexerState_Numb ; Если есть совпадение, значит было найдено ключевое слово.
EndIf
Next
EndIf
If OldState <> State Or CurrentPos = EndPos
If OldState = #LexerState_Keyword
lkeyword.s = LCase(keyword)
For i=0 To 4 ; Сравниваем слова из массива с текущими
If lkeyword = LCase(KEY(i))
OldState = #LexerState_FoldKeyword ; Если есть совпадение, значит было найдено ключевое слово.
If lkeyword="procedure" Or lkeyword="if" ; Слова, начинающие свёртку
thislevel | #SC_FOLDLEVELHEADERFLAG
nextlevel + 1
ElseIf lkeyword="endprocedure" Or lkeyword="endif" ; Слова, завершающие свёртку
nextlevel - 1
If nextlevel < #SC_FOLDLEVELBASE
nextlevel = #SC_FOLDLEVELBASE
EndIf
EndIf
EndIf
Next
keyword = ""
EndIf
ScintillaSendMessage(Gadget,#SCI_SETSTYLING, CurrentPos - KeywordStartPos, OldState) ; Собственно, подсветка синтаксиса.
KeywordStartPos = CurrentPos
EndIf
If Char = 10 Or CurrentPos = EndPos
ScintillaSendMessage(Gadget,#SCI_SETFOLDLEVEL, linenumber, thislevel) ; Сворачиваем текст.
thislevel = nextlevel
linenumber + 1
EndIf
CurrentPos + 1
Wend
EndSelect
EndProcedure
If OpenWindow(0, 20, 20, 800, 600, "Editor", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_Invisible|#PB_Window_SizeGadget)
If CreateGadgetList(WindowID(0))
ScintillaGadget(0, 2, 2, 398, 398, @SCI_Callback()) ; Создаём гаджет и процедуре SCI_Callback() присваиваем статус обработчика событий редактора.
SetActiveGadget(0)
SmartWindowRefresh(0 ,1) ; Уменьшаем мерцания окна при изменении его размеров
Gosub ScintillaInit ; Подпрограмма настройки редактора
If CreateMenu(0, WindowID(0))
; Заголовок меню.
MenuTitle("Файл")
; Пункты меню.
MenuItem(1,"Новый"+Chr(9)+"Ctrl+N")
MenuItem(2,"Открыть"+Chr(9)+"Ctrl+O")
MenuItem(3,"Сохранить"+Chr(9)+"Ctrl+S")
MenuItem(4,"Сохранить как")
; Разделитель между пунктами.
MenuBar()
MenuItem(6,"Выход")
MenuTitle("Правка")
MenuItem(7, "Отменить"+Chr(9)+"Ctrl+Z")
MenuItem(8,"Повторить"+Chr(9)+"Ctrl+Y")
MenuBar()
MenuItem(9, "Вырезать"+Chr(9)+"Ctrl+X")
MenuItem(10, "Копировать"+Chr(9)+"Ctrl+C")
MenuItem(11, "Вставить"+Chr(9)+"Ctrl+V")
MenuItem(12, "Удалить")
MenuBar()
MenuItem(13,"Выделить всё"+Chr(9)+"Ctrl+A")
EndIf
; Создаём строку состояния.
If CreateStatusBar(0,WindowID(0))
; Добавляем три раздела.
AddStatusBarField(100)
AddStatusBarField(100)
AddStatusBarField(800)
EndIf
HideWindow(0,0)
Repeat
Event = WaitWindowEvent() ; Узнаём текущее событие в программе.
Gadget=EventGadget() ; Узнаём идентификатор гаджета, в котором произошло событие
Menu=EventMenu() ; Узнаём идентификатор пункта меню, в котором произошло событие
If Event=#PB_Event_SizeWindow
; Изменяем размер редактора при изменении размеров окна
ResizeGadget(0,#PB_Ignore,#PB_Ignore,WindowWidth(0)-4,WindowHeight(0)-44)
EndIf
If ScintillaSendMessage(0, #SCI_CANUNDO) ; Делаем активным либо пассивным пункт меню "Отменить".
DisableMenuItem(0,7,0)
Else
DisableMenuItem(0,7,1)
EndIf
If ScintillaSendMessage(0, #SCI_CANREDO) ; Делаем активным либо пассивным пункт меню "Повторить".
DisableMenuItem(0,8,0)
Else
DisableMenuItem(0,8,1)
EndIf
If ScintillaSendMessage(0, #SCI_CANPASTE) ; Делаем активным либо пассивным пункт меню "Вставить".
DisableMenuItem(0,11,0)
Else
DisableMenuItem(0,11,1)
EndIf
X_Cyrsor=StringGadgetCursorX(0) ; Узнаём положение курсора в строке
Y_Cyrsor=StringGadgetCursorY(0) ; Узнаём номер строки, в котором расположен курсор.
If X_Cyrsor<> x Or Y_Cyrsor<>y
x=X_Cyrsor : y=Y_Cyrsor
StatusBarText(0, 0, " Строка: "+Str(Y_Cyrsor+1))
StatusBarText(0, 1, "Символ: "+Str(X_Cyrsor+1))
EndIf
; Обрабатываем события от меню.
If Event= #PB_Event_Menu
Select Menu
Case 1
; Обработка события от пункта "Новый" меню.
If ScintillaSendMessage(0, #SCI_GETMODIFY) = 0 ; Проверяем, был ли изменён текст
; Текст не изменён
ScintillaSendMessage(0, #SCI_CLEARALL) ; Сообщаем редактору что документ не модифицирован
ScintillaSendMessage(0, #SCI_EMPTYUNDOBUFFER) ; Очищаем буфер отмены
FileX.s="" ; Очищаем переменную, в которой хранится путь к открытому файлу
StatusBarText(0,2,FileX)
Else ; Текст изменён
Gosub Vopros
EndIf
Case 2
; Обработка события от пункта "Открыть" меню.
Gosub Open_file
Case 3
; Обработка события от пункта "Сохранить" меню.
Gosub Save
Case 4
; Обработка события от пункта "Сохранить как" меню.
Gosub Save_As
Case 6
; Обработка события от пункта "Выход" меню.
EXIT=1
Case 7
; Обработка события от пункта "Отменить" меню.
ScintillaSendMessage(0, #SCI_UNDO)
Case 8
; Обработка события от пункта "Повторить" меню.
ScintillaSendMessage(0, #SCI_REDO)
Case 9
; Обработка события от пункта "Вырезать" меню.
ScintillaSendMessage(0, #SCI_CUT)
Case 10
; Обработка события от пункта "Копировать" меню.
ScintillaSendMessage(0, #SCI_COPY)
Case 11
; Обработка события от пункта "Вставить" меню.
ScintillaSendMessage(0, #SCI_PASTE)
Case 12
; Обработка события от пункта "Удалить" меню.
ScintillaSendMessage(0, #SCI_CLEAR)
Case 13
; Обработка события от пункта "Выделить всё" меню.
ScintillaSendMessage(0, #SCI_SELECTALL)
EndSelect
EndIf
If Event=#PB_Event_CloseWindow
EXIT=1
EndIf
Until EXIT=1
EndIf
EndIf
End
Vopros:
Select MessageRequester("Сохранить текст", "Текст был изменён, сохранить его?", #MB_YESNOCANCEL|#MB_ICONQUESTION|#MB_DEFBUTTON3)
Case #IDYES
Gosub Save
;Case #IDNO
Case #IDCANCEL
FakeReturn
Return
EndSelect
FileX.s="" : StatusBarText(0,2,FileX)
ScintillaSendMessage(0, #SCI_CLEARALL) ; Стираем весь текст из редактора
ScintillaSendMessage(0, #SCI_SETSAVEPOINT) ; Сообщаем редактору что документ не модифицирован
ScintillaSendMessage(0, #SCI_EMPTYUNDOBUFFER) ; Очищаем буфер отмены
Return
; Подпрограмма, открывающая файл.
Open_file:
OpenFile.s=OpenFileRequester("Открыть файл", "", "Assambler (*.asm)|*.asm", 0)
If OpenFile<>""
; Вызываем процедуру, открывающую файл
If LoadFile(0,OpenFile)
; Если файл был открыт, тогда записываем в переменную FileX.s
; имя этого файла.
FileX.s=OpenFile
; Выводим путь к открытому файлу в строке состояния.
StatusBarText(0,2,FileX)
EndIf
EndIf
Return
; Подпрограмма, сохраняющая открытый файл.
Save:
; Проверяем есть ли открытый файл.
If FileX.s=""
; Открытого файла нет, поэтому вызываем подпрограмму Save_As.
Gosub Save_As
Else
; Открытый файл есть, поэтому сохраняем файл.
ResultSave=SaveFile(0,FileX.s)
EndIf
Return
; Подпрограмма, сохраняющая файл
Save_As:
SaveFile.s=SaveFileRequester("Сохранение файла", "", "Assambler (*.asm)|*.asm", 0)
; Проверяем, был ли выбран файл.
If SaveFile<>""
; Проверяем есть ли расширение у выбранного файла.
If GetExtensionPart(SaveFile)=""
; Если его нет, тогда добавляем расширение "pb".
SaveFile=SaveFile+".pb"
EndIf
; Сохраняем файл.
ResultSave=SaveFile(0,SaveFile.s)
If ResultSave ; Если файл был сохранён, записываем в переменную FileX имя этого файла.
FileX.s=SaveFile
; Выводим путь к открытому файлу в строке состояния.
StatusBarText(0,2,FileX)
EndIf
EndIf
Return
; Инициализация редактора
ScintillaInit:
ScintillaSendMessage(0, #SCI_STYLESETBACK, #STYLE_DEFAULT, $FFFFFF) ; Цвет фона
; Шрифт
ScintillaSendMessage(0, #SCI_STYLESETFONT,#STYLE_DEFAULT, @"Cambria") ; Имя шрифта
ScintillaSendMessage(0, #SCI_STYLESETSIZE,#STYLE_DEFAULT,11) ; Размер шрифта
ScintillaSendMessage(0, #SCI_STYLECLEARALL) ; Устанавливаем стиль по умолчанию
; Цвет выделения
ScintillaSendMessage(0, #SCI_SETSELFORE,1,RGB(0, 140, 0) ) ; Шрифт
ScintillaSendMessage(0, #SCI_SETSELBACK,1,RGB(216, 216, 216)) ; Выделенная область
; Активная строка
ScintillaSendMessage(0, #SCI_SETCARETLINEBACK,RGB(255, 244, 198) ) ; Цвет активной строки
ScintillaSendMessage(0, #SCI_SETCARETLINEVISIBLE, #True) ; Разрешаем отмечать активную строку
ScintillaSendMessage(0, #SCI_SETMARGINWIDTHN, 1, 0) ; Запрещаем отображать 1-вое поле маркеров
ScintillaSendMessage(0, #SCI_SETMARGINSENSITIVEN, 1, 0)
; Автонумирация
ScintillaSendMessage(0, #SCI_SETMARGINTYPEN, 0, #SC_MARGIN_NUMBER) ; Добавляем 0-вое поле для автонумерации строк
ScintillaSendMessage(0, #SCI_SETMARGINWIDTHN, 0, 50) ; Ширина поля автонумерации
ScintillaSendMessage(0, #SCI_STYLESETFORE,#STYLE_LINENUMBER,0) ; Цвет цифр автонумерации
ScintillaSendMessage(0, #SCI_STYLESETBACK,#STYLE_LINENUMBER,RGB(192, 192, 192)) ; Цвет фона области автонумерации
; Курсор
ScintillaSendMessage(0, #SCI_SETCARETFORE,0) ; Цвет курсора
ScintillaSendMessage(0, #SCI_SETCARETPERIOD,500) ; Частота мерцания курсора
ScintillaSendMessage(0, #SCI_SETCARETWIDTH,1) ; Ширина курсора в пикселях. Возможные значения 0-3
; Подсветка синтаксиса
ScintillaSendMessage(0, #SCI_STYLESETFORE,#LexerState_Comment, RGB(0, 140, 0)) ; Цвет комментариев
ScintillaSendMessage(0, #SCI_STYLESETITALIC,#LexerState_Comment, 0) ; Выделять комментарии наклонным шрифтом (курсивом)
; Подсветка вычислителей
ScintillaSendMessage(0, #SCI_STYLESETFORE,#LexerState_Calc, RGB(200, 25, 175)) ; Цвет ключевых слов.
ScintillaSendMessage(0, #SCI_STYLESETBOLD,#LexerState_Calc, 1) ; Выделять ключевые слова жирным шрифтом
; Подсветка цифр
ScintillaSendMessage(Gadget, #SCI_STYLESETFORE,#LexerState_Numb, RGB(200, 25, 175)) ; Цвет ключевых слов.
ScintillaSendMessage(Gadget, #SCI_STYLESETBOLD,#LexerState_Numb, 0) ; Выделять ключевые слова жирным шрифтом
; Подсветка $
ScintillaSendMessage(0, #SCI_STYLESETFORE,#LexerState_S,$9393FF)
; Ключевые слова
ScintillaSendMessage(0, #SCI_STYLESETFORE,#LexerState_Keyword, 0) ; Цвет обычного текста
ScintillaSendMessage(0, #SCI_STYLESETFORE,#LexerState_FoldKeyword, RGB(0, 25, 175)) ; Цвет ключевых слов.
ScintillaSendMessage(0, #SCI_STYLESETBOLD,#LexerState_FoldKeyword, 1) ; Выделять ключевые слова жирным шрифтом
; Область свёртки
ScintillaSendMessage(Sci_ActiveGadget, #SCI_SETMARGINMASKN, 2, #SC_MASK_FOLDERS)
ScintillaSendMessage(Sci_ActiveGadget, #SCI_SETMARGINWIDTHN, 2, 15) ; Ширина поля свертки и маркеров
ScintillaSendMessage(Sci_ActiveGadget, #SCI_SETMARGINSENSITIVEN, 2, #True) ; Разрешаем отображение 2-го поля, в котором будут отображаться маркеры свёртки.
; Стиль маркеров свёртки.
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERDEFINE, #SC_MARKNUM_FOLDER, #SC_MARK_BOXPLUS)
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEROPEN, #SC_MARK_BOXMINUS)
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERSUB, #SC_MARK_VLINE)
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERTAIL, #SC_MARK_LCORNER)
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEREND, #SC_MARK_BOXPLUSCONNECTED)
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEROPENMID, #SC_MARK_BOXMINUSCONNECTED)
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERMIDTAIL, #SC_MARK_TCORNER)
; Цвета маркеров свёртки
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDER, $FFFFFF) ; Внутряняя область 1 маркера в свёрнутом виде
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDER, 0) ; Цвет в свёрнутом виде 1 маркера
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDEROPEN, $FFFFFF) ; Цвет в развёрнутом виде 1 маркера внутренней области
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDEROPEN, 0) ; Цвет 1 маркера в развёрнутом виде
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDEROPENMID, $FFFFFF) ; Цвет внутренней области 2 маркера в развёрнутом виде
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDEROPENMID, 0) ; Цвет 2 маркера в свёрнутом виде
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDEREND, $FFFFFF) ; Цвет внутренней области в свёрнутом виде 2 маркера
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDEREND, 0) ; Цвет 2 маркера в развёрнутом виде
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDERMIDTAIL, $FFFFFF) ;???
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDERMIDTAIL, 0) ; Цвет линии возле окончания 2 маркера
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDERSUB, $FFFFFF) ;???
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDERSUB, 0) ;???
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDERTAIL, $FFFFFF) ;???
ScintillaSendMessage(Sci_ActiveGadget, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDERTAIL, 0) ; Цвет линии возле окончания 1 маркера
Return |