Тема: Редактор
Показать сообщение отдельно
Старый 23.07.2007, 13:16   #1
Пётр
Нуждающийся
 
Регистрация: 23.05.2007
Сообщений: 95
Написано 34 полезных сообщений
(для 53 пользователей)
Редактор

Как можно быстро подсвечивать синтаксис в текстовом редакторе.Я использовал такой подход:Сначала выделяю слово, а затем изменяю его цвет с помоцью процедур
Procedure EditorGadgetLocate(Gadget,x,y,length)   ; Set cursor position
REG = GadgetID(Gadget)
CharIdx = SendMessage_(REG,#EM_LINEINDEX,y-1,0)
LLength = SendMessage_(REG,#EM_LINELENGTH,CharIdx,0)
If LLength >= x-1
CharIdx + x-1
EndIf
Range.CHARRANGE
Range\cpMin = CharIdx
Range\cpMax = CharIdx+length
SendMessage_(REG,#EM_EXSETSEL,0,Range)
EndProcedure

Procedure EditorGadgetColor(Gadget, Color.l)
format.CHARFORMAT
format\cbSize = SizeOf(CHARFORMAT)
format\dwMask = #CFM_COLOR
format\crTextColor = Color
SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, format)
EndProcedure
Этот способ работает, но есть несколько недостатков.Во первых, скорость подсвечивания низкая.Во вторых, текст начинает дрожать по горизонтали, если длина строки превышает ширину редактора.Может кто знает, как правильно подсвечивать синтаксис, ведь как-то это сделали в редакторе PB.
(Offline)
 
Ответить с цитированием