diakin | Дата: Понедельник, 08.01.2024, 23:32 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 11
Статус: Offline
| Hi, All! Делаю подсветку синтаксиса в редакторе, застрял на подсветке табуляций. Код #define cly &h00ffff ' желтый цвет #define clO &h0080FF #define clR &H0000FF #define clG &H00FF00
TYPE CHARRANGE ' структура для хранения первой и последней позиции выделенного текста cpMin AS long cpMax AS long END TYPE
' подсвечиваем выделенный текст ! ========================================================== print "=================================="
' получаем выделенный текст SendMessageA (rhWnd,EM_EXGETSEL, byval 0, byval @CHARRANGE1) ' координата в какую выводить VisPoint1.x VisPoint1.y SendMessageA (rhWnd,EM_POSFROMCHAR, byval @VisPoint1,byval CHARRANGE1.cpMin)
' длина выделенного текста lensel=CHARRANGE1.cpMax-CHARRANGE1.cpMin
' массив с табуляциями dim rgxTabs(31) as Long
TabSpace=30 ' пикселей к примеру, не знаю сколько надо. 0.15*1440 For x=0 to 31 rgxTabs(x)=TabSpace*x ' табуляции идут через 30 пикселей - то есть 0 30 60 ну типа 10*3 Next x
Dim prgxTabs As long Ptr ' указатель на массив prgxTabs=@rgxTabs(0)
For iq =0 To 31 'проверяем. что все норм c указателем print *(prgxTabs+iq) Next
if lensel>0 then print"550:lensel=";lensel print"539:CHARRANGE1.cpMin=";CHARRANGE1.cpMin 'первая позиция selection print"544:CHARRANGE1.cpMax=";CHARRANGE1.cpMax 'последняя позиция selection line_SelB= SendMessageA (rhWnd,EM_LINEFROMCHAR,byval CHARRANGE1.cpMin,0 ) ' индекс строки начала selection ! line_SelE= SendMessageA (rhWnd,EM_LINEFROMCHAR,byval CHARRANGE1.cpMax,0 ) ' индекс строки конца selection ! print"539:line_SelB=";line_SelB print"541:line_SelE=";line_SelE if line_SelB=line_SelE then ' single line selection ! ------------------------------ seltxt=string$(lensel,"-") ' создаем буфер для текста zzz=SendMessageA (rhWnd,EM_GETSELTEXT, byval 0, byval Strptr(seltxt)) ' получаем выделенный текст print"575:seltxt=";seltxt SetBkColor(hdc,cly) ' ! цвет фона желтый ' получаем координаты VisPoint1 куда выводить первый символ selection SendMessageA (rhWnd,EM_POSFROMCHAR,byval @VisPoint1,byval CHARRANGE1.cpMin) 'пытаемся вывести текст TabbedTextOut (hdc, VisPoint1.left,VisPoint1.top,seltxt, (CHARRANGE1.cpMax-CHARRANGE1.cpMin),1,@rgxTabs(0),1) 'TabbedTextOut (hdc, VisPoint1.left,VisPoint1.top,seltxt, byval (CHARRANGE1.cpMax-CHARRANGE1.cpMin),0,0,0) 'TabbedTextOut (hdc, VisPoint.left, VisPoint.top, token,-1,0,0,0) end if 'Declare Function TabbedTextOut Lib "user32" Alias "TabbedTextOutA" _ '(hdc As Long, x As Long, y As Long, lpString As String, _ 'nCount As Long, nTabPositions As Long, lpnTabStopPositions As Long, ByVal nTabOrigin As Long) As Long
Если не выделена табуляция, то норм, то есть процедура TabbedTextOut корректно выводит текст
Если выделена табуляция
то при прокрутке и обновлении получается это
Где тут что может быть? Что-то с массивом?
Добавлено (08.01.2024, 23:35) --------------------------------------------- Как тут отредактировать, а то с картинками беда.
|
|
| |
haav | Дата: Вторник, 09.01.2024, 07:59 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| Фотки подредактировал. Работоспособный пример думаю облегчил бы людям возможность помочь вам.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
diakin | Дата: Вторник, 09.01.2024, 12:59 | Сообщение # 3 |
Рядовой
Группа: Пользователи
Сообщений: 11
Статус: Offline
| Цитата haav ( ) Работоспособный пример думаю облегчил бы людям возможность помочь вам Спасибо, попробую сделать.
|
|
| |
ntvgjhfnj | Дата: Вторник, 16.01.2024, 11:20 | Сообщение # 4 |
Лейтенант
Группа: Проверенные
Сообщений: 61
Статус: Offline
| такое впечатление что текст такого же цвета что и фон, или вообще текст потерялся, а строка красится полностью.
polopok
Сообщение отредактировал ntvgjhfnj - Вторник, 16.01.2024, 11:22 |
|
| |