Aktuelle Zeit: 22.09.2018 03:54

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 38 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Maus-Interaktion nach ResizeWindow() nicht möglich
BeitragVerfasst: 18.02.2018 15:34 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
@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:
; 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Maus-Interaktion nach ResizeWindow() nicht möglich
BeitragVerfasst: 18.02.2018 15:47 
Offline
Benutzeravatar

Registriert: 19.10.2006 12:51
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.

_________________
return;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Maus-Interaktion nach ResizeWindow() nicht möglich
BeitragVerfasst: 18.02.2018 15:56 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
@DarkSoul

Zitat:
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:
; 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:
If GetAsyncKeyState_(#MK_MBUTTON) > 1
            ProcedureReturn #True
          EndIf


-> wird zu:
Code:
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.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Maus-Interaktion nach ResizeWindow() nicht möglich
BeitragVerfasst: 18.02.2018 18:09 
Offline
Benutzeravatar

Registriert: 19.10.2006 12:51
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:
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.

_________________
return;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Maus-Interaktion nach ResizeWindow() nicht möglich
BeitragVerfasst: 18.02.2018 20:51 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Hier mal ein MOUSE Modul (mit Win-API) :)

Code:

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Maus-Interaktion nach ResizeWindow() nicht möglich
BeitragVerfasst: 18.02.2018 21:17 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
@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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Maus-Interaktion nach ResizeWindow() nicht möglich
BeitragVerfasst: 18.02.2018 22:45 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
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:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Maus-Interaktion nach ResizeWindow() nicht möglich
BeitragVerfasst: 18.02.2018 22:54 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
@Mijikai

Die Bildposition stimmt dann nicht mehr mit der Mausposition überein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Maus-Interaktion nach ResizeWindow() nicht möglich
BeitragVerfasst: 18.02.2018 23:03 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
@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 !?.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Maus-Interaktion nach ResizeWindow() nicht möglich
BeitragVerfasst: 18.02.2018 23:29 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
@Mijikai

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

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

Code:
Case #PB_Event_SizeWindow
      Mouse::Resize()


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 38 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 6 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye