Seite 1 von 1

EditorGadget Callback - Abfangen von Cut & Paste für UNDO

Verfasst: 04.02.2014 15:56
von Thorsten1867
Ich möchte eine mehrstufige Undo/Redo-Funktion für EditorGadgets erstellen.
Hierzu müsste ich z.B. Eingaben und v.a. Paste & Cut - Aktionen abfangen, um den Text vorher für die Undo-Funktion speichern zu können.
Leider bin ich mit der Suche nach einem Callback für das EditorGadget nicht wirklich fündig geworden.

Wer kennt sich ein bisschen besser mit der WinAPI aus und kann mir einen Tipp geben.

Re: EditorGadget Callback - Abfangen von Cut & Paste für UND

Verfasst: 04.02.2014 16:15
von Kiffi
Thorsten1867 hat geschrieben:Wer kennt sich ein bisschen besser mit der WinAPI aus und kann mir einen Tipp geben.
WinAPI = RSBasic = http://www.rsbasic.de/winapi-library/

Grüße ... Kiffi

Re: EditorGadget Callback - Abfangen von Cut & Paste für UND

Verfasst: 04.02.2014 16:16
von Thorsten1867
Da habe ich natürlich schon geschaut, aber möglicherweise an der falschen Stelle?!?

Re: EditorGadget Callback - Abfangen von Cut & Paste für UND

Verfasst: 04.02.2014 16:39
von Kiffi
Thorsten1867 hat geschrieben:Da habe ich natürlich schon geschaut, aber möglicherweise an der falschen Stelle?!?
ich habe hier geguckt: http://www.rsbasic.de/aktualisierung/wi ... 0machen.pb

Grüße ... Kiffi

Re: EditorGadget Callback - Abfangen von Cut & Paste für UND

Verfasst: 04.02.2014 16:42
von Thorsten1867
Ich brauche es genau umgekehrt.
Ich muss wissen, wann etwas in das EditorGadget eingefügt bzw. ausgeschnitten wurde .

Re: EditorGadget Callback - Abfangen von Cut & Paste für UND

Verfasst: 04.02.2014 16:54
von Kiffi
Thorsten1867 hat geschrieben:Ich muss wissen, wann etwas in das EditorGadget eingefügt bzw. ausgeschnitten wurde .
Warum? Das EditorGadget kümmert sich doch selber um das UnDo / ReDo.

Grüße ... Kiffi

Re: EditorGadget Callback - Abfangen von Cut & Paste für UND

Verfasst: 04.02.2014 16:56
von ts-soft
Eigentlich brauchste nicht viel machen, jedenfalls unter Windows, BeginUndo-, CanUndo-, Undo-, Redo- usw. werden
unterstützt vom RichEdit (EditorGadget), siehe: http://www.realsource.de/downloads/doc_ ... edit-class

Einfach nutzen und Callback ist unnötig, so gut wie die eingebaute Funktion wirste es wohl kaum nachbauen können :wink:

Gruß
Thomas

Re: EditorGadget Callback - Abfangen von Cut & Paste für UND

Verfasst: 04.02.2014 16:58
von Thorsten1867
Kiffi hat geschrieben:Warum? Das EditorGadget kümmert sich doch selber um das UnDo / ReDo.
Funktioniert leider nicht bzw. nicht immer.
Vermutlich weil ich eine eigene Zeilenumbruchroutine (PDF-kompatibel) verwende.

Re: EditorGadget Callback - Abfangen von Cut & Paste für UND

Verfasst: 04.02.2014 18:13
von edel
Versuch es mal so:

Code: Alles auswählen

Global DefProc = 0

Procedure IsEditorGadgetActive()
  Protected Gadget
  Gadget = GetActiveGadget()
  
  If Gadget => 0 And GadgetType(gadget) = #PB_GadgetType_Editor
    ProcedureReturn #True
  EndIf
  
  ProcedureReturn #False
EndProcedure

Procedure OnCut()
  Protected Len.l
  Protected Buf.i
  Protected Gadget.i
  Protected s.i, e.i
  
  If IsEditorGadgetActive()
    Gadget = GetActiveGadget()
        
    SendMessage_(GadgetID(gadget), #EM_GETSEL, @s, @e)    
    
    If e - s > 0
      
      Buf = AllocateMemory(e - s)
    
      SendMessage_(GadgetID(gadget), #EM_GETSELTEXT, 0, Buf)
    
      SetClipboardText(PeekS(buf))
    
      FreeMemory(Buf)
      
    EndIf
  
  EndIf
  
EndProcedure

Procedure OnPaste()
  Protected Gadget.i
  Protected text.s
  
  If IsEditorGadgetActive()
    Gadget = GetActiveGadget()
    text   = GetClipboardText()
    
    SendMessage_(GadgetID(Gadget), #EM_REPLACESEL, #True, Text)
    
  EndIf
  
  
EndProcedure

Procedure Main()
  Protected Window
  Protected Event
  
  Window = OpenWindow(#PB_Any, 
                      #PB_Ignore,
                      #PB_Ignore,
                      640, 480,
                      "Test")
  
  editor = EditorGadget(#PB_Any, 
                        0,0,
                        WindowWidth(Window),
                        WindowHeight(Window))
  
  SetActiveGadget(editor)
  
  AddKeyboardShortcut(Window, #PB_Shortcut_Control|#PB_Shortcut_C, 1)
  AddKeyboardShortcut(Window, #PB_Shortcut_Control|#PB_Shortcut_V, 2)
  
  BindEvent(#PB_Event_Menu, @OnCut(), Window, 1)
  BindEvent(#PB_Event_Menu, @OnPaste(), Window, 2)
  
  Repeat    
    Event = WaitWindowEvent()
        
  Until Event = #PB_Event_CloseWindow
  
  
EndProcedure: End Main()

Schon aergerlich das man selbst fuer die einfachsten Sachen API Gedoens braucht.

Re: EditorGadget Callback - Abfangen von Cut & Paste für UND

Verfasst: 04.02.2014 18:15
von Thorsten1867
Klingt interessant. Werde mal damit "rumspielen". Danke!