Seite 1 von 1

EditorGadget: Kopieren und Einfügen in Zwischenablage Popup

Verfasst: 02.09.2006 08:58
von Eckhard.S
Dieser tolle Code von Donald aus
http://www.purebasic.fr/german/viewtopic.php?t=9789
sollte unbedingt unter "Code, Tipps und Tricks stehen.

In einem EditorGadget öffnet sich mit der rechten Maustaste wie bei WordPad und anderen Editoren ein Popup-Fenster mit Kopieren, Einfügen, Ausschneiden usw:

Code: Alles auswählen

; 
; Popup Menu im Editor-Gadget 
; 12/2005 by Donald 
; angepasst an PB4.00 
; 
Enumeration 
  #Window_0 
  #Editor_0 
EndEnumeration 
Global Proc 
Procedure Open_Window() 
  If OpenWindow(#Window_0, 216, 0, 600, 300, "Popup Menu im Editor-Gadget" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar) 
    If CreateGadgetList(WindowID(#Window_0)) 
      EditorGadget(#Editor_0, 10, 10, 580, 280) 
    EndIf 
  EndIf 
EndProcedure 
Procedure EditorProc(hwnd,msg,wParam,lParam) 
  If msg = #WM_CONTEXTMENU 
    DisplayPopupMenu(10,WindowID(#Window_0)) 
  EndIf 
  ProcedureReturn CallWindowProc_(Proc,hwnd,msg,wParam,lParam) 
EndProcedure 

PopupMenu=CreatePopupMenu(10) 
MenuItem(101, "Rückgängig") 
MenuBar() 
MenuItem(102, "Ausschneiden") 
MenuItem(103, "Kopieren") 
MenuItem(104, "Einfügen") 
MenuItem(105, "Löschen") 
MenuBar() 
MenuItem(106, "Alles markieren") 

Open_Window() 
Proc = SetWindowLong_(GadgetID(#Editor_0),#GWL_WNDPROC,@EditorProc())  

Repeat 
  EventID = WaitWindowEvent() 
  Select EventID 
    Case #PB_Event_CloseWindow 
      If EventWindow()=#Window_0 
        quitEditor=1 
      EndIf 
    Case #PB_Event_Menu 
      Select EventMenu() 
        Case 101 
          SendMessage_(GadgetID(#Editor_0),#WM_UNDO,0,0) 
        Case 102 
          SendMessage_(GadgetID(#Editor_0),#WM_CUT,0,0) 
        Case 103 
          SendMessage_(GadgetID(#Editor_0),#WM_COPY,0,0) 
        Case 104 
          SendMessage_(GadgetID(#Editor_0),#WM_PASTE,0,0) 
        Case 105 
          SendMessage_(GadgetID(#Editor_0),#WM_CLEAR,0,0) 
        Case 106 
          lang = Len(GetGadgetText(#Editor_0)) 
          SendMessage_(GadgetID(#Editor_0),#EM_SETSEL,1,-1) 
      EndSelect 
  EndSelect 
Until quitEditor 
CloseWindow(#Window_0)

Verfasst: 02.09.2006 10:56
von AND51
Warum keine &-Zeichen in den Menüeinträgen? Minimalster Aufwand bei maximalem Effekt:
Bei &Einfügen wird im Menü dann zu Einfügen. So braucht man nur das Menü zu öffnen und kann zusätzlich mit tastatur auswählen, welchen Befehl man verwenden möchte.
Ansonsten: Klasse Code! :allright: