"EventHoverGadget" für PanelGadget

Anfängerfragen zum Programmieren mit PureBasic.
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

"EventHoverGadget" für PanelGadget

Beitrag von Angelo »

Ich habe im englischen Forum die Funktion EventHoverGadget() entdeckt, mit der man die Gadget-ID bestimmen kann, indem man mit der Maus über ein Gadget geht. Wie kann man das erreichen, wenn es sich um Gadgets in einem PanelGadget handelt?
PB 5.50; Win 7
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: "EventHoverGadget" für PanelGadget

Beitrag von RSBasic »

Hallo Berliner Angelo

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, 100)
  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)
  
  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 = GetDlgCtrlID_(hGad)
        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)
          hGad = GetWindow_(GadgetID(gadget), #GW_CHILD)
          ScreenToClient_ (hGad, @p)
          hGad = ChildWindowFromPoint_ (hGad, p\y<< 32+p\x)
          If GetWindow_(GadgetID(gadget), #GW_CHILD) = hGad
            hGad = GadgetID(gadget)
          EndIf
        EndIf
        gadget = GetDlgCtrlID_(hGad)                 
        Debug "Gadget : " + Str(gadget)                 
      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
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: "EventHoverGadget" für PanelGadget

Beitrag von mk-soft »

Da gibt es ein Modul für alle OS. Funktioniert fast perfekt.

Link: http://www.purebasic.fr/german/viewtopi ... =8&t=29047
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Re: "EventHoverGadget" für PanelGadget

Beitrag von Angelo »

Super! Herzlichen Dank, RSBasic - das klappt ja wunderbar.

Allerdings wenn ich das Panel-Gadget um einen zweiten Tab erweitere:

Code: Alles auswählen

If PanelGadget(11, 10, 260, 580, 100)
  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, "zweites Tab")
  ButtonGadget(15, 10, 10, 100, 20, "Button 15", 0)
  ButtonGadget(16, 120, 10, 100, 20, "Button 16", 0)
  ButtonGadget(17, 230, 10, 100, 20, "Button 17", 0)
  CloseGadgetList()
EndIf
und dann auf den zweiten Tab gehe, werden die Gadget-IDs nicht richtig angezeigt (es werden die IDs der Gadgets vom ersten Tab genommen). Hast Du für diesen Fall eine Idee?
PB 5.50; Win 7
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, 100)
  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, 10, 100, 20, "Button 15", 0)
  ButtonGadget(16, 120, 10, 100, 20, "Button 16", 0)
  ButtonGadget(17, 230, 10, 100, 20, "Button 17", 0)
  
  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 = GetDlgCtrlID_(hGad)
        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)
          hGad = GetWindow_(GadgetID(gadget), #GW_CHILD)
          For a=1 To GetGadgetState(gadget)
            hGad = GetWindow_(hGad, #GW_HWNDNEXT)
          Next
          ScreenToClient_ (hGad, @p)
          hGad = ChildWindowFromPoint_ (hGad, p\y<< 32+p\x)
          If GetWindow_(GadgetID(gadget), #GW_CHILD) = ChildWindowFromPoint_ (GadgetID(gadget), p\y<< 32+p\x)
            hGad = GadgetID(gadget)
          EndIf
        EndIf
        gadget = GetDlgCtrlID_(hGad)                 
        Debug "Gadget : " + Str(gadget)                 
      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 »

Vielen Dank, RSBasic. In dieser Konfiguration funktioniert es. Aber ich habe mal die y-Koordinate der Buttons auf dem "Erweitert"-Tab verändert (auf den Wert 40):

Code: Alles auswählen

 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)
Wenn ich das mache, wird nichts angezeigt!?
PB 5.50; Win 7
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: "EventHoverGadget" für PanelGadget

Beitrag von RSBasic »

Ist die Höhe deines PanelGadgets kleiner als 40? Kannst du einen Beispielcode schreiben?
Wenn ich deinen Code in den von mir erweiterten Code einfüge und ersetze, dann werden die Buttons angezeigt, nur etwas tiefer.
Hast du in deinem Code noch irgendwas geändert?
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 »

Ich habe direkt Deinen Code genommen und die y-Koordinate der Buttons in "Erweitert" von 10 auf 40 erhöht. Man sieht jetzt die Buttons tiefer liegen - so wie es sein soll. Aber gehe ich mit der Maus drüber, wird keine Gadget-ID angezeigt....
PB 5.50; Win 7
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: "EventHoverGadget" für PanelGadget

Beitrag von RSBasic »

Sorry, die letzte Abfrage war nicht korrekt. Das sollte jetzt besser funktionieren:

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, 100)
  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)
 
  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 = GetDlgCtrlID_(hGad)
        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)
          hGad = GetWindow_(GadgetID(gadget), #GW_CHILD)
          For a=1 To GetGadgetState(gadget)
            hGad = GetWindow_(hGad, #GW_HWNDNEXT)
          Next
          hGad2 = hGad
          ScreenToClient_ (hGad, @p)
          hGad = ChildWindowFromPoint_ (hGad, p\y<< 32+p\x)
          If hGad = hGad2
            hGad = GadgetID(gadget)
          EndIf
        EndIf
        gadget = GetDlgCtrlID_(hGad)                 
        Debug "Gadget : " + Str(gadget)                 
      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 »

Super, das klappt wunderbar.

Darf ich Dich noch eine allerletzte Sache fragen?? Ich würde mich riesig freuen, wenn ich das auch noch wüsste.... (dann sind wirklich alle Fragen beantwortet)

Ich habe noch einen drittes Tab mit einer ScrollArea erstellt, die wiederum drei Buttons enthält. Wie kann man deren ID herausbekommen?

Code: Alles auswählen

If PanelGadget(11, 10, 260, 580, 100)
  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() 
  CloseGadgetList()
EndIf
PB 5.50; Win 7
Antworten