Caret positon for multiline edit control

 


Занимаюсь одним проектом, поэтому понадобилось несколько задач для обычного многострочного текстового окна. Вечером сидел за кодом, получилось простое решение:

If OpenWindow(0,0,0,640,480,"myEditor 0.9",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
  t$="This"+Chr(13)+Chr(10)
  For r=1 To 30 : t$+Str(r)+Chr(13)+Chr(10) : Next
  StringGadget(0,0,0,640,480,t$,#ES_MULTILINE|#ES_AUTOVSCROLL|#WS_VSCROLL|#WS_HSCROLL)
  
;https://docs.microsoft.com/en-us/windows/win32/controls/edit-controls-text-operations#setting-and-retrieving-text
  #EM_GETCARETINDEX=#ECM_FIRST + 18
  Repeat
    ev= WaitWindowEvent()
    
    y=SendMessage_(GadgetID(0),#EM_LINEFROMCHAR,-1,0)
    x=SendMessage_(GadgetID(0),#EM_GETCARETINDEX,0,0)
    o=SendMessage_(GadgetID(0),#EM_LINEINDEX,y,0)
    m=SendMessage_(GadgetID(0),#EM_GETFIRSTVISIBLELINE,0,0)
    
     If y<>m
x=x-o
     EndIf
    
    
    SetWindowTitle(0,"x:"+Str(x)+",y:"+Str(y));+",o:"+Str(o))
  Until ev = #PB_Event_CloseWindow
EndIf


Вот только работает это на Win10, позже вычитал в MSDN. Сегодня чтение манов привело к другому решению на Win 7:

If OpenWindow(0,0,0,640,480,"myEditor 0.9",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
  t$="This"+Chr(13)+Chr(10)
  For r=1 To 30 
    t$+Str(r);+Chr(13)+Chr(10) 
  Next
  StringGadget(0,0,0,640,480,t$,#ES_MULTILINE|#ES_AUTOVSCROLL|#WS_VSCROLL|#WS_HSCROLL)
  
;https://docs.microsoft.com/en-us/windows/win32/controls/edit-controls-text-operations#setting-and-retrieving-text
  Repeat
    ev= WaitWindowEvent()
    
    y=SendMessage_(GadgetID(0),#EM_LINEFROMCHAR,-1,0)
    x=SendMessage_(GadgetID(0),#EM_GETSEL,0,0)
    o=SendMessage_(GadgetID(0),#EM_LINEINDEX,y,0)
    m=SendMessage_(GadgetID(0),#EM_GETFIRSTVISIBLELINE,0,0)
    
     If y<>m
;x=x-o
     EndIf
    
    
    SetWindowTitle(0,"x:"+Str(x&$FFFF - o)+",y:"+Str(y));+",o:"+Str(o))
  Until ev = #PB_Event_CloseWindow
EndIf


Но это все фигня по сравнению с мировой революцией. Выйдет ли что-то внятное из задумки, я не знаю.

Комментарии