Seite 2 von 2

Re: Rechtsklick bei Editorgadget

Verfasst: 01.02.2011 15:15
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

Re: Rechtsklick bei Editorgadget

Verfasst: 01.02.2011 15:23
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

Re: Rechtsklick bei Editorgadget

Verfasst: 01.02.2011 15:28
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

Re: Rechtsklick bei Editorgadget

Verfasst: 01.02.2011 15:32
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

Re: Rechtsklick bei Editorgadget

Verfasst: 01.02.2011 17:19
von Velindos
Hallo,
da habt Ihr mir auf die Sprünge geholfen. Wollte natürlich wie Kiffi schrieb, gleich eines für jedes Gadget. Hab jetzt euren Vorschlag eingearbeitet und siehe da funkt wenn ich am ImageGadget die rechte Maustaste drücke.
Nochmals besten Dank an euch, mit dieser Lösung ist besser zu arbeiten.

Gruss ... Velindos

Re: Rechtsklick bei Editorgadget

Verfasst: 02.02.2011 15:17
von Velindos
Hallo,
habe die Lösung eingearbeitet, aber jetzt kommts, jetzt funktioniert die Sache am Image aber nicht am Editor Gadget. Warum nicht, kann mir das einer sagen?

Code: Alles auswählen

EnableExplicit

Enumeration
  #String_0
  #String_2
EndEnumeration

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)
  StringGadget(2,200,10,200,20,"Klicke doppelt linke Maustaste...",0)
  EditorGadget(3, 120, 50, 150, 140)
  
  If CreatePopupMenu(#String_0)
    MenuItem(1, "einfügen")
    MenuItem(2, "einfügen2")
  EndIf
  
  Repeat
    EventID=WaitWindowEvent()
    If EventID=#PB_Event_Gadget
      Select EventGadget()
          
        Case 1
          Select EventType()
            Case #PB_EventType_RightClick 
              DisplayPopupMenu(#String_0, WindowID(0))
              Debug "Rechte Maustaste wurde gedrückt..."
          EndSelect
          
        Case 3
          Select EventType()
            Case #PB_EventType_RightClick 
              DisplayPopupMenu(#String_0, WindowID(0))
              Debug "Rechte Maustaste wurde gedrückt..."
          EndSelect

  
  
EndSelect
EndIf
If EventID = #PB_Event_CloseWindow
  End
EndIf
ForEver
EndIf
Gruss ... Velindos

Re: Rechtsklick bei Editorgadget

Verfasst: 02.02.2011 15:39
von ts-soft
Weil das EditorGadget dieses Event nicht unterstützt. Code für das EditorGadget hast doch bekommen,
also nutze ihn für das EditorGadget und nicht für das ImageGadget.

Re: Rechtsklick bei Editorgadget

Verfasst: 02.02.2011 16:04
von Velindos
Hallo,
ok, war mir nicht sicher! Danke!
Gruss ... Velindos