das wäre kein Problem, Ich habe mein Code auch überarbeitet und in richtung von Man-in-Black seinen Code umgestellt.
Dabei hatte Ich auch die WindowsBaund Procedure erweitert auf Max-werte des Fensters was alles super Funzt.
Bis auf die tatsache das wenn Ich beim vergrößern des Fenster´s, mit der Maus auserhalb des Fenster bei überschreiten der Max-werte liege, was ja normal ist.
Und Die Maustaste dann loslasse, wird dieser Event nicht Registriet.
deshalb die Frage ob es noch andere Metoden gibt den MausUp unabhängig vom Fenster abzufragen.
Code: Alles auswählen
EnableExplicit
Enumeration
#closeButton
#TitleSide
#ResizeButton
#My_Window
EndEnumeration
CreateImage(#TitleSide,1900,20,32,0)
If StartDrawing(ImageOutput(#TitleSide))
Box(0,0,1900,20,$DEBC88)
Box(2,2,1900,16,$9E6A33)
Box(2,18,1900,2,$3F2633)
StopDrawing()
EndIf
CreateImage(#closeButton,20,20,32,RGB(255,0,0))
If StartDrawing(ImageOutput(#closeButton))
Box(0,0,20,20,$3F2633)
Box(2,2,16,16,$9E6A33)
LineXY(2,2,16,16,$DABF96)
LineXY(2,16,16,2,$DABF96)
StopDrawing()
EndIf
CreateImage(#ResizeButton,20,20,32,RGB(0,255,255))
If StartDrawing(ImageOutput(#ResizeButton))
Box(0,0,20,20,$DABF96)
LineXY(0,19,20,19,$A5562A)
LineXY(0,20,20,0,$A5562A)
LineXY(19,0,19,20,$A5562A)
FillArea(15,15,$A5562A,$B67653)
StopDrawing()
EndIf
Define Event.i,DmausX.i,DmausY.i,BackupMausX.i,BackupMausY.i,Resize.i,Drag.i,MinW.i=400,MinH.i=250,MaxW.i=800,MaxH=600,Mausklick.i
If OpenWindow(0, 200, 200, 400, 250, "",#PB_Window_BorderLess)
SetWindowColor(0, $DABF96)
TextGadget(0, 10, 30, 190, 16, "")
SetGadgetColor(0, #PB_Gadget_BackColor,$DABF96)
TextGadget(1, 10, 46, 190, 16, "")
SetGadgetColor(1, #PB_Gadget_BackColor,$DABF96)
ImageGadget(2,0,0,200,20,ImageID(#TitleSide))
ResizeGadget(2,#PB_Ignore,#PB_Ignore,WindowWidth(0)-20,#PB_Ignore)
ImageGadget(3,380,0,20,20,ImageID(#closeButton))
ImageGadget(4,380,230,20,20,ImageID(#ResizeButton))
EndIf
;Maus über ein rechteckigen Bereich abfragen
Procedure MausOver(Mx,My,x,y,w,h)
If Mx>x And Mx< x+w And My>y And My<y+h
ProcedureReturn #True
EndIf
EndProcedure
;Id=WindowID my/mx=MausX/MausY,w/h=Minmale Breite/Höhe mw/mh=Maximale Breite/Höhe
Procedure WindowsBound(id,mx,my,w,h,mw,mh)
If mx<w And my>h And my<mh
ResizeWindow(id,#PB_Ignore,#PB_Ignore, w, my)
ElseIf mx>w And mx<mw And my<h
ResizeWindow(id,#PB_Ignore,#PB_Ignore,mx,h)
ElseIf mx>w And mx<mw And my>mh
ResizeWindow(id,#PB_Ignore,#PB_Ignore, mx, mh)
ElseIf mx>mw And my>h And my<mh
ResizeWindow(id,#PB_Ignore,#PB_Ignore, mw, my)
ElseIf mx>w And mx<mw And my>h And my<mh
ResizeWindow(id,#PB_Ignore,#PB_Ignore, mx, my)
ElseIf mx<w And my<h
ResizeWindow(id,#PB_Ignore,#PB_Ignore, w,h)
EndIf
EndProcedure
;Bewegen des Window´s
Procedure WindowMove()
Shared DmausX,DmausY,BackupMausX,BackupMausY
ResizeWindow(0, DmausX-BackupMausX, DmausY-BackupMausY, #PB_Ignore , #PB_Ignore )
EndProcedure
;Resizen des Window´s
Procedure WindowResize()
Shared DmausX,DmausY,BackupMausX,BackupMausY,MinW,MinH,MaxW,MaxH
WindowsBound(0,DmausX-BackupMausX,DmausY-BackupMausY,MinW,MinH,MaxW,MaxH)
ResizeGadget(2,#PB_Ignore,#PB_Ignore,WindowWidth(0)-20,#PB_Ignore)
ResizeGadget(3,WindowWidth(0)-20,0,#PB_Ignore,#PB_Ignore)
ResizeGadget(4,WindowWidth(0)-20,WindowHeight(0)-20,#PB_Ignore,#PB_Ignore)
EndProcedure
;Mauskoordinten abfragen
Procedure MausKoordinaten()
Shared DmausX,DmausY
DmausX=DesktopMouseX()
DmausY=DesktopMouseY()
EndProcedure
;Startoptionen für Window bewegen festlegen
Procedure startmove()
Shared drag,DmausX,DmausY,BackupMausX,BackupMausY
Drag=#True
BackupMausX=DmausX-WindowX(0)
BackupMausY=DmausY-WindowY(0)
EndProcedure
;Startoptionen für Window Resizen festlegen
Procedure startResize()
Shared Resize,DmausX,DmausY,BackupMausX,BackupMausY
Resize=#True
BackupMausX=DmausX-WindowWidth(0)
BackupMausY=DmausY-WindowHeight(0)
EndProcedure
;Window Schließen
Procedure WindowClose()
End
EndProcedure
;Event´s an die zugehörigen Proceduren Binden
BindGadgetEvent(2,@startmove() ,#PB_EventType_LeftClick)
BindGadgetEvent(3,@WindowClose(),#PB_EventType_LeftClick)
BindGadgetEvent(4,@startResize(),#PB_EventType_LeftClick)
Repeat
;absolute Event holen
Event = WaitWindowEvent()
;absoluten Koordinaten der Maus
MausKoordinaten()
SetGadgetText(0, "Desktop Maus-Position: "+Str(DesktopMouseX())+","+Str(DesktopMouseY()))
;check auf Drag oder Resize Activ
If Drag=#True Or Resize=#True
;check auf linke Maustaste
If event=#WM_LBUTTONDOWN
Repeat
;Mauskoordinaten holen
MausKoordinaten()
If event<>#WM_PAINT
If Resize=#True
WindowResize()
Else
Windowmove()
EndIf
EndIf
If event=#WM_MOUSEMOVE
SetGadgetText(0, "Desktop Maus-Position: "+Str(DesktopMouseX())+","+Str(DesktopMouseY()))
EndIf
;event abfangen
event = WindowEvent()
Until event=#WM_LBUTTONUP
Resize=#False : Drag=#False
EndIf
EndIf
Select event
Case #WM_LBUTTONDOWN
SetGadgetText(1,"linker Mausklick")
Case #WM_LBUTTONUP
SetGadgetText(1,"")
EndSelect
ForEver