Seite 1 von 1

scintilla popupmenu

Verfasst: 19.12.2010 16:17
von delikanli_19_82
hallo leute,

ich habe jetzt mit scintilla eine editor umgebung zusammengeflickt. besser gesagt habe ich aus einem beispiel im forum genommen und erweitert.

nun möchte ich ein eigenes popupmenu statt das von scintilla selbst anzeigen lassen. wie man den scintilla-eigenen popupmenu unterdrücken kann weiß ich. wie kann man aber ein eigenes popupmenu auf dem einblenden, sobald die rechte maustaste gedrückt wird.

ich hab da an sowas wie das hier gedacht:

Case #PB_Event_Gadget
If EventGadget() = 0 And EventType() = #PB_EventType_RightClick
DisplayPopupMenu(0, WindowID(0))
EndIf

ist das so möglich. Wenn nein, welche Möglichkeiten gibt es?

ich brauche noch eine lösung für folgende themen bei scintilla:

- suchen
- weitersuchen
- suchen und ersetzen
- gehe zu zeile

danke in voraus

Re: scintilla popupmenu

Verfasst: 19.12.2010 19:16
von ts-soft
Das POPUPMENU würde ich einem #WM_CONTEXTMENU in einem Callback zuordnen, aber
Deine Version sollte ja auch funktionieren.

Für das Suchen:

Code: Alles auswählen

Procedure Edit_Search(id, search.s, direction, flags)
  Protected *mem, pos, result
  Protected selstart, selend

  If search
    *mem = AllocateMemory(StringByteLength(search, #PB_UTF8) + 1)
    If *mem
      PokeS(*mem, search, -1, #PB_UTF8)
     
      If direction = 0
        pos = ScintillaSendMessage(id, #SCI_GETSELECTIONSTART) - 1
      Else
        pos = ScintillaSendMessage(id, #SCI_GETSELECTIONEND) + 1
      EndIf
      ScintillaSendMessage(id, #SCI_SETSEL, pos, pos)
      ScintillaSendMessage(id, #SCI_SEARCHANCHOR)
      If direction
        result = ScintillaSendMessage(id, #SCI_SEARCHNEXT, flags, *mem)
      Else
        result = ScintillaSendMessage(id, #SCI_SEARCHPREV, flags, *mem)
      EndIf
      If result <> -1
        selstart = ScintillaSendMessage(id, #SCI_GETSELECTIONSTART)
        selend = ScintillaSendMessage(id, #SCI_GETSELECTIONEND)
        GOSCI_SetState(id, #GOSCI_CURRENTLINE, ScintillaSendMessage(id, #SCI_LINEFROMPOSITION, result))
        ScintillaSendMessage(id, #SCI_SETSELECTIONSTART, selstart)
        ScintillaSendMessage(id, #SCI_SETSELECTIONEND, selend)
        ScintillaSendMessage(id, #SCI_SCROLLCARET)
      EndIf
      FreeMemory(*mem)
    EndIf
    
    ProcedureReturn result
  EndIf

EndProcedure
Die Zeile mit GOSCI_SetState wirste wohl noch selber anpassen müssen. Zur Zeile gehen, die der Position entspricht.

Gruß
Thomas

Re: scintilla popupmenu

Verfasst: 19.12.2010 21:34
von delikanli_19_82
hi ts_soft,

vielen dank für die hilfe.