Seite 1 von 1

Fenster verschieben über Canvas LeftButtonDown

Verfasst: 04.07.2013 12:28
von azzido22
Hallo zusammen,
ich bitte mir ein wenig unter die Arme zu greifen.

Ich versuche aktuell über einen Maus-Klick auf ein Canvas Gadget ein Fenster zu verschieben - was so auch ganz gut schon funktioniert. Unschön ist, dass sich beim verschieben des Fenster der Maus-Cursor an Position 0,0 des Fensters verschiebt und ich nicht weiß, wie ich das unterbinden kann.

Schön währe, wenn sich die Maus-Zeiger-Position sich nicht beim verschieben verändern würde.

Wer kann mir helfen?

Code: Alles auswählen


;EnableExplicit

UsePNGImageDecoder() 
 
;- Enumerationen
Enumeration
  #Window_Main
  #Image_Window_Main_Button_MainMenu
  #Canvas_Window_Main_MainMenu
  #Canvas_Window_Main_MouseMover
EndEnumeration

;- Variablen
Define Window_Event, Quit,x,y

;- Farben
Define Theme_Color_Window_Background = RGB(41,41,41)

;- Grafiken




;- Hauptfenster
OpenWindow(#Window_Main, 0, 0, 800, 600, "Test", #PB_Window_BorderLess | #WS_SIZEBOX | #PB_Window_ScreenCentered)
SetWindowColor(#Window_Main,Theme_Color_Window_Background)
;CanvasGadget(#Canvas_Window_Main_MainMenu, 0, 0, 52, 52)  
CanvasGadget(#Canvas_Window_Main_MouseMover,100,100,200,200)

;StartDrawing(CanvasOutput(#Canvas_Window_Main_MainMenu))
;DrawImage(ImageID(#Image_Window_Main_Button_MainMenu), 0, 0, 52,52) 
;StopDrawing()



Repeat
  
  Window_Event = WaitWindowEvent()
  
  Select  Window_Event
    Case  #PB_Event_Gadget
      Select EventGadget()
          
        Case #Canvas_Window_Main_MouseMover ; Fenster Bewegen
         If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(#Canvas_Window_Main_MouseMover, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
            GetCursorPos_(Coords.POINT)

            ResizeWindow(#Window_Main,Coords\x+WindowMouseX(#Window_Main),Coords\y+WindowMouseY(#Window_Main),#PB_Ignore,#PB_Ignore)  
           
          EndIf 
           
      EndSelect      

  EndSelect
  
Until Quit = 1
End



Re: Fenster verschieben über Canvas LeftButtonDown

Verfasst: 04.07.2013 13:06
von RSBasic
Willst du nur innerhalb des Canvas-Bereichs das Fenster verschieben oder überall auf deinem Fenster?
http://www.rsbasic.de/aktualisierung/wi ... bewegen.pb

Wenn du nur innerhalb eines Bereichs verschieben möchtest, brauchst du nur eine Mauspositionsabfrage hinzufügen.

Re: Fenster verschieben über Canvas LeftButtonDown

Verfasst: 04.07.2013 13:10
von NicTheQuick
Oder man macht das ohne API-Gedöns. Ich hab nur noch nicht heraus gefunden, warum ich da mit 2 multiplizieren muss.

Code: Alles auswählen

EnableExplicit

UsePNGImageDecoder()

;- Enumerationen
Enumeration
	#Window_Main
	#Image_Window_Main_Button_MainMenu
	#Canvas_Window_Main_MainMenu
	#Canvas_Window_Main_MouseMover
EndEnumeration

;- Variablen
Define Window_Event, Quit,x,y

;- Farben
Define Theme_Color_Window_Background = RGB(41,41,41)

;- Grafiken




;- Hauptfenster
OpenWindow(#Window_Main, 0, 0, 800, 600, "Test", #PB_Window_BorderLess | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
SetWindowColor(#Window_Main,Theme_Color_Window_Background)
;CanvasGadget(#Canvas_Window_Main_MainMenu, 0, 0, 52, 52) 
CanvasGadget(#Canvas_Window_Main_MouseMover,100,100,200,200)

;StartDrawing(CanvasOutput(#Canvas_Window_Main_MainMenu))
;DrawImage(ImageID(#Image_Window_Main_Button_MainMenu), 0, 0, 52,52)
;StopDrawing()

Define buttonPushed.i = #False
Define oldPosX.i, oldPosY.i

Repeat
	
	Window_Event = WaitWindowEvent()
	
	Select  Window_Event
		Case  #PB_Event_Gadget
			Select EventGadget()
					
				Case #Canvas_Window_Main_MouseMover ; Fenster Bewegen
					If EventType() = #PB_EventType_LeftButtonDown
						buttonPushed = #True
					ElseIf EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(#Canvas_Window_Main_MouseMover, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
						If buttonPushed
							ResizeWindow(#Window_Main, WindowX(#Window_Main) + 2 * (DesktopMouseX() - oldPosX), WindowY(#Window_Main) + 2 * (DesktopMouseY() - oldPosY), #PB_Ignore,#PB_Ignore)
						EndIf
					ElseIf EventType() = #PB_EventType_LeftButtonUp
						buttonPushed = #False
					EndIf
					oldPosX = DesktopMouseX()
					oldPosY = DesktopMouseY()
					
			EndSelect     
			
	EndSelect
	
Until Quit = 1
End

Re: Fenster verschieben über Canvas LeftButtonDown

Verfasst: 04.07.2013 13:12
von RSBasic
@NicTheQuick
Funktioniert aber nicht einwandfrei. Das Fenster bewegt sich schneller, als der Mauscursor.

\\Edit:
Ohne * 2 funktioniert es aber. Bei dir auf Linux ist es anders?

Re: Fenster verschieben über Canvas LeftButtonDown

Verfasst: 04.07.2013 13:14
von NicTheQuick
RSBasic hat geschrieben:@NicTheQuick
Funktioniert aber nicht einwandfrei. Das Fenster bewegt sich schneller, als der Mauscursor.
Dann liegt das wohl an dem "2 * " in Zeile 50. Aber wenn ich das bei mir weg lassen, dann bewegt sich das Fenster nur halb so schnell. :freak:

Re: Fenster verschieben über Canvas LeftButtonDown

Verfasst: 04.07.2013 13:15
von RSBasic
Komisch, dass es bei dir unter Linux anders funktioniert. Scheint ein Bug zu sein.

Re: Fenster verschieben über Canvas LeftButtonDown

Verfasst: 04.07.2013 13:20
von NicTheQuick
Hier noch eine Methode, die sicherer funktioniert:

Code: Alles auswählen

EnableExplicit

UsePNGImageDecoder()

;- Enumerationen
Enumeration
	#Window_Main
	#Image_Window_Main_Button_MainMenu
	#Canvas_Window_Main_MainMenu
	#Canvas_Window_Main_MouseMover
EndEnumeration

;- Variablen
Define Window_Event, Quit,x,y

;- Farben
Define Theme_Color_Window_Background = RGB(41,41,41)

;- Grafiken




;- Hauptfenster
OpenWindow(#Window_Main, 0, 0, 800, 600, "Test", #PB_Window_BorderLess | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
SetWindowColor(#Window_Main,Theme_Color_Window_Background)
;CanvasGadget(#Canvas_Window_Main_MainMenu, 0, 0, 52, 52) 
CanvasGadget(#Canvas_Window_Main_MouseMover,100,100,200,200)

;StartDrawing(CanvasOutput(#Canvas_Window_Main_MainMenu))
;DrawImage(ImageID(#Image_Window_Main_Button_MainMenu), 0, 0, 52,52)
;StopDrawing()

Define buttonPushed.i = #False
Define oldPosX.i, oldPosY.i, oldWinX.i, oldWinY.i

Repeat
	
	Window_Event = WaitWindowEvent()
	
	Select  Window_Event
		Case  #PB_Event_Gadget
			Select EventGadget()
					
				Case #Canvas_Window_Main_MouseMover ; Fenster Bewegen
					If EventType() = #PB_EventType_LeftButtonDown
						oldPosX = DesktopMouseX()
						oldPosY = DesktopMouseY()
						oldWinX = WindowX(#Window_Main)
						oldWinY = WindowY(#Window_Main)
						buttonPushed = #True
					ElseIf EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(#Canvas_Window_Main_MouseMover, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
						If buttonPushed
							ResizeWindow(#Window_Main, oldWinX + (DesktopMouseX() - oldPosX), oldWinY + (DesktopMouseY() - oldPosY), #PB_Ignore,#PB_Ignore)
						EndIf
					ElseIf EventType() = #PB_EventType_LeftButtonUp
						buttonPushed = #False
					EndIf
					
			EndSelect     
			
	EndSelect
	
Until Quit = 1
End
RSBasic hat geschrieben:Komisch, dass es bei dir unter Linux anders funktioniert. Scheint ein Bug zu sein.
Gut möglich. Vielleicht sollte ich doch mal endlich die Beta testen. :D

Re: Fenster verschieben über Canvas LeftButtonDown

Verfasst: 04.07.2013 13:37
von azzido22
Hey :) - vielen Dank - Super Sache.