Seite 1 von 1

Fenster bewegen II mit nur einen Klick

Verfasst: 18.04.2005 23:37
von rayman1970

Code: Alles auswählen

; ************** Fenster bewegen II / Code 2005 by RayMan1970 **************

OpenWindow(0,0,0,222,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Fenster bewegen II") And CreateGadgetList(WindowID(0)) 

Repeat 
  Event = WaitWindowEvent() 
  

;{ ----------- Linke Maustaste gedrückt Fenster bewegen -------------
maus_auf_fenster = 0 
If GetAsyncKeyState_(#VK_LBUTTON)  > 0 
     If WindowMouseX() > -1   
          If WindowMouseY() > -1 
               maus_auf_fenster = 1
          EndIf
     EndIf
EndIf ;} ------------------------------------------------------------

;{ ----------- Neue Fenster Position setzen -------------
If maus_auf_fenster = 1 
     X = WindowMouseX()-PositionX 
     Y = WindowMouseY()-PositionY 
     MoveWindow(WindowX()+X,WindowY()+Y) 
EndIf ;} ------------------------------------------------

;{ ----------- Neue Fenster Position ermitteln ---------
If maus_auf_fenster = 0 
  CLICDROIT = 1 - CLICDROIT 
     If CLICDROIT 
          PositionX = WindowMouseX() 
          PositionY = WindowMouseY() 
     EndIf 
EndIf ;} -----------------------------------------------
  
  
Until Event = #PB_EventCloseWindow 

End 

Verfasst: 19.04.2005 04:42
von Donald
Hi rayman1970,

nette Idee, aber selbst beim Klick auf ein Gadget bewegt sich Fenster.
Warum machste das nicht mit CallBack und dann nur Move wenn unter
der Maus frei ist, also kein Gadget oder sonst etwas mit Funktion

Verfasst: 19.04.2005 09:53
von dige
So gehts auch einfacher und man verliert das Fenster nicht bei schnellen
Mausbewegungen:

Code: Alles auswählen

; MoveWindow, DiGe 04/2004
OpenWindow(0,0,0,200,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Ins Fenster klicken")

Repeat
  Event = WaitWindowEvent()

  maus_auf_fenster = 0
  If GetAsyncKeyState_(#VK_LBUTTON)  > 0
    SetCursor_( LoadCursor_( #Null, #IDC_SIZEALL	))
    SendMessage_( WindowID(), $112, $F012, 0)
    ReleaseCapture_()
  EndIf
 
Until Event = #PB_EventCloseWindow

Verfasst: 19.04.2005 16:41
von Ynnus
Eine Message-Konstante als Hex-Wert zu senden, viel umständlicher gehts wohl kaum, oder? Wofür werden denn die Codes hier gepostet? Dann kann man die Konstanten auch verwenden. Wer jetzt wissen will welche Message da gesendet wird, darf sogesehen alle Messages debuggen und die Werte vergleichen... Keinesfalls Vorbildliche Methode. :roll:

Verfasst: 19.04.2005 17:12
von NicTheQuick
Viel sauberer geht das sowieso nur mit einem Callback. :wink:

Code: Alles auswählen

Global Win_Main_Close.l, Win_Main.l
Win_Main_Close = #False

Procedure WindowCallback(hWindow.l, Message.l, wParam.l, lParam.l)
  Protected Result.l
  
  Result = #PB_ProcessPureBasicEvents
  
  Select Message
    
    Case #WM_LBUTTONDOWN  ;Wenn die linke Maustaste gedrückt ist
      ReleaseCapture_()
      SendMessage_(hWindow, #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
      
    Case #WM_KEYDOWN      ;Wenn eine Taste gedrückt ist
      Select wParam
        
        Case #VK_ESCAPE   ;ESC gedrückt
          Win_Main_Close = #True
          
      EndSelect
      
  EndSelect
  
  ProcedureReturn Result
EndProcedure

Win_Main = OpenWindow(#PB_Any, 0, 0, 200, 100, #PB_Window_ScreenCentered | #PB_Window_BorderLess, "PB Borderless")
If Win_Main
  SetWindowCallback(@WindowCallback())
  Repeat
    WaitWindowEvent()
  Until Win_Main_Close
  CloseWindow(Win_Main)
EndIf

Verfasst: 26.03.2006 09:32
von real
Das funktioniert nicht, wenn ich ein ImageGadget auf die volle Größe des Fensters skaliere. :(

Code: Alles auswählen

Global Win_Main_Close.l, Win_Main.l 
Win_Main_Close = #False 

Procedure WindowCallback(hWindow.l, Message.l, wParam.l, lParam.l) 
  Protected Result.l 
  Result = #PB_ProcessPureBasicEvents 
  Select Message 
    Case #WM_LBUTTONDOWN  ;Wenn die linke Maustaste gedrückt ist 
      ReleaseCapture_() 
      SendMessage_(hWindow, #WM_NCLBUTTONDOWN, #HTCAPTION, 0) 
    Case #WM_KEYDOWN      ;Wenn eine Taste gedrückt ist 
      Select wParam 
        Case #VK_ESCAPE   ;ESC gedrückt 
          Win_Main_Close = #True 
      EndSelect 
  EndSelect 
  
  ProcedureReturn Result 
EndProcedure 

Win_Main = OpenWindow(#PB_Any, 0, 0, 50, 50, "PB Borderless", #PB_Window_ScreenCentered | #PB_Window_BorderLess) 
If Win_Main 
  CreateGadgetList (WindowID(Win_Main))
  ImageGadget (0,0,0,50,50,CatchImage(0,?Window))

  SetWindowCallback(@WindowCallback()) 
  Repeat 
    WaitWindowEvent() 
  Until Win_Main_Close 
  CloseWindow(Win_Main) 
EndIf

DataSection
  Window: IncludeBinary "logo.bmp"
EndDataSection
Das Bitmap zum Test könnt bekommt ihr hier.

Verfasst: 26.03.2006 14:07
von Donald
Hi real,

Code: Alles auswählen

ImageGadget (0,0,0,50,50,CatchImage(0,?Window))
DisableGadget(0,1)
wenn Du DisableGadget einfügst geht es.

Verfasst: 26.03.2006 18:04
von real
Cool... Danke :D