FreeBasic
Главная
Вход
Регистрация
Пятница, 03.05.2024, 14:06Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Вопросы по языку FreeBasic » TabbedTextOut
TabbedTextOut
diakinДата: Понедельник, 08.01.2024, 23:32 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 11
Репутация: 0
Статус: 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)
---------------------------------------------
Как тут отредактировать, а то с картинками беда.
Прикрепления: 3674440.png (5.2 Kb) · 0800804.png (4.9 Kb) · 4448077.png (6.3 Kb)
 
haavДата: Вторник, 09.01.2024, 07:59 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Фотки подредактировал.
Работоспособный пример думаю облегчил бы людям возможность помочь вам.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
diakinДата: Вторник, 09.01.2024, 12:59 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 11
Репутация: 0
Статус: Offline
Цитата haav ()
Работоспособный пример думаю облегчил бы людям возможность помочь вам
Спасибо, попробую сделать.
 
ntvgjhfnjДата: Вторник, 16.01.2024, 11:20 | Сообщение # 4
Лейтенант
Группа: Проверенные
Сообщений: 59
Репутация: 1
Статус: Offline
такое впечатление что текст такого же цвета что и фон, или вообще текст потерялся, а строка красится полностью.

polopok

Сообщение отредактировал ntvgjhfnj - Вторник, 16.01.2024, 11:22
 
Форум » Freebasic » Вопросы по языку FreeBasic » TabbedTextOut
  • Страница 1 из 1
  • 1
Поиск: