Code
Procedure IsMouseOver(wnd) ; Определяем находится ли курсор мышки в пределах данного окна (гаджета)
GetWindowRect_(wnd,re.RECT)
GetCursorPos_(pt.POINT)
ProcedureReturn PtInRect_(@re, pt\x|(pt\y<<32))
EndProcedure
If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 8, 8, 306, 133)
If CreatePopupMenu(1)
MenuItem(1,"Отменить")
MenuItem(2,"Повторить")
MenuBar()
MenuItem(3,"Вырезать")
MenuItem(4,"Копировать")
MenuItem(5,"Вставить")
MenuBar()
MenuItem(6,"Выделить всё")
EndIf
Repeat
Event=WaitWindowEvent()
If Event=#WM_RBUTTONUP
If IsMouseOver(GadgetID(0))
DisplayPopupMenu(1,WindowID(0))
EndIf
EndIf
If Event=#PB_Event_Menu
Menu=EventMenu()
Select Menu
Case 1
SendMessage_(GadgetID(0), #EM_UNDO, #Null, #Null)
Case 2
SendMessage_(GadgetID(0), #EM_REDO, #Null, #Null)
Case 3, 4
SendMessage_(GadgetID(0), #EM_GETSEL, @Min,@Max)
If Min<>Max ;
If Min<Max ;
xx=Max-Min ;
Else ;
xx=Min-Max ;
EndIf ;
lpText.s=Space(xx)
SendMessage_(GadgetID(0), #EM_GETSELTEXT, #Null, @lpText)
SetClipboardText(lpText)
If Menu=3
SendMessage_(GadgetID(0),#EM_REPLACESEL,0,@"")
EndIf
EndIf
Case 5
Text.s=GetClipboardText()
SendMessage_(GadgetID(0),#EM_REPLACESEL,0,@Text)
Case 6
SendMessage_(GadgetID(0),#EM_SETSEL,0,-1)
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
EndIf