Editor-Gadget Zeile und Spalte

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Editor-Gadget Zeile und Spalte

Beitrag 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?
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Editor-Gadget Zeile und Spalte

Beitrag von RSBasic »

Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Editor-Gadget Zeile und Spalte

Beitrag 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.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Editor-Gadget Zeile und Spalte

Beitrag 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 
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Editor-Gadget Zeile und Spalte

Beitrag 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

Code: Alles auswählen

GetCaretPos_(@pos) 

Wie definiere ich das denn?
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Editor-Gadget Zeile und Spalte

Beitrag von RSBasic »

Hast du den von mir geposteten Code überhaupt angeschaut?
Ich habe alle Variablen sowie Verweise auf Strukturen definiert.
Auszug:

Code: Alles auswählen

Protected pos.POINT
;...
GetCaretPos_(@pos)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Editor-Gadget Zeile und Spalte

Beitrag von ProgOldie »

Peinlich!
Ich habe mir das natürlich angeschaut, aber diese Stelle schlicht übersehen.
Sorry.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Antworten