Rechtsklick bei Editorgadget

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
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

Re: Rechtsklick bei Editorgadget

Beitrag von ts-soft »

Code: Alles auswählen

; EditorGadget TEST
;{
Enumeration
  #Window_0
EndEnumeration
; Variablen
Enumeration
  #String_0
  #String_1
  #Text_0
  #Text_1
  #Text_2
  #Text_3
EndEnumeration
;}

Procedure WinCallback(hWnd, uMsg, wParam, lParam) 
  Protected result = #PB_ProcessPureBasicEvents
  
  Select uMsg
    Case #WM_CONTEXTMENU
      If GadgetID(#String_0) = wParam
        DisplayPopupMenu(#String_0, WindowID(#Window_0))
      EndIf
  EndSelect
  
  ProcedureReturn result 
EndProcedure 

If OpenWindow(#Window_0, 220, 0, 470, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
  EditorGadget(#String_0, 120, 50, 150, 140)
  SendMessage_(GadgetID(#String_0), #EM_SETTARGETDEVICE, #Null, 0)
  TextGadget(#Text_0, 120, 30, 240, 20, "Hier geht der rechte Mausklick nicht!")
  TextGadget(#Text_2, 120, 10, 140, 20, "Mein EditorGadget")
  StringGadget(#String_1, 120, 230, 240, 20, "Test")
  TextGadget(#Text_1, 120, 210, 170, 20, "Mein Stringgadget")
  TextGadget(#Text_3, 120, 260, 240, 20, "Hier geht der rechte Mausklick!")
  If CreatePopupMenu(#String_0)
    MenuItem(1, "einfügen")
  EndIf
  SetWindowCallback(@WinCallback())
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow : Break
      Case #PB_Event_Menu
        Select EventMenu()
          Case 1
            SendMessage_(GadgetID(#String_0), #WM_PASTE, 0, 0) 
        EndSelect
    EndSelect
  ForEver
EndIf 
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.
Bild
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Rechtsklick bei Editorgadget

Beitrag von HeX0R »

Dein Engagement in letzter Zeit in allen Ehren, Thomas,
aber findest du es nicht besser jemandem eine Tür nur zu zeigen, als ihn hindurchzustossen?
Benutzeravatar
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

Re: Rechtsklick bei Editorgadget

Beitrag von ts-soft »

HeX0R hat geschrieben:Dein Engagement in letzter Zeit in allen Ehren, Thomas,
aber findest du es nicht besser jemandem eine Tür nur zu zeigen, als ihn hindurchzustossen?
Es fehlen ja noch die meisten Infos um ein komplettes Kontextmenü einzubauen, sind nur die Grundlagen.
Und bevor da wieder was mit #WM_RBUTTONDOWN kommt, poste ich es lieber :mrgreen:

Ausserdem ist fast Weihnachten :D

Gruß
Thomas
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.
Bild
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Rechtsklick bei Editorgadget

Beitrag von hjbremer »

ts-soft hat geschrieben:Und bevor da wieder was mit #WM_RBUTTONDOWN kommt, poste ich es lieber :mrgreen:
Was hast du gegen #WM_RBUTTONDOWN ?

Funktioniert doch !

Code: Alles auswählen

Case #WM_RBUTTONDOWN: If GetActiveGadget() = \editgadget: PrefEdit_PopUpDisplay(\window): EndIf
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
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

Re: Rechtsklick bei Editorgadget

Beitrag von ts-soft »

Warum sollte ich jeden Rechtsklick abfragen, wenn doch das Kontextmenü genügt :mrgreen:
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.
Bild
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Rechtsklick bei Editorgadget

Beitrag von Velindos »

Hallo,
Debugger sind was für Memmen!
Echte Männer kompilieren direkt auf die Master CD …
also Thomas finde deinen Spruch einfach gut!
Die Lösung ist bei mir angekommen und besten Dank für deine Unterstützung. Habe sie in meine Lösung eingebaut. Das Problem tritt auf wenn ich Überschriften in meine Browser kopiere, die man nicht per Drop ins Editorgadget ziehen kann, jetzt funkt die Sache!

Nun zu den Sprüchen im Forum
Dein Engagement in letzter Zeit in allen Ehren, Thomas,
aber findest du es nicht besser jemandem eine Tür nur zu zeigen, als ihn hindurchzustossen?
Also mir wurde erklärt, mittels Beispielen Fragen zu stellen. Und dies hat sich hier wieder als das Beste erwiesen!
"Fragmente helfen keinen und zeigen meisten nur vom Wissen eines Einäugigen, der König unter den Blinden ist!", solche und ähnliche Gestalten haben wir ja mehr als Genug!
Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Rechtsklick bei Editorgadget

Beitrag von Velindos »

Hallo,
wenn ich auf das Image fahre, funktioniert die rechte Maustaste nicht mehr.

Code: Alles auswählen

; EditorGadget & ImageGadget TEST
;{
Enumeration
  #Window_0
EndEnumeration
; Variablen
Enumeration
  #String_0
  #String_1
  #Text_0
  #Text_1
  #Text_2
  #Text_3
  #ImageGadget8
EndEnumeration
;}

Procedure WinCallback(hWnd, uMsg, wParam, lParam)
  Protected result = #PB_ProcessPureBasicEvents
  
  Select uMsg
    Case #WM_CONTEXTMENU
      If GadgetID(#String_0) = wParam
        DisplayPopupMenu(#String_0, WindowID(#Window_0))
      EndIf
      If GadgetID(#ImageGadget8) = wParam
        DisplayPopupMenu(#ImageGadget8, WindowID(#Window_0))
      EndIf
      
  EndSelect
  
  ProcedureReturn result
EndProcedure

If OpenWindow(#Window_0, 220, 0, 470, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
  EditorGadget(#String_0, 120, 50, 150, 140)
  ImageGadget (#ImageGadget8,280,50,70,70,test, #PB_Image_Border )
  
  SendMessage_(GadgetID(#String_0), #EM_SETTARGETDEVICE, #Null, 0)
  TextGadget(#Text_0, 120, 30, 240, 20, "Hier geht der rechte Mausklick nicht!")
  TextGadget(#Text_2, 120, 10, 140, 20, "Mein EditorGadget")
  StringGadget(#String_1, 120, 230, 240, 20, "Test")
  TextGadget(#Text_1, 120, 210, 170, 20, "Mein Stringgadget")
  TextGadget(#Text_3, 120, 260, 240, 20, "Hier geht der rechte Mausklick!")
  If CreatePopupMenu(#String_0)
    MenuItem(1, "einfügen")
    MenuItem(2, "Bearbeiten")
    
  EndIf
  
  
  SetWindowCallback(@WinCallback())
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow : Break
      Case #PB_Event_Menu
        Select EventMenu()
          Case 1
            SendMessage_(GadgetID(#String_0), #WM_PASTE, 0, 0)
            
          Case 2
            Debug "Eingefügt!"
            
        EndSelect
    EndSelect
  ForEver
EndIf 
Verstehe ich das richtig, die funktioniert nur bei EditorGadget und StringGadget?

Gruss Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Rechtsklick bei Editorgadget

Beitrag von RSBasic »

Du möchtest einen Rechtsklick beim ImageGadget abfragen?
Schau in der PB-Hilfe nach, unter: EventType().

Beispiel:

Code: Alles auswählen

EnableExplicit

Define EventID

CreateImage(1,100,100,32)

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
  ImageGadget(1,10,10,0,0,ImageID(1),0)
  
  Repeat
    EventID=WaitWindowEvent()
    If EventID=#PB_Event_Gadget
      Select EventGadget()
        Case 1
          Select EventType()
            Case #PB_EventType_RightClick   
              Debug "Rechte Maustaste wurde gedrückt..."
          EndSelect
          
      EndSelect
    EndIf
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Rechtsklick bei Editorgadget

Beitrag von Kiffi »

Code: Alles auswählen

CreatePopupMenu(#String_0)
bevor es zu Folgefehlern kommt: ich glaube, dass da bei
Dir ein Verständnisfehler vorliegt.

Du erzeugst mit CreatePopupMenu() kein PopupMenü für
ein bestimmtes Gadget (hier: Dein #String_0). PopupMenues
werden immer gadgetunabhängig erzeugt. Wo es dann aufpoppt
entscheidest Du im Code.

Vergib für Deine Menues eindeutige IDs.

Sowas hier: DisplayPopupMenu(#ImageGadget8, ...
ist dann auch entsprechend falsch.


Zum eigentlichen Problem: Mausklick aufs Image kannst Du auf
#PB_EventType_RightClick abfragen. Dafür braucht's IMO keinen Callback.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
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

Re: Rechtsklick bei Editorgadget

Beitrag von ts-soft »

Ich werde Alt, schon wieder zu langsam.

#WM_CONTEXTMENU gibts es nicht für alle Controls, meist für welche, die Text enhalten.

Den Rest haben die anderen schon gesagt, hier Dein EventLoop, wobei Du natürlich ein
anderes Popup anzeigen solltest:

Code: Alles auswählen

  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow : Break
      Case #PB_Event_Menu
        Select EventMenu()
          Case 1
            SendMessage_(GadgetID(#String_0), #WM_PASTE, 0, 0)
           
          Case 2
            Debug "Eingefügt!"
           
        EndSelect
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #ImageGadget8
            Select EventType()
              Case #PB_EventType_RightClick
                DisplayPopupMenu(#String_0, WindowID(#Window_0))
              Default
                Debug EventType()
            EndSelect
        EndSelect
        
    EndSelect
  ForEver
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.
Bild
Antworten