upsala... HeX0r... wo hast du denn da eine Eventschleife gefunden ?
Ok Angefangen haben wir alle mal...
Das Grundgerüst einer Anwendung mit einem Fenster und ein paar Gadgets sieht ungefähr so aus :
Code: Alles auswählen
OpenWindow(0, 0, 0, 640, 480, "Test", #PB_Window_ScreenCentered|#PB_Window_SystemMenu) ; < Fenster öffnen
; Hier ein paar Gadgets erstellen
ButtonGadget(1, 20, 20, 100, 25, "Hallo")
Repeat ; < Hier beginnt die Eventschleife
Event = WaitWindowEvent() ; Hier warten wir darauf, dass ein Event passiert ...
Select Event ; Nun checken wir mal die Events auf die wir reagieren wollen
; Wir reagieren auf....
Case #PB_Event_CloseWindow ; Fenster wird geschlossen
Quit = 1 ; Also legen wir in die Schublade "Quit" eine 1
Case #PB_Event_Gadget ; Irgend ein Gadget löst ein Event aus....
; Wir checken ob es unser ButtonGadget war...
If EventGadget() = 1 ; Ah es ist unser ...
Debug "Button 1" ; Also Debug Meldung
EndIf
EndSelect
Until Quit > 0 ; Hier springen wir wieder zum Repeat, und zwar solange, bis in der Schublade "Quit" eine 1 liegt...
Man möge mir die schnippischen Kommentare verzeihen
Des weiteren gehe ich mal davon aus, das du eigentlich nur 2 Canvasgadgets haben möchtest.
Ein Minimize Button und ein Close Button. Jeder davon soll eine Normale Optik und eine "MouseOver" Optik haben...
Du hast hier allerdings 4 Gadgets erstellt.
Lange Rede, kurzer Sinn ... schau dir diesen Code an und frage nach wenn etwas unklar ist...
Code: Alles auswählen
EnableExplicit
UseJPEGImageDecoder() ; Es sind nur JPG Bilder
Enumeration ; Buttons
#Btn_Minimize
#Btn_Exit
EndEnumeration
DataSection
Img_exitbutton:
IncludeBinary "exit.jpg"
Img_exitbutton_hoover:
IncludeBinary "exitHover.jpg"
Img_minimize:
IncludeBinary "minimize_button.jpg"
Img_minimize_hoover:
IncludeBinary "minimizehover_blue.jpg"
EndDataSection
Global Dim Pictures(1,1) ; Anzahl der Buttons und die Anzahl der Zustände.... Es wird bei 0 angefangen zu zählen
; Bilder zuweisen
Pictures(#Btn_Minimize, 0) = CatchImage(#PB_Any, ?Img_minimize)
Pictures(#Btn_Minimize, 1) = CatchImage(#PB_Any, ?Img_minimize_hoover)
Pictures(#Btn_Exit, 0) = CatchImage(#PB_Any, ?Img_exitbutton)
Pictures(#Btn_Exit, 1) = CatchImage(#PB_Any, ?Img_exitbutton_hoover)
Procedure CanvasButton_Events() ; Eventabarbeitung der CanvasGadgets
Protected Gadget = EventGadget()
Protected EType = EventType()
Select EType
Case #PB_EventType_MouseEnter ; Wenn maus ins Gadget kommt
If StartDrawing(CanvasOutput(Gadget))
If IsImage(Pictures(Gadget,1))
DrawImage(ImageID(Pictures(Gadget,1)), 0, 0) ; soll bild 1 gezeichnet werden
EndIf
StopDrawing()
EndIf
Case #PB_EventType_MouseLeave ; Wenn maus das Gadget verlaesst
If StartDrawing(CanvasOutput(Gadget))
If IsImage(Pictures(Gadget,0))
DrawImage(ImageID(Pictures(Gadget,0)), 0, 0) ; soll bild 0 gezeichnet werden
EndIf
StopDrawing()
EndIf
Case #PB_EventType_LeftButtonDown ; Wenn der linke Mausbutton gedrückt wird
Select Gadget
Case #Btn_Exit
End ; Soll beim Exit button ende sein
Case #Btn_Minimize
ShowWindow_(WindowID(0), #SW_MINIMIZE) ; Soll beim Minimize Button das fenster in die Taskleiste
EndSelect
EndSelect
EndProcedure
Define Event
OpenWindow(0, 0, 0, 800, 600, "Test", #PB_Window_ScreenCentered|#PB_Window_BorderLess) ; Fenster öffnen
; Gadgets erstellen
CanvasGadget(#Btn_Minimize, 22, 1, 29, 14)
CanvasGadget(#Btn_Exit, 51, 1, 47, 18)
; Eventverarbeitung zuweisen
BindGadgetEvent(#Btn_Minimize, @CanvasButton_Events())
BindGadgetEvent(#Btn_Exit, @CanvasButton_Events())
; Hier kurz das Event #PB_EventType_MouseLeave erzeugen, damit das richtige bild zu sehen ist
PostEvent(#PB_Event_Gadget, 0, #Btn_Exit, #PB_EventType_MouseLeave)
PostEvent(#PB_Event_Gadget, 0, #Btn_Minimize, #PB_EventType_MouseLeave)
Repeat
Event = WaitWindowEvent()
Select Event
Case #WM_LBUTTONDOWN ; Fenster mit Linkem Mausbutton bewegen
SendMessage_(WindowID(0),#WM_NCLBUTTONDOWN, #HTCAPTION,0)
EndSelect
ForEver