Fenster verschieben über Canvas LeftButtonDown

Anfängerfragen zum Programmieren mit PureBasic.
azzido22
Beiträge: 2
Registriert: 04.07.2013 12:21

Fenster verschieben über Canvas LeftButtonDown

Beitrag 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


Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Fenster verschieben über Canvas LeftButtonDown

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Fenster verschieben über Canvas LeftButtonDown

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Fenster verschieben über Canvas LeftButtonDown

Beitrag 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?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Fenster verschieben über Canvas LeftButtonDown

Beitrag 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:
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Fenster verschieben über Canvas LeftButtonDown

Beitrag von RSBasic »

Komisch, dass es bei dir unter Linux anders funktioniert. Scheint ein Bug zu sein.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Fenster verschieben über Canvas LeftButtonDown

Beitrag 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
azzido22
Beiträge: 2
Registriert: 04.07.2013 12:21

Re: Fenster verschieben über Canvas LeftButtonDown

Beitrag von azzido22 »

Hey :) - vielen Dank - Super Sache.
Antworten