Mousefunktionen im Fenster abfragen...
Verfasst: 01.09.2005 10:14
Hallo wieder mal...
Folgendes Problem...
Ich bastel an einem Proggi , bei dem ich mittels der PBOL den
Skin-Effekt nutze. Dabei werden selbsterstellte Grafiken für die Buttons
verwendet. Nun möchte ich gerne einige Effekte auf die Buttons
anwenden, die da wären...
1. Wenn ich die Maus über eine Grafik (ImageGadget) bewege, soll sich
die Grafik ändern (Hoover-Effekt)
2. Wird die linke Maustaste über der Grafik gedrückt, soll sich die Grafik
ebenfalls ändern.. Allerdings soll noch keine Aktion ausgeführt werden.
3. Beim loslassen der Maustaste, soll ´wiederum die Grafik geändert
werden und eine Aktion soll ausgeführt werden.
Ich vermisse in PB die Möglichkeit der detailierten Mausabfrage wie z.B
in VB. Wie kann man denn in PB abfragen, welche Maustaste gerade
welchen Status hat usw...
Ich habe hier mal einen kleinen Ausschnitt aus dem Proggi abgelegt,
damit man sich eventuell besser in mein Prob reindenken kann.
Das ganze ist eigentlich nur eine kleine Übung, um die Möglichkeiten
von PB kennen zu lernen, aber man beißt sich ja gerne fest
Danke Euch...
p.s. Wen es interessiert, dem schicke ich auch gerne mal das gezippte
Projekt inkl. Grafiken usw...
Folgendes Problem...
Ich bastel an einem Proggi , bei dem ich mittels der PBOL den
Skin-Effekt nutze. Dabei werden selbsterstellte Grafiken für die Buttons
verwendet. Nun möchte ich gerne einige Effekte auf die Buttons
anwenden, die da wären...
1. Wenn ich die Maus über eine Grafik (ImageGadget) bewege, soll sich
die Grafik ändern (Hoover-Effekt)
2. Wird die linke Maustaste über der Grafik gedrückt, soll sich die Grafik
ebenfalls ändern.. Allerdings soll noch keine Aktion ausgeführt werden.
3. Beim loslassen der Maustaste, soll ´wiederum die Grafik geändert
werden und eine Aktion soll ausgeführt werden.
Ich vermisse in PB die Möglichkeit der detailierten Mausabfrage wie z.B
in VB. Wie kann man denn in PB abfragen, welche Maustaste gerade
welchen Status hat usw...
Ich habe hier mal einen kleinen Ausschnitt aus dem Proggi abgelegt,
damit man sich eventuell besser in mein Prob reindenken kann.
Code: Alles auswählen
Declare ViewSystemTime()
Declare IsMouseOver(wnd)
Enumeration
#WIN_0
;Variablen für den Zeichensatzen der 6x11 Pixel Zahlen
#F6X11_0
#F6X11_1
#F6X11_2
#F6X11_3
#F6X11_4
#F6X11_5
#F6X11_6
#F6X11_7
#F6X11_8
#F6X11_9
;Variablen für den Zeichensatzen der 4x7 Pixel Zahlen
#F4X7_0
#F4X7_1
#F4X7_2
#F4X7_3
#F4X7_4
#F4X7_5
#F4X7_6
#F4X7_7
#F4X7_8
#F4X7_9
;Variablen für den "Close" Button (Default, Over, Press)
#BTN_CLOSE_0
#BTN_CLOSE_1
#BTN_CLOSE_2
;Variablen für die Image-Gadgets der Zeitanzeige
#IMG_1
#IMG_2
#IMG_3
#IMG_4
#IMG_5
#IMG_6
#IMG_7
EndEnumeration
;Ab mit den Grafiken in den Speicher...
CatchImage(#F6X11_0, ?FNT6X11_0)
CatchImage(#F6X11_1, ?FNT6X11_1)
CatchImage(#F6X11_2, ?FNT6X11_2)
CatchImage(#F6X11_3, ?FNT6X11_3)
CatchImage(#F6X11_4, ?FNT6X11_4)
CatchImage(#F6X11_5, ?FNT6X11_5)
CatchImage(#F6X11_6, ?FNT6X11_6)
CatchImage(#F6X11_7, ?FNT6X11_7)
CatchImage(#F6X11_8, ?FNT6X11_8)
CatchImage(#F6X11_9, ?FNT6X11_9)
CatchImage(#F4X7_0, ?FNT4X7_0)
CatchImage(#F4X7_1, ?FNT4X7_1)
CatchImage(#F4X7_2, ?FNT4X7_2)
CatchImage(#F4X7_3, ?FNT4X7_3)
CatchImage(#F4X7_4, ?FNT4X7_4)
CatchImage(#F4X7_5, ?FNT4X7_5)
CatchImage(#F4X7_6, ?FNT4X7_6)
CatchImage(#F4X7_7, ?FNT4X7_7)
CatchImage(#F4X7_8, ?FNT4X7_8)
CatchImage(#F4X7_9, ?FNT4X7_9)
CatchImage(#BTN_CLOSE_0, ?BTNCLOSE_0)
CatchImage(#BTN_CLOSE_1, ?BTNCLOSE_1)
CatchImage(#BTN_CLOSE_2, ?BTNCLOSE_2)
If OpenWindow(#WIN_0,1, 1, 300, 24,#PB_Window_BorderLess|#WS_POPUP,"BarClock")
;Fensterskin im Hintergrund laden und anzeigen
SkinWin(WindowID(),CatchImage(0,?BGROUND))
If CreateGadgetList(WindowID(#WIN_0))
;Images der Stundenanzeigen setzen
ImageGadget(#IMG_0,229,6,6,11,UseImage(#F6X11_0))
ImageGadget(#IMG_1,236,6,6,11,UseImage(#F6X11_0))
;Images der Minutenanzeige setzen
ImageGadget(#IMG_2,247,6,6,11,UseImage(#F6X11_0))
ImageGadget(#IMG_3,254,6,6,11,UseImage(#F6X11_0))
;Images der Sekundenanzeige setzen
ImageGadget(#IMG_4,265,10,6,11,UseImage(#F4X7_0))
ImageGadget(#IMG_5,270,10,6,11,UseImage(#F4X7_0))
;Images des Close-Buttons setzen
ImageGadget(#IMG_6,281,4,14,14,UseImage(#BTN_CLOSE_0))
EndIf
EndIf
HideWindow(0,0)
ViewSystemTime()
StartTimer(0,1000,@ViewSystemTime())
Repeat
Select WaitWindowEvent()
Case #WM_LBUTTONDOWN
;Bewegen des Fensters auch ohne Titelleiste...
SendMessage_(WindowID(),#WM_NCLBUTTONDOWN, #HTCAPTION,0)
Case #PB_Event_Gadget
Select EventGadgetID()
Case #IMG_6 ;Close-Button (ImageGadget) abfragen
;Wenn links gedrückt - Grafik ändern in
; ==> SetGadgetState(#IMG_6,UseImage(#BTN_CLOSE_2))
;Wenn links wieder losgelassen wird - Grafik ändern in
; ==> SetGadgetState(#IMG_6,UseImage(#BTN_CLOSE_0))
;und das Programm beenden.
End
EndSelect
Default
If IsMouseOver(GadgetID(#IMG_6))
SetGadgetState(#IMG_6,UseImage(#BTN_CLOSE_1))
Else
SetGadgetState(#IMG_6,UseImage(#BTN_CLOSE_0))
EndIf
EndSelect
Until EventID = #PB_EventCloseWindow
End
Procedure ViewSystemTime()
sTime.s=FormatDate("%hh:%ii:%ss", Date())
SetGadgetState(#IMG_0,UseImage(Val(Left(sTime.s,1))+1))
SetGadgetState(#IMG_1,UseImage(Val(Mid(sTime.s,2,1))+1))
SetGadgetState(#IMG_2,UseImage(Val(Mid(sTime.s,4,1))+1))
SetGadgetState(#IMG_3,UseImage(Val(Mid(sTime.s,5,1))+1))
SetGadgetState(#IMG_4,UseImage(Val(Mid(sTime.s,7,1))+11))
SetGadgetState(#IMG_5,UseImage(Val(Right(sTime.s,1))+11))
EndProcedure
;Prozedur zur Bestimmung, ob die Maus über einem Object ist
Procedure IsMouseOver(wnd)
GetWindowRect_(wnd,re.RECT)
re\Left = re\Left
re\top = re\top
re\right = re\right
re\bottom = re\bottom
GetCursorPos_(pt.POINT)
Result = PtInRect_(re,pt\x,pt\y)
ProcedureReturn Result
EndProcedure
DataSection
;Hintergrundgrafik für den Skin-Effekt
BGROUND: IncludeBinary "back0.bmp"
;3 Grafiken für den "Close" Button
BTNCLOSE_0: IncludeBinary "btn_close0.bmp" ;Default)
BTNCLOSE_1: IncludeBinary "btn_close1.bmp" ;Over
BTNCLOSE_2: IncludeBinary "btn_close2.bmp" ;Pressed
;Zeichensatz der Zahlen für Stunden und Minuten
FNT6X11_0: IncludeBinary "font6x11_0.bmp"
FNT6X11_1: IncludeBinary "font6x11_1.bmp"
FNT6X11_2: IncludeBinary "font6x11_2.bmp"
FNT6X11_3: IncludeBinary "font6x11_3.bmp"
FNT6X11_4: IncludeBinary "font6x11_4.bmp"
FNT6X11_5: IncludeBinary "font6x11_5.bmp"
FNT6X11_6: IncludeBinary "font6x11_6.bmp"
FNT6X11_7: IncludeBinary "font6x11_7.bmp"
FNT6X11_8: IncludeBinary "font6x11_8.bmp"
FNT6X11_9: IncludeBinary "font6x11_9.bmp"
;Zeichensatz der Zahlen für die Sekunden
FNT4X7_0: IncludeBinary "font4x7_0.bmp"
FNT4X7_1: IncludeBinary "font4x7_1.bmp"
FNT4X7_2: IncludeBinary "font4x7_2.bmp"
FNT4X7_3: IncludeBinary "font4x7_3.bmp"
FNT4X7_4: IncludeBinary "font4x7_4.bmp"
FNT4X7_5: IncludeBinary "font4x7_5.bmp"
FNT4X7_6: IncludeBinary "font4x7_6.bmp"
FNT4X7_7: IncludeBinary "font4x7_7.bmp"
FNT4X7_8: IncludeBinary "font4x7_8.bmp"
FNT4X7_9: IncludeBinary "font4x7_9.bmp"
EndDataSection
von PB kennen zu lernen, aber man beißt sich ja gerne fest

Danke Euch...
p.s. Wen es interessiert, dem schicke ich auch gerne mal das gezippte
Projekt inkl. Grafiken usw...