Seite 1 von 1

StringGadget Rechtsklick

Verfasst: 02.07.2009 17:06
von Andesdaf
Hallo!

Als erstes: kann sein dass ich grade total ein Brett vor dem Kopf habe.

Es gibt kein Popupmenü für StringGadgets?

Code: Alles auswählen

Enumeration
  #WIN
  #STR
  #MBA
  #CHE
  #MIT
EndEnumeration

If OpenWindow(#WIN, 0, 0, 230, 90, "Event-Handling Beispiel...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

   StringGadget  (#STR, 10, 10, 200, 20, "Klick mich")
   CheckBoxGadget(#CHE, 10, 40, 200, 20, "Markiere mich")

   If CreatePopupMenu(#MBA)
     MenuTitle("Menu")
     MenuItem(#MIT, "Eintrag 1")
   EndIf

   Repeat
     Event = WaitWindowEvent()
     
     Select Event
     
       Case #PB_Event_Gadget
         Select EventGadget()
           Case #STR
             If EventType() = #PB_EventType_RightClick
               DisplayPopupMenu(#MBA,WindowID(#WIN))
             EndIf
         EndSelect
       
     
     EndSelect
   Until Event = #PB_Event_CloseWindow
 EndIf
Da kommt immer nur das Standard-Menü von Windows. In der Hilfe zu EventType()
steht aber das StringGadget unter den unterstützten Gadgets dabei.

Bug? Brett? Forensuche? Hilfe doof?

Danke für Antworten.
Gruß, Andesdaf

Verfasst: 02.07.2009 17:36
von Fluid Byte
Wo hast du denn her dass man das Standard-Popmenu von Windows mittels PB ersetzen kann? Das funktioniert nicht, geht nur mit Subclassing.

Verfasst: 02.07.2009 17:50
von Andesdaf
ich dachte einfach, dass man ein Popupmenü im StringGadget machen
kann. Leider enthält die Hilfe auch keinen Hinweis auf diesen Sachverhalt.

Danke für die Hilfe.

Verfasst: 02.07.2009 21:24
von RSBasic
@Andesdaf

Code: Alles auswählen

EnableExplicit

Global gOldEditProc

Procedure editproc(hWnd, uMsg, wParam, lParam)
  Protected result
    Select uMsg
        Case #WM_RBUTTONDOWN
          DisplayPopupMenu(1,WindowID(0))
          result = 0
      Default
        result = CallWindowProc_(gOldEditProc, hWnd, uMsg, wParam, lParam)
    EndSelect
ProcedureReturn result
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  StringGadget(1,10,10,200,20,"Klicke rechte Maustaste...",0)
 
  If CreatePopupImageMenu(1,#PB_Menu_ModernLook)
    MenuItem(1,"Hallo Andesdaf :)",0)
  EndIf
 
  gOldEditProc = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @editproc())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Verfasst: 02.07.2009 21:39
von Fluid Byte
Ich sehe du benutzt SetWindowLongPtr_(). Ist allerdings überflüssig wenn du die Typendeklarationen nicht einfernst (.l) :wink:

Verfasst: 03.07.2009 16:29
von Andesdaf
Danke RSBasic :allright:, ich schätze mal den Snippet hast du aus deiner
API-Library.

Verfasst: 03.07.2009 16:36
von RSBasic
@Andesdaf
Diesmal nicht, wird aber demnächst auch hinzugefügt.

Verfasst: 03.07.2009 16:39
von Andesdaf
RSBasic hat geschrieben:@Andesdaf
Diesmal nicht, wird aber demnächst auch hinzugefügt.
Ach so, ich hab es zwar versäumt deine Library zu durchsuchen aber es hätte
auch nichts gebracht. :wink: