Zwischenablage einfügen in EditorGadget wie Windowsfenster
Zwischenablage einfügen in EditorGadget wie Windowsfenster
Klickt man in Windows auf ein WordPad- oder Editor-Fenster mit der rechten Maustaste, so öffnet sich ein Menü mit der Auswahl "Kopieren - Ausschneiden- Einfügen - Löschen usw..."
Gibt es einen netten Codeschnipsel, der dies bei einem EditorGadget simuliert? (Ich benötige nur "Einfügen".)
Gibt es einen netten Codeschnipsel, der dies bei einem EditorGadget simuliert? (Ich benötige nur "Einfügen".)
Viele Grüße aus dem Sauerland
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Diesen Code anpassen und ins Callback fürs Fenster packen, bzw. als Callback setzen
Der Rest, um Menu/Popupmenü zu erstellen findeste in der Hilfe. genauso wie Clipboard!
Code: Alles auswählen
Procedure WindowCallback(WindowId, message, wParam, lParam)
Select message
Case #WM_CONTEXTMENU
If wParam = GadgetID(#MyEdit)
DisplayPopupMenu(#MyPopup, WindowID)
EndIf
ProcedureReturn 0
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Aber, aber ts, ich glaube, der gute Eckhard will den Code zum Paste haben, oder?
Wenn ja, bitte schön, den hier hab ich von ts: (wenn Posten nicht erwünscht, sagen, ts!)
Jeweils für Kopieren, Ausschneiden und Einfügen, allerdings nur unter Windows:
MFG
Wenn ja, bitte schön, den hier hab ich von ts: (wenn Posten nicht erwünscht, sagen, ts!)
Jeweils für Kopieren, Ausschneiden und Einfügen, allerdings nur unter Windows:
Code: Alles auswählen
Procedure CopyEditorText(gadget)
SendMessage_(GadgetID(gadget), #WM_COPY,0,0)
EndProcedure
Procedure CutEditorText(gadget)
SendMessage_(GadgetID(gadget), #WM_CUT,0,0)
EndProcedure
Procedure InsertEditorText(gadget,einfuegtext$)
ProcedureReturn SendMessage_(GadgetID(gadget),#EM_REPLACESEL,0,einfuegtext$)
EndProcedure
@ts-soft
Danke! Deine Prozedur konnt ich noch nicht einbauen, weil ich nicht weiß, wie ich sie anpassen soll. Zuviele Dinge, die ich noch nicht verstehe.
Der Tipp mit dem Popupmenü war aber prima. Ich habe schon mal etwas gebastelt. Bei meiner Version wird beim Einfügen alles im EditorGadget gelöscht und neu durch die Zwischenablage ersetzt.
Würde dein Code bei vorhandenem Text dann genau an der Cursorposition die Zwischenablage dazwischenfügen?
Danke! Deine Prozedur konnt ich noch nicht einbauen, weil ich nicht weiß, wie ich sie anpassen soll. Zuviele Dinge, die ich noch nicht verstehe.
Der Tipp mit dem Popupmenü war aber prima. Ich habe schon mal etwas gebastelt. Bei meiner Version wird beim Einfügen alles im EditorGadget gelöscht und neu durch die Zwischenablage ersetzt.
Würde dein Code bei vorhandenem Text dann genau an der Cursorposition die Zwischenablage dazwischenfügen?
Code: Alles auswählen
;PB4
;************* Enumeration *************
Enumeration : #window : EndEnumeration
Enumeration: #Menu : #popupeditor1: #Toolbar : EndEnumeration
Enumeration: #popupeditor1menu1 : EndEnumeration
Enumeration: #edit1 : #MyPopup : EndEnumeration
; Procedure WindowCallback(WindowId, message, wParam, lParam)
; Select message
; Case #WM_CONTEXTMENU
; If wParam = GadgetID(#edit1)
; DisplayPopupMenu(#MyPopup, WindowID)
; EndIf
; ProcedureReturn 0
; EndSelect
; ProcedureReturn #PB_ProcessPureBasicEvents
;EndProcedure
;************* Fensteraufbau *************
hwnd = OpenWindow(#window,0,0,800,600,fensterueberschrift$,#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
SetWindowColor(0,RGB(100, 150, 100))
CreateGadgetList(hwnd)
CreateMenu(#Menu, hwnd)
EditorGadget(#edit1,20,20,760,560)
CreatePopupMenu(#popupeditor1)
MenuItem(#popupeditor1menu1,"Einfügen")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case #edit1 ; Editorfenster 1
EndSelect
Case #WM_RBUTTONDOWN ; rechte Maustaste wurde gedrückt =>
Debug "hallo"
DisplayPopupMenu(#popupeditor1,WindowID(#window)) ; stelle jetzt das Popup-Menü dar
Case #PB_Event_Menu ; ein Eintrag des Popup-Menüs wurde angeklickt
Select EventMenu()
Case 0
Zwischenablage$ = GetClipboardText() ; holt Zwischenablage
SetGadgetText(#edit1, Zwischenablage$)
EndSelect
EndSelect
ForEver
Viele Grüße aus dem Sauerland
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Code: Alles auswählen
;PB4
;************* Enumeration *************
Enumeration : #window : EndEnumeration
Enumeration: #Menu : #popupeditor1: #Toolbar : EndEnumeration
Enumeration: #popupeditor1menu1 : EndEnumeration
Enumeration: #edit1 : #MyPopup : EndEnumeration
Procedure WindowCallback(WindowId, message, wParam, lParam)
Select message
Case #WM_CONTEXTMENU
If wParam = GadgetID(#edit1)
DisplayPopupMenu(#popupeditor1,WindowID(#window))
EndIf
ProcedureReturn 0
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
;************* Fensteraufbau *************
hwnd = OpenWindow(#window,0,0,800,600,fensterueberschrift$,#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
SetWindowCallback(@WindowCallback())
SetWindowColor(0,RGB(100, 150, 100))
CreateGadgetList(hwnd)
CreateMenu(#Menu, hwnd)
EditorGadget(#edit1,20,20,760,560)
CreatePopupMenu(#popupeditor1)
MenuItem(#popupeditor1menu1,"Einfügen")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case #edit1 ; Editorfenster 1
EndSelect
Case #PB_Event_Menu ; ein Eintrag des Popup-Menüs wurde angeklickt
Select EventMenu()
Case 0
SendMessage_(GadgetID(#edit1), #WM_PASTE, 0, 0)
EndSelect
EndSelect
ForEver
öffnen, um das korrigieren zu lassen
Reagiert jetzt auf das Kontextmenü des EditorGadgets, und nicht auf
irgendwelche Rechtsclicks (wäre nur eine Notlösung, bzw. bei 2
EditorGadgets schon nicht mehr brauchbar)
Die passende Message hat Alves leider vergessen gehabt, ansonsten hab
ich aber gehofft, das Du Dir auch mal selber was erarbeitest. Lediglich das
mit dem Callback konntest du nicht Wissen, die Messages hab ich Dir in
anderer Form schon mal zukommen lassen.
Es bringt aber nicht viel, dir den Code zu geben, solange Du nicht
nachliest, bzw. versuchst ihn zu verstehen.
PSDK wirste hoffenlich installiert haben, so das also per F1 immer Hilfe
zur Verfügung steht.
Wenn Du so weiter machst, auf meiner Homepage ist ein Spendenbutton

Gruß
Thomas
Der Sinn der Enumeration ist auch verfehlt bei Deinem Konstrukt, so kann
man nicht mal eben eine neue Konstante einfügen

Zuletzt geändert von ts-soft am 01.09.2006 20:32, insgesamt 1-mal geändert.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Hi Eckhard.S,
hier schau Dir das mal an, vielleicht kommst Du ja damit klar.
hier schau Dir das mal an, vielleicht kommst Du ja damit klar.
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)
DONALD
www.PureBasic-Donald.de gibt es im Moment nicht mehr
PureBasic - jaPBe - PureVisonXP - TailBite

PureBasic - jaPBe - PureVisonXP - TailBite