Maus-Interaktion nach ResizeWindow() nicht möglich

Für allgemeine Fragen zur Programmierung mit PureBasic.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Maus-Interaktion nach ResizeWindow() nicht möglich

Beitrag von ccode_new »

@CloseScreen()

Es ist halt sehr schade das es kein ResizeScreen() gibt.

Hat hier jemand Win/Linux/MacOS - Api-Tipps !

Hier mal noch ein kleines Beispiel:

Code: Alles auswählen

; Mein kleiner fehlerhafter Maus-Menü-Test

UsePNGImageDecoder()

InitSprite() : InitMouse() : InitKeyboard()

Enumeration
#MWin
#CursorSprite
EndEnumeration

Structure WinPos
  x.i
  y.i
  h.i
  w.i
EndStructure

Global MWin.WinPos
MWin\x = 0
MWin\y = 0
MWin\w = 800
MWin\h = 600

Structure MPoint
  x.d
  y.d
EndStructure

Structure MText
  x.d
  y.d
  w.d
  h.d
  sel.i
  txt.s
EndStructure

Global Dim SelMenu.MText(2) 

Global CMouse.MPoint

Procedure.b OverMenu(*MousePos.MPoint, *SelMenu.MText)
  If ((*MousePos\x >= *SelMenu\x) And (*MousePos\x <= (*SelMenu\x + *SelMenu\w)) And (*MousePos\y >= *SelMenu\y) And (*MousePos\y <= *SelMenu\y + *SelMenu\h))
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

Procedure.b ScreenOpen()
  If OpenWindowedScreen(WindowID(#MWin),0,0,WindowWidth(#MWin),WindowHeight(#MWin),0,0,0)
    SetFrameRate(60)
    
    If Not CatchSprite(#CursorSprite, ?Cursor)
      End
    EndIf
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

Procedure ResizeScreen()
  CloseScreen() ;???
  ScreenOpen()
EndProcedure

Procedure.b DrawMenu()
  Protected Dim Text.s(2)
  SelMenu(0)\txt = "Auflösung 800 x 600 (4:3)"
  SelMenu(1)\txt = "Auflösung 1024 x 768 (4:3)"
  SelMenu(2)\txt = "Auflösung 1366 × 768 (16:9)" 
  
  If StartDrawing(ScreenOutput())
    For i = 0 To 2
      SelMenu(i)\w = TextWidth(SelMenu(i)\txt)
      SelMenu(i)\h = TextHeight(SelMenu(i)\txt)
      SelMenu(i)\x = MWin\w / 2 -(SelMenu(i)\w / 2)
      SelMenu(i)\y = MWin\h / 2 -(i*40) + SelMenu(i)\h
      SelMenu(i)\sel = i
      
      If(OverMenu(@CMouse, @SelMenu(i)))
        DrawText(SelMenu(i)\x, SelMenu(i)\y, SelMenu(i)\txt, RGB(255,255,0))
        If MouseButton(#PB_MouseButton_Left)
          If SelMenu(i)\sel = 0
            MWin\w = 800 : MWin\h = 600
          ElseIf SelMenu(i)\sel = 1
            MWin\w = 1024 : MWin\h = 768
          ElseIf SelMenu(i)\sel = 2
            MWin\w = 1366 : MWin\h = 768
          EndIf
          ResizeWindow(#MWin, #PB_Ignore, #PB_Ignore, MWin\w, MWin\h)
        EndIf
      Else
        DrawText(SelMenu(i)\x, SelMenu(i)\y, SelMenu(i)\txt, RGB(255,255,255))
      EndIf
    Next i
    StopDrawing()
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

;Main
If OpenWindow(#MWin,MWin\x,MWin\y,MWin\w,MWin\h,"Maus-Menü",#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)   
  BindEvent( #PB_Event_SizeWindow, @ResizeScreen(), #MWin, #PB_All, #PB_All )
  If ScreenOpen()
    Repeat
      ExamineMouse()
      ReleaseMouse(#False)
      CMouse\x = MouseX()
      CMouse\y = MouseY()
      
      ExamineKeyboard()
      
      ClearScreen(RGB(0,0,0))
      
      DrawMenu()
      
      DisplayTransparentSprite(#CursorSprite, CMouse\x, CMouse\y)
      
      FlipBuffers():Delay(10)
      
      Repeat
        EventID = WindowEvent()
        
        Select EventID
          Case #PB_Event_CloseWindow
            End
        EndSelect
      Until EventID = 0
      
    Until KeyboardPushed(#PB_Key_Escape) Or EventID = #PB_Event_CloseWindow
  EndIf
EndIf

DataSection
  Cursor:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$170000000F000000,$82315B0000000208,$4E527406000000EB
  Data.q $6E00000000000053,$70090000009107A6,$00C40E0000735948,$1B0E2B9501C40E00,$544144497D000000
  Data.q $20C00DCB919D8D38,$498758F20CD2C50C,$44A87A1160ED8A18,$086D921B94F90A51,$0E804A5280174510
  Data.q $BDA1E15E18C60008,$A082DB4AC25DA4C2,$0A3E96C26B4BE10D,$87AE10B4282F7A27,$36EB4A530389AD6E
  Data.q $58A7FD6D956B5CE7,$679E4A63382F69E9,$9E538D16D999BDF5,$88C39AAAEEF7A889,$7FBFE00F2C4EEB3C
  Data.q $8A09FED3D844A903,$4E454900000000F8,$000000826042AE44
EndDataSection
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Maus-Interaktion nach ResizeWindow() nicht möglich

Beitrag von DarkSoul »

Deine Lösung ist buggy. Wenn ich die Maustaste gedrückt halte, dann resized er, während ich klicke. Damit kommt die Mouse-Lib nicht klar und bekommt nicht mit, wenn die Maustaste losgelassen wird. So habe ich sozusagen "dauerfeuer". Besser wäre es, das Resizing erst dann vorzunehmen, wenn die Maustaste gedrückt und auch wieder losgelassen wurde.
Bild
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Maus-Interaktion nach ResizeWindow() nicht möglich

Beitrag von ccode_new »

@DarkSoul
Deine Lösung ist buggy.
Ist mir bekannt.

Es lässt sich per OS-Api beheben.

Anbei: (Wenn noch nicht bekannt) Ich mag die interne Mouse-Lib nicht.

Hier einmal eine andere Version (ohne ExamineMouse() ):

Code: Alles auswählen

; Mein kleiner Maus-Menü-Test (mit OS-Api) - MacOS ist noch offen! (kann ja mal jemand hinzufügen)

UsePNGImageDecoder()

InitSprite() : InitMouse() : InitKeyboard()

CompilerIf #PB_Compiler_OS = #PB_OS_Linux
  ImportC ""
    gdk_display_get_default()
    gdk_display_get_pointer(*display.GdkDisplay, *screen.GdkScreen, *x, *y, *mask)
  EndImport
CompilerEndIf

Enumeration
  #MWin
  #CursorSprite
EndEnumeration

Structure WinPos
  x.i
  y.i
  h.i
  w.i
EndStructure

Global MWin.WinPos
MWin\x = 0
MWin\y = 0
MWin\w = 800
MWin\h = 600

Structure MPoint
  x.d
  y.d
EndStructure

Structure MText
  x.d
  y.d
  w.d
  h.d
  sel.i
  txt.s
EndStructure

Global Dim SelMenu.MText(2)

Global CMouse.MPoint

Procedure.b ScreenMouseButton(Wnd, ButtonNr)
 
  CompilerIf #PB_Compiler_OS = #PB_OS_Linux
    ;Linux Version
    If Wnd
      gdk_display_get_pointer(gdk_display_get_default(), #Null, @x, @y, @mask)
      Select ButtonNr
        Case 0
          If (mask & #GDK_BUTTON1_MASK)
            ProcedureReturn #True
          EndIf
        Case 1
          If (mask & #GDK_BUTTON3_MASK)
            ProcedureReturn #True
          EndIf
        Case 2
          If (mask & #GDK_BUTTON2_MASK)
            ProcedureReturn #True
          EndIf
      EndSelect
    EndIf
  CompilerElse
    ;Windows Version
    If Wnd And GetForegroundWindow_() = Wnd
      Select ButtonNr
        Case 0
          If GetAsyncKeyState_(#MK_LBUTTON) > 1
            ProcedureReturn #True
          EndIf
        Case 1
          If GetAsyncKeyState_(#MK_RBUTTON) > 1
            ProcedureReturn #True
          EndIf
        Case 2
          If GetAsyncKeyState_(#MK_MBUTTON) > 1
            ProcedureReturn #True
          EndIf
      EndSelect
    EndIf
  CompilerEndIf
  ProcedureReturn #False
EndProcedure

Procedure.b OverMenu(*MousePos.MPoint, *SelMenu.MText)
  If ((*MousePos\x >= *SelMenu\x) And (*MousePos\x <= (*SelMenu\x + *SelMenu\w)) And (*MousePos\y >= *SelMenu\y) And (*MousePos\y <= *SelMenu\y + *SelMenu\h))
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

Procedure.b ScreenOpen()
  If OpenWindowedScreen(WindowID(#MWin),0,0,WindowWidth(#MWin),WindowHeight(#MWin),0,0,0)
    SetFrameRate(60)
    If Not CatchSprite(#CursorSprite, ?Cursor)
      End
    EndIf
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

Procedure ResizeScreen()
  MWin\w = WindowWidth(#MWin) : MWin\h = WindowHeight(#MWin)
  CloseScreen() ;???
  ScreenOpen()
EndProcedure

Procedure.b DrawMenu()
  SelMenu(0)\txt = "Auflösung 800 x 600 (4:3)"
  SelMenu(1)\txt = "Auflösung 1024 x 768 (4:3)"
  SelMenu(2)\txt = "Auflösung 1366 × 768 (16:9)"
 
  If StartDrawing(ScreenOutput())
    For i = 0 To 2
      SelMenu(i)\w = TextWidth(SelMenu(i)\txt)
      SelMenu(i)\h = TextHeight(SelMenu(i)\txt)
      SelMenu(i)\x = MWin\w / 2 -(SelMenu(i)\w / 2)
      SelMenu(i)\y = MWin\h / 2 -(i*40) + SelMenu(i)\h
      SelMenu(i)\sel = i
     
      If(OverMenu(@CMouse, @SelMenu(i)))
        DrawText(SelMenu(i)\x, SelMenu(i)\y, SelMenu(i)\txt, RGB(255,255,0))
        If ScreenMouseButton(WindowID(#MWin), 0)
          If SelMenu(i)\sel = 0
            MWin\w = 800 : MWin\h = 600
          ElseIf SelMenu(i)\sel = 1
            MWin\w = 1024 : MWin\h = 768
          ElseIf SelMenu(i)\sel = 2
            MWin\w = 1366 : MWin\h = 768
          EndIf
          ResizeWindow(#MWin, #PB_Ignore, #PB_Ignore, MWin\w, MWin\h)
        EndIf
      Else
        DrawText(SelMenu(i)\x, SelMenu(i)\y, SelMenu(i)\txt, RGB(255,255,255))
      EndIf
    Next i
    StopDrawing()
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

;Main
If OpenWindow(#MWin,MWin\x,MWin\y,MWin\w,MWin\h,"Maus-Menü",#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)   
  ;BindEvent( #PB_Event_SizeWindow, @ResizeScreen(), #MWin, #PB_All, #PB_All )
  If ScreenOpen()
    ;ExamineMouse()
    Repeat
      CMouse\x = WindowMouseX(#MWin)
      CMouse\y = WindowMouseY(#MWin)
     
      ExamineKeyboard()
     
      ClearScreen(RGB(0,0,0))
     
      DrawMenu()
     
      ;DisplayTransparentSprite(#CursorSprite, CMouse\x, CMouse\y)
     
      FlipBuffers():Delay(10)
     
      Repeat
        EventID = WindowEvent()
       
        Select EventID
          Case #PB_Event_CloseWindow
            End
          Case #PB_Event_SizeWindow
            ResizeScreen()
        EndSelect
      Until EventID = 0
     
    Until KeyboardPushed(#PB_Key_Escape) Or EventID = #PB_Event_CloseWindow
  EndIf
EndIf

DataSection
  Cursor:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$170000000F000000,$82315B0000000208,$4E527406000000EB
  Data.q $6E00000000000053,$70090000009107A6,$00C40E0000735948,$1B0E2B9501C40E00,$544144497D000000
  Data.q $20C00DCB919D8D38,$498758F20CD2C50C,$44A87A1160ED8A18,$086D921B94F90A51,$0E804A5280174510
  Data.q $BDA1E15E18C60008,$A082DB4AC25DA4C2,$0A3E96C26B4BE10D,$87AE10B4282F7A27,$36EB4A530389AD6E
  Data.q $58A7FD6D956B5CE7,$679E4A63382F69E9,$9E538D16D999BDF5,$88C39AAAEEF7A889,$7FBFE00F2C4EEB3C
  Data.q $8A09FED3D844A903,$4E454900000000F8,$000000826042AE44
EndDataSection
->kleiner Konstanten-Bug:

Code: Alles auswählen

If GetAsyncKeyState_(#MK_MBUTTON) > 1
            ProcedureReturn #True
          EndIf
-> wird zu:

Code: Alles auswählen

If GetAsyncKeyState_(#VK_MBUTTON) > 1
            ProcedureReturn #True
          EndIf
Zuletzt geändert von ccode_new am 18.02.2018 19:58, insgesamt 2-mal geändert.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Maus-Interaktion nach ResizeWindow() nicht möglich

Beitrag von DarkSoul »

Man benötigt die Mouse-Lib nicht wirklich, wenn man im Fenstermodus ist. Man kann auch mit den normalen WindowMouseX()/WindowMouseY()-Befehlen arbeiten und dann die Fensterkoordinaten auf die Screenkoordinaten umrechnen. Dann erübrigt sich dieses Problem gänzlich. :mrgreen:

Code: Alles auswählen

screenWidth.i = 640
screenHeight.i = 480
winMouseX.i = 0
winMouseY.i = 0
mouseX.i = 0
mouseY.i = 0

InitSprite() ;Kontroll-IF's lasse ich mal für das Beispiel weg
OpenWindow(0,0,0,screenWidth,screenHeight,"bla",#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget)
OpenWindowedScreen(WindowID(0),0,0,screenWidth,screenHeight,1,0,0)

While WindowEvent() : Wend

Repeat
  Delay(1)
  ClearScreen(0)
  mouseLeftClick = 0
  event = WindowEvent()
  If GetActiveWindow() = 0 
    winMouseX = WindowMouseX(0)
    winMouseY = WindowMouseY(0)
    If winMouseX > -1 And winMouseY > -1
      mouseX = winMouseX * screenWidth / WindowWidth(0) 
      mouseY = winMouseY * screenHeight / WindowHeight(0) 
    Else
      mouseX = -1
      mouseY = -1
    EndIf    
  Else
    mouseX = -1
    mouseY = -1
  EndIf
  ;game loop bla bla
  If StartDrawing(ScreenOutput())
    If mouseX > -1
        Circle(mouseX, mouseY, 64, $ffff00)
    Else
      DrawText(0,0,"mouse is off-screen or window isn't focussed")
    EndIf
    StopDrawing()
  EndIf
  FlipBuffers()  
Until event = #PB_Event_CloseWindow
Um die Maustasten abzufragen, muss man zusätzlich noch die Mouse-Down, Mouse-Up and Mouse-Click-Events per OS-API anzapfen.
Bild
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Maus-Interaktion nach ResizeWindow() nicht möglich

Beitrag von Mijikai »

Hier mal ein MOUSE Modul (mit Win-API) :)

Code: Alles auswählen


DeclareModule MOUSE
 
  ;MOUSE MODULE DRAFT
  ;BY MIJIKAI
  ;PB 5.62 x64 (Windows 10)

  Structure MOUSE_VECTOR_STRUCT
    X.f
    Y.f
  EndStructure
  
  Structure MOUSE_STRUCT
    Window.i
    WindowHandle.i
    Task.MSG
    Pos.MOUSE_VECTOR_STRUCT
    Factor.MOUSE_VECTOR_STRUCT
    Area.MOUSE_VECTOR_STRUCT
    Resize.b
    LeftButton.b
    LeftButtonDouble.b
    RightButton.b
    RightButtonDouble.b
  EndStructure
  
  Declare.i Init(Window.i)
  Declare.b Update()
  Declare.i Window()
  Declare.i WindowHandle()
  Declare.i Resize()
  Declare.f AreaX()
  Declare.f AreaY()
  Declare.f PosX()
  Declare.f PosY()
  Declare.f FactorX()
  Declare.f FactorY()
  Declare.b LeftButton()
  Declare.b RightButton()
  Declare.b LeftButtonDouble()
  Declare.b RightButtonDouble()
  
EndDeclareModule

Module MOUSE
  
  Global Mouse.MOUSE_STRUCT

  Procedure.w LoWord(Value.l)
    ProcedureReturn (Value & $FFFF)
  EndProcedure
  
  Procedure.w HiWord(Value.l)
    ProcedureReturn ((Value >> 16) & $FFFF)
  EndProcedure
  
  Procedure.i Init(Window.i)
    Protected Style.i
    If IsWindow(Window)
      ClearStructure(@Mouse,MOUSE_STRUCT) 
      Mouse\Window = Window
      Mouse\WindowHandle = WindowID(Window)
      Mouse\Area\X = WindowWidth(Window)
      Mouse\Area\Y = WindowHeight(Window)
      Mouse\Factor\X = 1
      Mouse\Factor\Y = 1
      Style = GetClassLongPtr_(Mouse\WindowHandle,#GCL_STYLE)
      If Style
        SetClassLongPtr_(Mouse\WindowHandle,#GCL_STYLE,Style|#CS_DBLCLKS)
      EndIf
      ProcedureReturn @Mouse;returns pointer to MOUSE_STRUCT
    EndIf
  EndProcedure
  
  Procedure.b Update()  
    If PeekMessage_(@Mouse\Task,Mouse\WindowHandle,#Null,#Null,#PM_NOREMOVE) 
      Mouse\LeftButtonDouble = #False
      Mouse\RightButtonDouble = #False
      If Mouse\Resize = #True
        Mouse\Factor\X = Mouse\Area\X / WindowWidth(Mouse\Window)
        Mouse\Factor\Y = Mouse\Area\Y / WindowHeight(Mouse\Window)
        Mouse\LeftButton = #False
        Mouse\RightButton = #False
      EndIf
      Select Mouse\Task\message
        Case #WM_MOUSEMOVE
          Mouse\Pos\X = LoWord(Mouse\Task\lParam) * Mouse\Factor\X
          Mouse\Pos\Y = HiWord(Mouse\Task\lParam) * Mouse\Factor\Y
          Mouse\Resize = #False
        Case #WM_LBUTTONDOWN
          Mouse\LeftButton = #True
        Case #WM_LBUTTONUP
          Mouse\LeftButton = #False
        Case #WM_LBUTTONDBLCLK
          Mouse\LeftButtonDouble = #True
        Case #WM_LBUTTONDOWN
          Mouse\RightButton = #True
        Case #WM_RBUTTONUP
          Mouse\RightButton = #False
        Case #WM_RBUTTONDBLCLK
          Mouse\RightButtonDouble = #True
        Case #WM_NCMOUSEMOVE
          Mouse\Resize = #True
      EndSelect
      ProcedureReturn #True
    EndIf
  EndProcedure
  
  Procedure.i Window()
    ProcedureReturn Mouse\Window
  EndProcedure
  
  Procedure.i WindowHandle()
    ProcedureReturn Mouse\WindowHandle
  EndProcedure
  
  Procedure.i Resize()
    PostMessage_(Mouse\WindowHandle,#WM_NCMOUSEMOVE,#Null,#Null)
  EndProcedure
  
  Procedure.f AreaX()
    ProcedureReturn Mouse\Area\X
  EndProcedure
  
  Procedure.f AreaY()
    ProcedureReturn Mouse\Area\Y
  EndProcedure
  
  Procedure.f PosX()
    ProcedureReturn Mouse\Pos\X
  EndProcedure
  
  Procedure.f PosY()
    ProcedureReturn Mouse\Pos\Y
  EndProcedure
  
  Procedure.f FactorX()
    ProcedureReturn Mouse\Factor\X
  EndProcedure
  
  Procedure.f FactorY()
    ProcedureReturn Mouse\Factor\Y
  EndProcedure
  
  Procedure.b LeftButton()
    ProcedureReturn Mouse\LeftButton
  EndProcedure
  
  Procedure.b RightButton()
    ProcedureReturn Mouse\RightButton
  EndProcedure
  
  Procedure.b LeftButtonDouble()
    Protected State.b = Mouse\LeftButtonDouble
    Mouse\LeftButtonDouble = #False
    ProcedureReturn State
  EndProcedure
  
  Procedure.b RightButtonDouble()
    Protected State.b = Mouse\RightButtonDouble
    Mouse\RightButtonDouble = #False
    ProcedureReturn State
  EndProcedure
  
EndModule

Procedure.i Render(Sprite.i);lazy example...
  Static OldX.f
  Static OldY.f
  Static Take = #True
  If MOUSE::RightButtonDouble()
    MessageBox_(#Null,"RightButtonDouble()","Test!",#Null)
  EndIf 
  If MOUSE::LeftButtonDouble()
    ResizeWindow(MOUSE::Window(),#PB_Ignore,#PB_Ignore,Random(800),Random(800))
    MOUSE::Resize()
  EndIf 
  If MOUSE::LeftButton()
    If MOUSE::PosX() > OldX And MOUSE::PosX() < (OldX + 32)
      If MOUSE::PosY() > OldY And MOUSE::PosY() < (OldY + 32)
        Take = #True
      EndIf
    EndIf
  Else
    Take = #False
  EndIf 
  If Take = #True
    OldX = MOUSE::PosX() - 16
    OldY = MOUSE::PosY() - 16
  EndIf
  DisplayTransparentSprite(Sprite,OldX,OldY)
EndProcedure

Procedure.i Screen(Width.i,Height.i,Title.s)
  Protected Event.i
  Protected Style.i
  Protected Sprite.i
  Protected Exit.b
  Style|#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget
  Style|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget
  If OpenWindow(0,0,0,Width,Height,Title,Style) & InitSprite()
    If OpenWindowedScreen(WindowID(0),0,0,Width,Height,#True,0,0)
      WindowBounds(0,320,320,#PB_Ignore,#PB_Ignore)
      SetFrameRate(60)
      Sprite = CatchSprite(#PB_Any,?SPRITEDATA,#PB_Sprite_AlphaBlending)
      If Sprite And MOUSE::Init(Window)
        Repeat
          Repeat
            MOUSE::Update()
            Event = WindowEvent()
            Select Event 
              Case #PB_Event_CloseWindow
                Exit = #True
            EndSelect
          Until Event = #Null
          ClearScreen($FFFFFF)
          Render(Sprite)
          FlipBuffers()
        Until Exit = #True
      EndIf
    EndIf
  EndIf
EndProcedure

UsePNGImageDecoder()

Screen(320,320,#Null$)

DataSection
  SPRITEDATA:
  ;{ Size: 204 Bytes
  !dw 05089h, 0474Eh, 00A0Dh, 00A1Ah, 00000h, 00D00h, 04849h, 05244h, 00000h
  !dw 02000h, 00000h, 02000h, 00208h, 00000h, 0FC00h, 0ED18h, 000A3h, 00000h
  !dw 04993h, 04144h, 04854h, 0EDC7h, 0C156h, 0800Dh, 00830h, 00DA4h, 0D023h
  !dw 0DC05h, 0267Fh, 0C017h, 0FC21h, 0A219h, 0D0B5h, 02622h, 0F29Ah, 038E6h
  !dw 00A38h, 01134h, 04411h, 0021Ah, 0AF00h, 0505Bh, 0B2F4h, 08650h, 00B60h
  !dw 0C027h, 0AA81h, 06E2Dh, 0EC87h, 04468h, 03ECAh, 0B331h, 04492h, 0F529h
  !dw 0EE0Ah, 01290h, 02E10h, 0CA91h, 0CA77h, 0FD12h, 0CAC9h, 05788h, 06E78h
  !dw 05523h, 05DB9h, 01912h, 069ABh, 07DBBh, 0D07Fh, 0B7FEh, 0AA2Ah, 0C6CFh
  !dw 06833h, 056EFh, 0C9E0h, 02754h, 09FB0h, 0AE9Dh, 07BE9h, 0177Eh, 00979h
  !dw 0EF7Ah, 01CEBh, 091B4h, 0181Eh, 0AEAFh, 04FB1h, 007B3h, 0C093h, 0296Fh
  !dw 0FBFAh, 003BEh, 0AE4Bh, 0B92Ah, 0EC0Fh, 0B1D8h, 00000h, 00000h, 04549h
  !dw 0444Eh, 042AEh, 08260h
  ;}
EndDataSection
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Maus-Interaktion nach ResizeWindow() nicht möglich

Beitrag von ccode_new »

@Mijikai

Dein Code ist nicht für Resize-Optimiert.

Nach einem Resize des Fensters funktioniert das Drag and Drop nicht mehr korrekt.

Anbei: Ich sollte auch mal mehr mit Module arbeiten. Die haben so eine Objekt-Orientierte-Aura.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Maus-Interaktion nach ResizeWindow() nicht möglich

Beitrag von Mijikai »

ccode_new hat geschrieben:@Mijikai

Dein Code ist nicht für Resize-Optimiert.

Nach einem Resize des Fensters funktioniert das Drag and Drop nicht mehr korrekt.
...
Danke fürs testen :)
Da muss ich den Entwurf wohl nochmal überarbeiten.
Wie genau äußert sich das Problem, da mir bisher nichts aufgefallen ist ? :oops:
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Maus-Interaktion nach ResizeWindow() nicht möglich

Beitrag von ccode_new »

@Mijikai

Die Bildposition stimmt dann nicht mehr mit der Mausposition überein.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Maus-Interaktion nach ResizeWindow() nicht möglich

Beitrag von Mijikai »

@ccode_new

Das ist merkwürdig :shock: bei mir wird alles korrekt angezeigt.
Vielleicht liegt es am OS ?... die Position wird mit PureBasic Funktionen
(WindowWidth()...) berechnet - gibt es da eventuell einen Bug !?.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Maus-Interaktion nach ResizeWindow() nicht möglich

Beitrag von ccode_new »

@Mijikai

Ich hab's mir mal angepasst: (So gefällt es mir besser.)

(Grundsätzlich funktioniert dein Beispiel so wie es soll.)

Code: Alles auswählen

Case #PB_Event_SizeWindow
      Mouse::Resize()
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten