purebasic.info

PureBasic forum
Текущее время: Вс сен 24, 2017 3:05 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 71 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 26, 2009 11:17 pm 
Не в сети
ассистент

Зарегистрирован: Ср окт 28, 2009 9:51 am
Сообщений: 17
Откуда: Харьков
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Искомую программу сделали за деньги. РВ пока не осилил, но то, что усвоил - мне нравится. Будет время - буду учиться. Огорчает слабая литературная поддержка. Просьба к АСам: появится хорошая книга, дайте "натырку". Ангийский - не помеха. Изучать "методом тыка" нет времени.
Спасибо откликнувшимся. особенноkvitaliy.

_________________
И нет бога, кроме Ассемблера, а MPLAB пророк его!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 26, 2009 11:38 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11014
Благодарил (а): 4 раз.
Поблагодарили: 368 раз.
Виктор писал(а):
нет времени
Но полюбому на всё это нужно время.
Я в своё время тоже делал редактор, правда текствый для PIC контроллеров, вот.
В итоге получилось очень даже неплохо http://purebasic.programist.ru/project/ ... ditor.html

PS.
За деньги мы и сами могли написать, да ещё бы и предоставивли исходник с комментариями. :D

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 27, 2009 11:11 am 
Не в сети
ассистент

Зарегистрирован: Ср окт 28, 2009 9:51 am
Сообщений: 17
Откуда: Харьков
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Для Пётр. Это не вашу программу "KS0108" я пользую? Весьма неплоха и полезна. В одном проекте с ее помощью я сделал три заставки. Так же один раз сделал задержку 100 мкс, с помощью программы того же автора "PIC_Delay". Конечно несложно и самому посчитать, но эти программы у меня лежат на почетном месте, на столе, и я воспользовался.
Насчёт "PS": Существуют объективные трудности в технологии дистанционной работы, общения, оплаты, гарантий. После того, как работа подрядчиком была сделана, мы после общения через дупло интернета, встречались два раза, и после очных встреч в течении двух - трех часов, каждая, наконец расставили все точки над "И".
Далее, без обиды: какой смысл писать "текствый для PIC контроллеров", когда есть бесплатный MPLAB?

_________________
И нет бога, кроме Ассемблера, а MPLAB пророк его!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 27, 2009 12:41 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11014
Благодарил (а): 4 раз.
Поблагодарили: 368 раз.
Виктор писал(а):
Это не вашу программу "KS0108" я пользую?
Да, это моя прога, PIC_Delay тоже :)

Виктор писал(а):
какой смысл писать "текствый для PIC контроллеров", когда есть бесплатный MPLAB
Ну у MPLAB'а текстовый редактор не такой навороченый. Там нет многих функций, облегчающих написание проги на асме.
Например, в MPLAB'е подсветка синтаксиса оставляет желать лучшего!
В проге есть много разных примочек, позволяющих быстрее писать проги или разбиратся в чужом коде.
К примеру, можно посмотреть что объявлено в EQU SET и т. д.

Изображение


Хотя можно получить туже информацию, просто наведя курсор мышки на интерисующую переменную, константу, имя макроса, и т. д. и при этом инфа появится во всплывающем окне

Изображение

Есть также возможность сворачивать произвольные участки текста что может быть удобно в больших исходниках. При этом, при повторном сохранении исходника состояние свёрнутого текста запоминается.

Ну и много чего есть ещё интересного.
Кажется что это мелочи, но они здорово облегчают разработку прог!

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 27, 2009 9:09 pm 
Не в сети
ассистент

Зарегистрирован: Ср окт 28, 2009 9:51 am
Сообщений: 17
Откуда: Харьков
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Для Пётр. И как с этим редактором работать? Обычно работаю так: написал текст программы, затем дебуггер, далее я ассемблирую, программирую кристалл, и все это из среды MPLAB. А тут?

_________________
И нет бога, кроме Ассемблера, а MPLAB пророк его!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 27, 2009 9:22 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11014
Благодарил (а): 4 раз.
Поблагодарили: 368 раз.
Это только редактор, а в качестве отладчика и компилятора я тоже MPLAB использую.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 27, 2009 10:36 pm 
Не в сети
ассистент

Зарегистрирован: Ср окт 28, 2009 9:51 am
Сообщений: 17
Откуда: Харьков
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Так это что, ваш редактор интегрируется в MPLAB, и нажавши на панели инструментов "Build All", происходит компиляция? И, например, MPLAB SIM "гоняет значки" по вашему редактору?

_________________
И нет бога, кроме Ассемблера, а MPLAB пророк его!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 28, 2009 12:09 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11014
Благодарил (а): 4 раз.
Поблагодарили: 368 раз.
Нет, это автономный редактор и он не интегрируется с MPLAB'ом.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 28, 2009 5:52 pm 
Не в сети
студент

Зарегистрирован: Сб ноя 28, 2009 4:54 pm
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Уважаемый, Пётр!
Я тоже занимаюсь програмированием PIC (на PICBasicProton (picbasic.ru) и имею проблемы с текстовыми редакторами. Нельзя ли, взяв какой либо текст. редактор, дополнить его некоторыми дополнительними способностами. Скажем, пометил слово или их группу, кликнул правой и меняй шрифт или раскрашивай. Ну и вершиной, для меня, было бы еслиб редактор мог отличать такие операторы как ' if...endif', 'while...wend'... и их обрамлять (появилась бы хоть какая то сразу заметная стуктура написанногото). С 'pureBasic' я совсем не знаком.
Спасибо.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 28, 2009 6:03 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11014
Благодарил (а): 4 раз.
Поблагодарили: 368 раз.
А что в редакторе протона нет подсветки синтаксиса?

Или имелось в виду именно выделение групп операторов типа как на эток скрине?

Изображение

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 28, 2009 6:37 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11014
Благодарил (а): 4 раз.
Поблагодарили: 368 раз.
Написать свой текстовый редактор с возможностью подсветки синтаксиса не очень сложно (относительно).
Вот пример

Код:
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
 x=10 : y=10
Global Dim Key.s(10) ; Ключевые слова
Key(0)="For"
Key(1)="Next"
Key(2)="Step"
Key(3)="If"
Key(4)="EndIf"
Key(5)="Repeat"
Key(6)="Until"
Key(7)="Else"
Key(8)="Select"
Key(9)="Case"
Key(10)="EndSelect"
 
KeyLen=10 ; Количеств ключевых слов в массиве "Key"
 
; Эти константы будут использоваться для подсветки синтаксиса.
Enumeration 0
   #LexerState_Space ; Пробелы и другие разделители
   #LexerState_Comment ; Комментарии
   #LexerState_Keyword ; Обычный текст
   #LexerState_FoldKeyword ; Ключевые слова
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)
     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)
 
 Shared KeyLen
 
 ; Переписываем данные из структуры в переменные
 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_STYLENEEDED
         ; Syntax highlighter  
         EndPos=pos
         EndStyledPos = ScintillaSendMessage(0,#SCI_GETENDSTYLED) ; Узнаём до какой позиции следует подсвечивать синтаксис в редакторе.
         linenumber = ScintillaSendMessage(0,#SCI_LINEFROMPOSITION,EndStyledPos) ; Узнаём номер строки, до которой следует подсвечивать синтаксис.
         CurrentPos.l = ScintillaSendMessage(0,#SCI_POSITIONFROMLINE,linenumber) ; Узнаём позицию первого символа в строке, заданной в "linenumber".
         ScintillaSendMessage(0,#SCI_STARTSTYLING,CurrentPos, $1F | #INDICS_MASK) ; Подготовка к стилистической правке (подсветке синтаксиса).
         State = #LexerState_Space
         KeywordStartPos = CurrentPos
         keyword.s = ""
         
         While CurrentPos <= EndPos
            OldState = State
           
            Char.l = ScintillaSendMessage(0,#SCI_GETCHARAT, CurrentPos) ; Получаем символ из текущей позиции курсора.
            If Char = ';' ; Находим коментарии
               State = #LexerState_Comment ; Отмечаем текущий текст как комментарий
            ElseIf Char = 10 Or Char = 13 ; Отмечаем символы "возврата каретки" и "перевода строки" как пробелы.
               State = #LexerState_Space
            ElseIf State <> #LexerState_Comment ; Если текущий текст не комментарий, отмечаем символы "Tab" "Пробел" и "Точка" как пробелы.
               If Char = 9 Or Char = ' ' Or Char = '.'
                  State = #LexerState_Space
               Else
                  State = #LexerState_Keyword  ; Если совпадения нет, тогда отмечаем как обычный текст
                  keyword + Chr(Char) ; В переменной "keyword" сохраняется текст для поиска ключевых слов
               EndIf
            EndIf
           
            If OldState <> State Or CurrentPos = EndPos
               If OldState = #LexerState_Keyword
                 lkeyword.s = LCase(keyword)
                  For i=0 To KeyLen ; Сравниваем слова из массива с текущими
                    If lkeyword = LCase(Key(i))
                     OldState = #LexerState_FoldKeyword ; Если есть совпадение, значит было найдено ключевое слово.
                    EndIf
                  Next
                 
                 keyword = ""
               EndIf
               ScintillaSendMessage(0,#SCI_SETSTYLING, CurrentPos - KeywordStartPos, OldState) ; Собственно, подсветка синтаксиса.
               KeywordStartPos = CurrentPos
            EndIf
            CurrentPos + 1
       Wend
   EndSelect
 
 EndProcedure
 
 
   If OpenWindow(0, 20, 20, 700, 500, "Редактор Scintilla", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_Invisible|#PB_Window_SizeGadget)
    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
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("Открыть файл", "", "*.pb, *.pbi|*.pb;*.pbi|All Files|*.*", 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("Сохранение файла", "", "*.pb, *.pbi|*.pb;*.pbi|All Files|*.*", 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: ; Настройка текстового редактора Scintilla.dll
ScintillaSendMessage(0, #SCI_STYLESETBACK, #STYLE_DEFAULT,  RGB(250, 250, 250)) ; Цвет фона
   ; Шрифт
   ScintillaSendMessage(0, #SCI_STYLESETFONT,#STYLE_DEFAULT, @"Courier")  ; Имя шрифта
   ScintillaSendMessage(0, #SCI_STYLESETSIZE,#STYLE_DEFAULT,10 ) ; Размер шрифта
   ScintillaSendMessage(0, #SCI_STYLECLEARALL)  ; Устанавливаем стиль по умолчанию
   
   ScintillaSendMessage(0, #SCI_SETVIEWWS,1) ; Отображение точек на месте пробелов
   ScintillaSendMessage(0, #SCI_SETWHITESPACEFORE,1,0 ) ; Цвет этих точек
 
   ; Цвет выделения
   ScintillaSendMessage(0, #SCI_SETSELFORE,1,RGB(255, 255, 255) ) ; Шрифт
   ScintillaSendMessage(0, #SCI_SETSELBACK,1,RGB(9, 9, 185)) ; Выделенная область
   
   ; Активная строка
   ScintillaSendMessage(0, #SCI_SETCARETLINEBACK,RGB(218, 255, 231) ) ; Цвет активной строки
   ScintillaSendMessage(0, #SCI_SETCARETLINEVISIBLE,#True) ; Разрешаем отмечать активную строку
 
   ScintillaSendMessage(0, #SCI_SETMARGINWIDTHN, 1, 0) ; Запрещаем отображать 1-вое поле маркеров
   ScintillaSendMessage(0, #SCI_SETMARGINSENSITIVEN, 1, 0)
   ScintillaSendMessage(0, #SCI_SETMARGINWIDTHN, 2, 0) ; Запрещаем отображать 2-вое поле маркеров
   ScintillaSendMessage(0, #SCI_SETMARGINSENSITIVEN, 2, 0)
   
   ; Автонумирация
   ScintillaSendMessage(0, #SCI_SETMARGINTYPEN, 0, #SC_MARGIN_NUMBER) ; Добавляем 0-вое поле для автонумерации строк
   ScintillaSendMessage(0, #SCI_SETMARGINWIDTHN, 0, 40) ; Ширина поля автонумерации
   ScintillaSendMessage(0, #SCI_STYLESETFORE,#STYLE_LINENUMBER,0) ; Цвет цифр автонумерации
   ScintillaSendMessage(0, #SCI_STYLESETBACK,#STYLE_LINENUMBER,RGB(218, 218, 218)) ; Цвет фона области автонумерации
 
 
  ; Курсор
  ScintillaSendMessage(0, #SCI_SETCARETFORE,RGB(2, 4, 231) ) ; Цвет курсора
  ScintillaSendMessage(0, #SCI_SETCARETPERIOD,500) ; Частота мерцания курсора
  ScintillaSendMessage(0, #SCI_SETCARETWIDTH,1) ; Ширина курсора в пикселях. Возможные значения 0-3
 
  ; Подсветка синтаксиса  
  ScintillaSendMessage(0, #SCI_STYLESETFORE,#LexerState_Comment, RGB(0, 0, 255)) ; Цвет комментариев
   ScintillaSendMessage(0, #SCI_STYLESETITALIC,#LexerState_Comment, 1) ; Выделять комментарии наклонным шрифтом
   ScintillaSendMessage(0, #SCI_STYLESETFORE,#LexerState_Keyword, 0)  ; Цвет обычного текста
   ScintillaSendMessage(0, #SCI_STYLESETFORE,#LexerState_FoldKeyword, RGB(187, 2, 60)) ; Цвет ключевых слов.
   ScintillaSendMessage(0, #SCI_STYLESETBOLD,#LexerState_FoldKeyword, 1) ; Выделять ключевые слова жирным шрифтом
Return



Вложения:
Scintilla_Lexer_1.rar [104.11 KiB]
Скачиваний: 167

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 29, 2009 1:12 pm 
Не в сети
студент

Зарегистрирован: Сб ноя 28, 2009 4:54 pm
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Уважаемый, Пётр!
Благодарен за столь бистрый ответ.
Подсветка синтаксиса в Протоне есть но этого очень мало. Хочется ЕГО усовершенствовать а не писать другой редактор. Есть такой редактор как 'Angel Writer' с полным набором раскраски, но у него другие недостатки.
Я приложил пример желаемого в Ворде. Рамки, обрамляющие отдельные процедуры, хотелось бы чтоб чертил сам редактор, ну да если это сделать не так просто, можно и обойтись - главное иметь возможность оперативно изменять цвет и формат желаемого.
PS Не могу подцепить, надо архивировать а не помню как - попробую поискать.


Вложения:
PureBasikui1.rar [3.73 KiB]
Скачиваний: 190


Последний раз редактировалось retas Вс ноя 29, 2009 1:56 pm, всего редактировалось 2 раз(а).
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 29, 2009 2:17 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11014
Благодарил (а): 4 раз.
Поблагодарили: 368 раз.
Для этого исходник должен иметь разметку, т. е. быть формате doc, rtf или html.
А сам редактор не должен подсвечивать синтаксис, а просто раскрашивать слова в зависимости от форматирования текста.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 29, 2009 4:32 pm 
Не в сети
студент

Зарегистрирован: Сб ноя 28, 2009 4:54 pm
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Ну, обидно конечно, вроде 21-ый век во дворе.
А если задачу упростить, отняв права у оригинала что либо самому делать с коментариями, т.е. всё что идёт за знаком " ' " стало бы подвластно пишущему.
И ещё, что значит "Для этого исходник должен иметь разметку"? Если реч о нумерации строк, так Протон это делает.
Спасибо.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 29, 2009 4:38 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11014
Благодарил (а): 4 раз.
Поблагодарили: 368 раз.
retas писал(а):
А если задачу упростить, отняв права у оригинала что либо самому делать с коментариями, т.е. всё что идёт за знаком " ' " стало бы подвластно пишущему.
Ну полюбому придётся писать свой рдактор, т. к. переделать существующий редактор протона, довольно сложно.
Проще новый сделать.


retas писал(а):
И ещё, что значит "Для этого исходник должен иметь разметку"?
Ну это дополнительная информация о шрифтах, цвете, как напрмер, в форматах html или rtf.
А иначе как редактор будет знать какой участок текста должен иметь требуемый цвет?

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


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 71 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

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


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

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


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

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