Seite 2 von 2

Re: "EventHoverGadget" für PanelGadget

Verfasst: 24.08.2017 20:02
von RSBasic

Code: Alles auswählen

OpenWindow(0, 0, 0, 600, 400, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget    (0,  10,  10, 100, 16, "ListIcon Standard", #PB_Text_Center)
ListIconGadget(1,  10,  35, 300, 70, "Column 1", 100)
TextGadget    (2,  10, 125, 120, 16, "ListIcon with Checkbox", #PB_Text_Center)
ListIconGadget(3,  10, 150, 300, 70, "Column 1", 100, #PB_ListIcon_CheckBoxes)
ButtonGadget  (4, 10, 230, 100, 20, "Add Gadget")

ButtonGadget(5, 0, 0, 0, 0, "Button 5")
ButtonGadget(6, 0, 0, 0, 0, "Button 6")
SplitterGadget(7, 400,35, 160, 125, 5, 6, #PB_Splitter_Separator)

ContainerGadget(8,400,160,160,160)
ButtonGadget(9, 0, 10, 80, 25, "Button 9")
ButtonGadget(10,0, 45, 80, 25, "Button 10")
CloseGadgetList()

If PanelGadget(11, 10, 260, 580, 130)
  AddGadgetItem(11, -1, "Allgemein")
  ButtonGadget(12, 10, 10, 100, 20, "Button 12", 0)
  ButtonGadget(13, 120, 10, 100, 20, "Button 13", 0)
  ButtonGadget(14, 230, 10, 100, 20, "Button 14", 0)
  AddGadgetItem(11, -1, "Erweitert")
  ButtonGadget(15, 10, 40, 100, 20, "Button 15", 0)
  ButtonGadget(16, 120, 40, 100, 20, "Button 16", 0)
  ButtonGadget(17, 230, 40, 100, 20, "Button 17", 0)
  AddGadgetItem(11, -1, "mit Scrollarea")
  ScrollAreaGadget(18, 5, 5, 590, 90, 580, 85)
  ButtonGadget(19, 10, 25, 100, 20, "Button 19", 0)
  ButtonGadget(20, 120, 25, 100, 20, "Button 20", 0)
  ButtonGadget(21, 230, 25, 100, 20, "Button 21", 0) 
  CloseGadgetList()
  AddGadgetItem(11, -1, "mit Verschachtelungen")
  ContainerGadget(22, 10, 10, 550, 90, #PB_Container_Flat)
  ScrollAreaGadget(23, 10, 10, 530, 70, 520, 60, #PB_ScrollArea_Flat)
  ButtonGadget(24, 10, 10, 100, 20, "Button 24", 0)
  ButtonGadget(25, 120, 10, 100, 20, "Button 25", 0)
  ButtonGadget(26, 230, 10, 100, 20, "Button 26", 0) 
  CloseGadgetList()
  CloseGadgetList()
  
  CloseGadgetList()
EndIf

Repeat
  ev=WaitWindowEvent()
  Select ev
    Case #WM_MOUSEMOVE         
      GetCursorPos_ (@p.POINT)
      ScreenToClient_ (WindowID(0), @p)             
      hGad = ChildWindowFromPoint_ (WindowID(0), p\y<< 32+p\x)
      If hGad = WindowID(0)
        Debug "No Gadget"
      Else
        gadget = GetProp_(hGad, "PB_ID")
        If GadgetType(gadget) = #PB_GadgetType_Splitter Or GadgetType(gadget) = #PB_GadgetType_Container
          GetCursorPos_ (@p.POINT)
          ScreenToClient_ (GadgetID(gadget), @p)
          hGad = ChildWindowFromPoint_ (GadgetID(gadget), p\y<< 32+p\x)
        ElseIf GadgetType(gadget) = #PB_GadgetType_Panel
          GetCursorPos_ (@p.POINT)
          ScreenToClient_ (GadgetID(gadget), @p)
          hGad = ChildWindowFromPoint_ (GadgetID(gadget), p\y<< 32+p\x)
          For a=1 To GetGadgetState(gadget)
            hGad = GetWindow_(hGad, #GW_HWNDNEXT)
          Next
          hGad3 = hGad
          Repeat
            hGad2 = GetWindow_(hGad, #GW_CHILD)
            If hGad2 = 0
              hGad = GetParent_(hGad)
              Break
            Else
              hGad = hGad2
            EndIf
          ForEver
          GetCursorPos_ (@p.POINT)
          ScreenToClient_ (hGad, @p)
          hGad = ChildWindowFromPoint_ (hGad, p\y<< 32+p\x)
        EndIf
        gadget = GetProp_(hGad, "PB_ID")
        If gadget <> 0
          Debug "Gadget : " + Str(gadget)
        EndIf
      EndIf
      
    Case #PB_Event_CloseWindow
      Q = 1
      
  EndSelect
  
Until Q = 1

Re: "EventHoverGadget" für PanelGadget

Verfasst: 24.08.2017 20:21
von Angelo
Genial! Ganz herzlichen Dank!!

Re: "EventHoverGadget" für PanelGadget

Verfasst: 30.08.2017 21:30
von GlassJoe
mk-soft hat geschrieben:Da gibt es ein Modul für alle OS. Funktioniert fast perfekt.

Link: http://www.purebasic.fr/german/viewtopi ... =8&t=29047
Hi Mk

So was ähnliches brauch ich grade :D für meinen BildBrowser.

Ich hab es selbst noch hingekriegt das die ListIconGadgets automatisch aktiviert werden, wenn mann mit
der Maus drüber fährt. Aber bei den Bildern die in einem Scrollarea Gadget sind, ging es nicht (ausser mann hat erst selbst ein Bild angeklickt) das das ScrollArea Teil wieder das Ding ist, daß sich rührt wenn mann am Mausrad dreht, und mit der Maus über den Coordinaten der Scroll Teils ^^ ist.

Hab dein Module eingebaut und funzt super, daß einzige Problem ist, anscheinend klickt es etwas auch an.
Denn sobald ich mit der Maus drüber fahre, wird auch schon das Bild geladen.
Ich muss das irgendwie hinkriegen, daß ich auf das ListIconGadet fahren kann, es aktiviert wird, und wenn ich auf die ScrollArea zurück fahre, muss das zuletzt >selbst< angeklickte Bild wieder aktiviert sein, zwecks scrollen.

Re: "EventHoverGadget" für PanelGadget

Verfasst: 31.08.2017 00:08
von mk-soft
Wahrscheinlich fragst du irgendwo zu wenig den EventType ab. Must jetzt auch bei Buttons abfragen da für jedes Gadget ein neues Event gibt

Code: Alles auswählen

Repeat
      Event = WaitWindowEvent(10)
      If Event = #PB_Event_Gadget
        
        Select EventType()
          Case #PB_EventType_LeftClick
            Debug "MouseClick Gadget " + EventGadget()
          Case #PB_EventType_MouseEnter
            Debug "MouseEnter Gadget " + EventGadget()
          Case #PB_EventType_MouseLeave
            Debug "MouseLeave Gadget " + EventGadget()
            
        EndSelect
      EndIf
      
    Until Event = #PB_Event_CloseWindow
P.S. Ausserdem wird alle 100 Millisekunden ein TimerEvent mit der ID 999 ausgelöst

Re: "EventHoverGadget" für PanelGadget

Verfasst: 31.08.2017 20:27
von GlassJoe
mk-soft hat geschrieben:Wahrscheinlich fragst du irgendwo zu wenig den EventType ab. Must jetzt auch bei Buttons abfragen da für jedes Gadget ein neues Event gibt

Code: Alles auswählen

Repeat
      Event = WaitWindowEvent(10)
      If Event = #PB_Event_Gadget
        
        Select EventType()
          Case #PB_EventType_LeftClick
            Debug "MouseClick Gadget " + EventGadget()
          Case #PB_EventType_MouseEnter
            Debug "MouseEnter Gadget " + EventGadget()
          Case #PB_EventType_MouseLeave
            Debug "MouseLeave Gadget " + EventGadget()
            
        EndSelect
      EndIf
      
    Until Event = #PB_Event_CloseWindow
P.S. Ausserdem wird alle 100 Millisekunden ein TimerEvent mit der ID 999 ausgelöst
Danke, hab mit EventTimer und WindowMouseX / Y und einer Backup Variable hingekriegt :)