garfield9992003 hat geschrieben:Nun sollte diese Box sich optisch hervorheben, wie z.B. schwarz/weiss blinken (fade) oder animiert mit schwarz-weissen Linien.
Hier mal ein altes Beispiel von mir, Window Selector.pb:
Code: Alles auswählen
;
; by Danilo, 24.11.2003 - german forum
;
Procedure OnMouseSelection(x,y,width,height)
Debug "-----"
Debug "Selected:"
Debug "X : "+Str(x)
Debug "Y : "+Str(y)
Debug "Width : "+Str(width)
Debug "Height: "+Str(height)
EndProcedure
Procedure DrawMouseSelector(hWnd)
Shared WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX
Shared WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY
Shared WindowProc_MouseSelectRect.RECT
If WindowProc_MouseSelectStartX > WindowProc_MouseSelectLastX
WindowProc_MouseSelectRect\left = WindowProc_MouseSelectLastX
WindowProc_MouseSelectRect\right = WindowProc_MouseSelectStartX
Else
WindowProc_MouseSelectRect\left = WindowProc_MouseSelectStartX
WindowProc_MouseSelectRect\right = WindowProc_MouseSelectLastX
EndIf
If WindowProc_MouseSelectStartY > WindowProc_MouseSelectLastY
WindowProc_MouseSelectRect\top = WindowProc_MouseSelectLastY
WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectStartY
Else
WindowProc_MouseSelectRect\top = WindowProc_MouseSelectStartY
WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectLastY
EndIf
hDC = GetDC_(hWnd)
DrawFocusRect_(hDC,@WindowProc_MouseSelectRect)
ReleaseDC_(hWnd,hDC)
;UpdateWindow_(hWnd) ; Win9x fix?
EndProcedure
Procedure WindowProc(hWnd,Msg,wParam,lParam)
Shared WindowProc_MouseSelect
Shared WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX
Shared WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY
Shared WindowProc_MouseSelectRect.RECT
Select Msg
Case #WM_LBUTTONDOWN
WindowProc_MouseSelect = 1
WindowProc_MouseSelectStartX = lParam&$FFFF
WindowProc_MouseSelectStartY = (lParam>>16)&$FFFF
GetClientRect_(hWnd,winrect.RECT)
MapWindowPoints_(hWnd,0,winrect,2)
ClipCursor_(winrect)
Case #WM_LBUTTONUP
If WindowProc_MouseSelect > 1
DrawMouseSelector(hWnd)
If WindowProc_MouseSelectRect\left <> WindowProc_MouseSelectRect\right And WindowProc_MouseSelectRect\top <> WindowProc_MouseSelectRect\bottom
OnMouseSelection(WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\top,WindowProc_MouseSelectRect\right-WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\bottom-WindowProc_MouseSelectRect\top)
SetCapture_(0)
EndIf
EndIf
ClipCursor_(0)
WindowProc_MouseSelect = 0
Case #WM_MOUSEMOVE
If WindowProc_MouseSelect > 0 And wParam & #MK_LBUTTON
If WindowProc_MouseSelect > 1
DrawMouseSelector(hWnd)
Else
WindowProc_MouseSelect + 1
EndIf
WindowProc_MouseSelectLastX = lParam&$FFFF
WindowProc_MouseSelectLastY = (lParam>>16)&$FFFF
DrawMouseSelector(hWnd)
SetCapture_(hWnd)
EndIf
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(0,0,0,400,400,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible,"Mega Mouse Selector")
SetWindowCallback(@WindowProc())
HideWindow(0,0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Und hier das ganze schnell an ImageGadgets angepasst
und bissl verändert:
Code: Alles auswählen
;
; modified by Danilo, 27.04.2005 - german forum
;
; original version: Window Selector.pb
; (by Danilo, 24.11.2003 - german forum)
;
Global gadget1, gadget2, gadget3, gadget4
Procedure OnMouseSelection(hWnd,x,y,width,height)
Select hWnd
Case GadgetID(gadget1) : Gadget$ = "gadget 1"
Case GadgetID(gadget2) : Gadget$ = "gadget 2"
Case GadgetID(gadget3) : Gadget$ = "gadget 3"
Case GadgetID(gadget4) : Gadget$ = "gadget 4"
Default: Gadget$ = "unbekannt"
EndSelect
Debug "-----"
Debug "Selected:"
Debug "hWnd : "+Gadget$
Debug "X : "+Str(x)
Debug "Y : "+Str(y)
Debug "Width : "+Str(width)
Debug "Height: "+Str(height)
EndProcedure
Procedure DrawMouseSelector(hWnd)
Shared WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX
Shared WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY
Shared WindowProc_MouseSelectRect.RECT
If WindowProc_MouseSelectStartX > WindowProc_MouseSelectLastX
WindowProc_MouseSelectRect\left = WindowProc_MouseSelectLastX
WindowProc_MouseSelectRect\right = WindowProc_MouseSelectStartX
Else
WindowProc_MouseSelectRect\left = WindowProc_MouseSelectStartX
WindowProc_MouseSelectRect\right = WindowProc_MouseSelectLastX
EndIf
If WindowProc_MouseSelectStartY > WindowProc_MouseSelectLastY
WindowProc_MouseSelectRect\top = WindowProc_MouseSelectLastY
WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectStartY
Else
WindowProc_MouseSelectRect\top = WindowProc_MouseSelectStartY
WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectLastY
EndIf
hDC = GetDC_(hWnd)
InvertRect_(hDC,@WindowProc_MouseSelectRect)
;DrawFocusRect_(hDC,@WindowProc_MouseSelectRect)
ReleaseDC_(hWnd,hDC)
;UpdateWindow_(hWnd) ; Win9x fix?
EndProcedure
Procedure WindowProc(hWnd,Msg,wParam,lParam)
Shared WindowProc_MouseSelect
Shared WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX
Shared WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY
Shared WindowProc_MouseSelectRect.RECT
Select Msg
Case #WM_LBUTTONDOWN
WindowProc_MouseSelect = 1
WindowProc_MouseSelectStartX = lParam&$FFFF
WindowProc_MouseSelectStartY = (lParam>>16)&$FFFF
GetClientRect_(hWnd,winrect.RECT)
MapWindowPoints_(hWnd,0,winrect,2)
ClipCursor_(winrect)
ProcedureReturn 0
Case #WM_LBUTTONUP
If WindowProc_MouseSelect > 1
DrawMouseSelector(hWnd)
If WindowProc_MouseSelectRect\left <> WindowProc_MouseSelectRect\right And WindowProc_MouseSelectRect\top <> WindowProc_MouseSelectRect\bottom
OnMouseSelection(hWnd,WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\top,WindowProc_MouseSelectRect\right-WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\bottom-WindowProc_MouseSelectRect\top)
SetCapture_(0)
EndIf
EndIf
ClipCursor_(0)
WindowProc_MouseSelect = 0
ProcedureReturn 0
Case #WM_MOUSEMOVE
If WindowProc_MouseSelect > 0 And wParam & #MK_LBUTTON
If WindowProc_MouseSelect > 1
DrawMouseSelector(hWnd)
Else
WindowProc_MouseSelect + 1
EndIf
WindowProc_MouseSelectLastX = lParam&$FFFF
WindowProc_MouseSelectLastY = (lParam>>16)&$FFFF
DrawMouseSelector(hWnd)
SetCapture_(hWnd)
EndIf
ProcedureReturn 0
EndSelect
old=GetWindowLong_(hWnd,#GWL_USERDATA)
If old
ProcedureReturn CallWindowProc_(old,hWnd,Msg,wParam,lParam)
Else
DefWindowProc_(hWnd,Msg,wParam,lParam)
EndIf
EndProcedure
Procedure SelectorImage(x,y,w,h,hImage)
img = ImageGadget(#PB_Any,x,y,w,h,hImage)
If img
old = SetWindowLong_(GadgetID(img),#GWL_WNDPROC,@WindowProc())
SetWindowLong_(GadgetID(img),#GWL_USERDATA,old)
EndIf
ProcedureReturn img
EndProcedure
OpenWindow(0,0,0,630,630,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible,"Mega Mouse Selector")
If CreateImage(1,300,300)=0
MessageRequester("ERROR","Cant create image"):End
EndIf
If StartDrawing(ImageOutput())
For y = 0 To 299 Step 2
For x = 0 To 299 Step 2
Plot(x,y,Random($FFFFFF))
Next x
Next y
StopDrawing()
EndIf
CreateGadgetList(WindowID())
gadget1 = SelectorImage( 10, 10,300,300,ImageID())
gadget2 = SelectorImage(320, 10,300,300,ImageID())
gadget3 = SelectorImage( 10,320,300,300,ImageID())
gadget4 = SelectorImage(320,320,300,300,ImageID())
HideWindow(0,0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
In der Prozedur 'DrawMouseSelector' brauchst Du nur die
letzten 4 Zeilen anpassen. Dort kannst Du dann auch einen
Rahmen schwarz/weiß hinmalen - halt was Du willst.
Vielleicht hilft es ja als kleiner Anfang...