"EventHoverGadget" für PanelGadget

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: "EventHoverGadget" für PanelGadget

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Re: "EventHoverGadget" für PanelGadget

Beitrag von Angelo »

Genial! Ganz herzlichen Dank!!
PB 5.50; Win 7
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: "EventHoverGadget" für PanelGadget

Beitrag 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.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: "EventHoverGadget" für PanelGadget

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: "EventHoverGadget" für PanelGadget

Beitrag 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 :)
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Antworten