Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
rayman1970
Beiträge: 89 Registriert: 01.09.2004 16:10
Wohnort: Troisdorf bei Bonn
Kontaktdaten:
Beitrag
von rayman1970 » 18.04.2005 23:37
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
Donald
Beiträge: 307 Registriert: 03.01.2005 02:21
Wohnort: Marl
Beitrag
von Donald » 19.04.2005 04:42
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
dige
Beiträge: 1241 Registriert: 08.09.2004 08:53
Beitrag
von dige » 19.04.2005 09:53
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
"Papa, ich laufe schneller - dann ist es nicht so weit."
Ynnus
Beiträge: 855 Registriert: 29.08.2004 01:37
Kontaktdaten:
Beitrag
von Ynnus » 19.04.2005 16:41
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.
NicTheQuick
Ein Admin
Beiträge: 8812 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
Beitrag
von NicTheQuick » 19.04.2005 17:12
Viel sauberer geht das sowieso nur mit einem Callback.
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
real
Beiträge: 468 Registriert: 05.10.2004 14:43
Beitrag
von real » 26.03.2006 09:32
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 .
Donald
Beiträge: 307 Registriert: 03.01.2005 02:21
Wohnort: Marl
Beitrag
von Donald » 26.03.2006 14:07
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.
real
Beiträge: 468 Registriert: 05.10.2004 14:43
Beitrag
von real » 26.03.2006 18:04
Cool... Danke