[Erledigt] Gadget aktivieren via Moushover, aber wie?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
MenschMarkus
Beiträge: 220
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

[Erledigt] Gadget aktivieren via Moushover, aber wie?

Beitrag von MenschMarkus »

Hallo zusammen

Ich bin mal wieder dabei etwas zu versuchen.
In diesem Post http://www.purebasic.fr/german/viewtopi ... 00#p343800 von RSBasic habe ich ein code Snippet gefunden welches mir für mein Vorhaben helfen könnte.
Ich habe dieses Snippet etwas abgeändert um mein Vorhaben etwas zu verdeutlichen

Code: Alles auswählen

EnableExplicit

Define hhkLLMouse

Procedure MouseKeyHook(nCode, wParam, lParam)
  Select wParam
    Case #WM_LBUTTONDOWN
      Debug "Linke Maustaste wird gedrückt."
    Case #WM_LBUTTONUP
      Debug "Linke Maustaste wurde losgelassen."
    Case #WM_MOUSEMOVE
      Debug EventGadget()
  EndSelect
  ProcedureReturn CallNextHookEx_(0, nCode, wParam, lParam)
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ListIconGadget(1,0,0,WindowWidth(0)/2,WindowHeight(0),"Title 1",200,0)
  ListIconGadget(2,WindowWidth(0)/2,0,WindowWidth(0)/2,WindowHeight(0),"Title 1",200,0)
  hhkLLMouse = SetWindowsHookEx_(#WH_MOUSE_LL, @MouseKeyHook(), GetModuleHandle_(0), 0)
 
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

UnhookWindowsHookEx_(hhkLLMouse)
Der Debugger zeigt mir an welches Gadget gerade aktiv ist (Fenster=0, Listicon1=1, ListIcon2= 2), je nachdem welches Gadget angeklickt wurde. Soweit so gut.
Wie bringe ich Windows jetzt dazu mir ,ohne explizitem Tastendruck auf eines der Gadgets (ListIcon1 / ListIcon2), dieses Gadget beim Überfahren mit der Maus zu aktivieren.
Ich habe da in der API Referenz erst mal nichts gefunden.

Hat da jemand eine Idee?
Zuletzt geändert von MenschMarkus am 17.05.2018 11:44, insgesamt 1-mal geändert.
Wissen schadet nur dem, der es nicht hat !
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Gadget aktivieren via Moushover, aber wie?

Beitrag von RSBasic »

MouseHook würde ich nicht benutzen, dafür gibt es SetWindowCallback:

Code: Alles auswählen

EnableExplicit

Procedure WinCallback(hWnd, uMsg, wParam, lParam) 
  
  Select uMsg
    Case #WM_NOTIFY
      Debug wParam
  EndSelect
  
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure 

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(1,0,0,WindowWidth(0)/2,WindowHeight(0),"Title 1",200,0)
  ListIconGadget(2,WindowWidth(0)/2,0,WindowWidth(0)/2,WindowHeight(0),"Title 1",200,0)
  
  SetWindowCallback(@WinCallback())
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: Gadget aktivieren via Moushover, aber wie?

Beitrag von Shardik »

Es gibt dazu ein schönes Beispiel von netmaestro und srod aus dem englischen Forum mit dem bequemen Befehl AddHoverGadget(), um ein beliebiges Gadget beim Überfahren mit dem Maus-Cursor mit einem roten Rahmen zu versehen:
http://www.purebasic.fr/english/viewtop ... 14&t=23294
MenschMarkus
Beiträge: 220
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Re: Gadget aktivieren via Moushover, aber wie?

Beitrag von MenschMarkus »

Vielen Dank,

das ging ja wirklich schnell. Das sollte mir helfen.
:allright:
Wissen schadet nur dem, der es nicht hat !
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: [Erledigt] Gadget aktivieren via Moushover, aber wie?

Beitrag von Mijikai »

Oder einfach PeekMessage_() vor den PureBasic Event() Befehlen aufrufen.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: [Erledigt] Gadget aktivieren via Moushover, aber wie?

Beitrag von hjbremer »

dafür hat Windows TrapMouseEvent() erfunden

Es lebe die Windows Api :mrgreen:
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: [Erledigt] Gadget aktivieren via Moushover, aber wie?

Beitrag von RSBasic »

hjbremer hat geschrieben:dafür hat Windows TrapMouseEvent() erfunden
Du meinst TrackMouseEvent_(). Hier ein Beispielcode für MenschMarkus:

Code: Alles auswählen

EnableExplicit

Global LVCB

Procedure LVCB(hWnd, Message, wParam, lParam)
  Protected TRACKMOUSEEVENT.TRACKMOUSEEVENT
  
  Select Message
    Case #WM_MOUSEMOVE
      Debug "hover"
      TRACKMOUSEEVENT\cbSize = SizeOf (TRACKMOUSEEVENT)
      TRACKMOUSEEVENT\dwFlags = #TME_LEAVE
      TRACKMOUSEEVENT\hwndTrack = hwnd
      TrackMouseEvent_(TRACKMOUSEEVENT)
    Case #WM_MOUSELEAVE
      Debug "leave"
  EndSelect
 
  ProcedureReturn CallWindowProc_(LVCB, hWnd, Message, wParam, lParam)
EndProcedure

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(1,0,0,WindowWidth(0)/2,WindowHeight(0),"Title 1",200,0)
  ListIconGadget(2,WindowWidth(0)/2,0,WindowWidth(0)/2,WindowHeight(0),"Title 1",200,0)
  
  LVCB = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @LVCB())
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
hjbremer hat geschrieben:Es lebe die Windows Api :mrgreen:
WinAPI forever. :D
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten