Seite 1 von 1
Editor-Gadget Zeile und Spalte
Verfasst: 04.11.2013 11:03
von ProgOldie
Hallo,
ich möchte in einem EditorGadget stets Zeile und Spalte des Cursors bestimmen können. Dazu habe ich unter
http://www.purebasic.fr/english/viewtop ... 13&t=54143 folgende Lösung von RASHAD gefunden:
Code: Alles auswählen
Procedure Caretpos(Gadget)
; von RASHAD
GetCaretPos_(p.POINT)
Row = SendMessage_(GadgetID(0),#EM_LINEFROMCHAR,-1,0)
Column = SendMessage_(GadgetID(0),#EM_CHARFROMPOS,0,@p) - SendMessage_(GadgetID(0),#EM_LINEINDEX,-1,0)
SetWindowTitle(0,"Row : "+Str(Row + 1)+" Column : "+Str(Column))
EndProcedure
Sie funktioniert aber nicht, weil die Struktur(?) p offenbar noch definiert sein muss.Außerdem ist mir der Parameter Gadget rätselhaft. Kann mir bitte jemand da weiterhelfen?
Re: Editor-Gadget Zeile und Spalte
Verfasst: 04.11.2013 11:06
von RSBasic
Re: Editor-Gadget Zeile und Spalte
Verfasst: 05.11.2013 10:43
von ProgOldie
Hm,zunächst 'mal Danke, aber mit Srods Lösung
habe ich das gleiche Problem: Mit EnableExplicit klagt der Compiler natürlich über 'pos' in der Zeile GetCaretPos_(@pos.POINT).
Das gleiche Problem gibt es wegen der fehlenden Deklaration von 'evmask' in
evMask = SendMessage_(GadgetID(0), #EM_GETEVENTMASK, 0, 0)
Dazu bitte noch 'nen Tipp.
Re: Editor-Gadget Zeile und Spalte
Verfasst: 05.11.2013 10:46
von RSBasic
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
Re: Editor-Gadget Zeile und Spalte
Verfasst: 05.11.2013 11:06
von ProgOldie
Hallo, das ging aber schnell.
Das mit dem a war wohl ein Versehen in deiner Lösung, denn a gilt ja nur für die Schleife. Es bleibt trotzdem noch das Problem von 'pos' in
Wie definiere ich das denn?
Re: Editor-Gadget Zeile und Spalte
Verfasst: 05.11.2013 11:08
von RSBasic
Hast du den von mir geposteten Code überhaupt angeschaut?
Ich habe alle Variablen sowie Verweise auf Strukturen definiert.
Auszug:
Re: Editor-Gadget Zeile und Spalte
Verfasst: 05.11.2013 11:14
von ProgOldie
Peinlich!
Ich habe mir das natürlich angeschaut, aber diese Stelle schlicht übersehen.
Sorry.