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 корректно выводит текст
![](/_fr/6/3674440.png)
Если выделена табуляция
![](/_fr/6/0800804.png)
то при прокрутке и обновлении получается это
![](/_fr/6/s4448077.jpg)
Где тут что может быть? Что-то с массивом?
Добавлено (08.01.2024, 23:35) --------------------------------------------- Как тут отредактировать, а то с картинками беда.
|
|
| |
haav | Дата: Вторник, 09.01.2024, 07:59 | Сообщение # 2 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1376
Статус: Offline
| Фотки подредактировал. Работоспособный пример думаю облегчил бы людям возможность помочь вам.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
diakin | Дата: Вторник, 09.01.2024, 12:59 | Сообщение # 3 |
Рядовой
Группа: Пользователи
Сообщений: 11
Статус: Offline
| Цитата haav ( ![Ссылка на цитируемый текст](/.s/img/fr/ic/10/lastpost.gif) ) Работоспособный пример думаю облегчил бы людям возможность помочь вам Спасибо, попробую сделать.
|
|
| |
ntvgjhfnj | Дата: Вторник, 16.01.2024, 11:20 | Сообщение # 4 |
Лейтенант
Группа: Проверенные
Сообщений: 61
Статус: Offline
| такое впечатление что текст такого же цвета что и фон, или вообще текст потерялся, а строка красится полностью.
polopok
Сообщение отредактировал ntvgjhfnj - Вторник, 16.01.2024, 11:22 |
|
| |