Mouseevents im ImageGadget...

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Mouseevents im ImageGadget...

Beitrag von Ghosty1967 »

Hallo Leutz...

Problem: Ich habe ein ImageGadget mit einer Grafik. Ist die Maus über diesem Gadget und die linke Maustaste wird gedrückt, soll die Grafik des ImageGadgets geändert werden. Lasse ich die Maus wieder los oder verlasse das ImageGadget mit der Maus, soll die ursprüngliche Grafik wieder dargestellt werden.

Kennt jemand eine Lösung dazu und kann mir enentuell nen Schnipsel dazu schreiben... wäre sehr dankbar !

Thx... Ghosty
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Ich habe jetzt zwar keine professionelle Lösung, aber so könnte man
es auch erreichen. Der Nachteil. Beim Klick auf dem rechten Mousebutton
wird das zweite Bild angezeigt und wird erst wieder beim Linksklick
auf das erste Bild umgestellt. Sonst wird beim Linksklick das Bilder
abwechselnd gezeigt.

Die bessere Lösung wäre wohl mit einem CallbackWindow, indem mann
dort alle Windows-Messages für die Buttons auswertet.

PB4-Code:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 245, 105, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    If LoadImage(0, "up.bmp")  And LoadImage(1,"Down.bmp")  
      ImageGadget(0,  10, 10, 100, 83, ImageID(1))           
    EndIf
    
    Repeat
    Event=WaitWindowEvent() 
    
    Select Event 
      Case 13100;  
        ImageGadget(0,  10, 10, 100, 83, ImageID(0))
      Case #WM_LBUTTONUP 
        ImageGadget(0,  10, 10, 100, 83, ImageID(1))
    EndSelect
    
    Until event = #PB_Event_CloseWindow
EndIf
Grüße Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag von Ghosty1967 »

Na, das ist doch schonmal was, mit dem ich weiter arbeiten kann. An ein
Callback habe ich auch schon einmal gedacht, aber bisher habe ich noch
keine konkrete Idee zur Umsetzung...

Nochmals danke für die Antwort.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Schau dir mal folgende Befehle und Flags an :

WINAPI -> MSDN :

#WM_MOUSEMOVE
#WM_LBUTTONDOWN
#WM_LBUTTONUP

SetCapture
ReleaseCapture
SetWindowLong (mit #gwl_wndproc)
CallWindowProc
PtInRect (hat in pb 3 parameter [handle,x,y])

@Falko
Es gibt SetGadgetState.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

eine weitere (wie ich finde sehr schöne) Möglichkeit, ist die, die
EasyVENT-Routinen von srod zu verwenden:

Code: Alles auswählen

Enumeration
  #myWindow
  #myImageGadget
EndEnumeration

Declare myImageGadget_OnMouseDown(*sender.PB_Sender)
Declare myImageGadget_OnMouseUp  (*sender.PB_Sender)

OpenWindow(#myWindow, #PB_Ignore, #PB_Ignore, 200, 200, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

CreateGadgetList(WindowID(#myWindow))

LoadImage(0, "d:\up.bmp")
LoadImage(1, "d:\down.bmp") 

ImageGadget(#myImageGadget,  5, 5, 190, 190, ImageID(1))           

SetEventHandler(GadgetID(#myImageGadget), #OnMouseDown, @myImageGadget_OnMouseDown())
SetEventHandler(GadgetID(#myImageGadget), #OnMouseUp,   @myImageGadget_OnMouseUp())

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow

End

Procedure myImageGadget_OnMouseDown(*sender.PB_Sender)
  SetGadgetState(#myImageGadget, ImageID(0))
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

Procedure myImageGadget_OnMouseUp(*sender.PB_Sender)
  SetGadgetState(#myImageGadget, ImageID(1))
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Grüße ... Kiffi
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

EasyVENT hört sich interessant an, scheint aber ne LIB zu sein.

ist die OpenSource? habs mir noch nicht gezogen...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Kaeru Gaman hat geschrieben:EasyVENT hört sich interessant an, scheint aber ne LIB zu sein.
nope, ist keine Lib, is'n Include und auf jeden Fall sehr empfehlenswert.

Grüße ... Kiffi
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> is'n Include

wundaprächtig. dann werd ichs mir mal saugen. danke für den hinweis. :allright:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten