Du hättest eigentlich nur definieren brauchen. Hier der verbesserte Code für dich:
Code: Alles auswählen
EnableExplicit
Define a
Define evMask
Procedure Callback(hWnd, uMsg, wParam, lParam)
Protected result, *msgf.MSGFILTER, pos.POINT, char, lineindex, colindex, col, row
Result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_NOTIFY
*msgf=lParam
Select *msgf\NMHDR\code
Case #EN_MSGFILTER
Select *msgf\msg
Case #WM_LBUTTONUP, #WM_KEYUP
GetCaretPos_(@pos)
char=SendMessage_(GadgetID(0), #EM_CHARFROMPOS, 0, @pos)
lineindex=SendMessage_(GadgetID(0), #EM_LINEFROMCHAR, char, 0)
colindex=SendMessage_(GadgetID(0), #EM_LINEINDEX, lineindex,0)
col = char-colindex
row = lineindex + 1
Debug "("+Str(col)+", "+Str(row)+")"
EndSelect
EndSelect
EndSelect
ProcedureReturn Result
EndProcedure
If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 8, 8, 306, 133)
For a = 0 To 5
AddGadgetItem(0, a, "Line "+Str(a))
Next
evMask = SendMessage_(GadgetID(0), #EM_GETEVENTMASK, 0, 0)
SendMessage_(GadgetID(0), #EM_SETEVENTMASK, 0, evMask|#ENM_KEYEVENTS|#ENM_MOUSEEVENTS )
SetWindowCallback(@Callback())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf