EditorGadget: Kopieren und Einfügen in Zwischenablage Popup

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

EditorGadget: Kopieren und Einfügen in Zwischenablage Popup

Beitrag 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)
Viele Grüße aus dem Sauerland
Eckhard

PureBasic 4.0 Vollversion, WinXP
Make a better world :D
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten