bei Verlassen des Fensters bleibt der Inhalt stehen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

bei Verlassen des Fensters bleibt der Inhalt stehen

Beitrag von udg »

Hallo,
zZt. versuche ich mich an einem Demo was ein Logo und ein Starfield und Scrollschrift anzeigt. Läuft alles gut.
Nun habe ich festgestellt, wenn ich das kleine Programm laufen habe und den Fokus nicht mehr darauf habe, sprich, in ein anderes Windows Fenster klicke oder das Programm selber mit der Maus verschiebe, alles stehen bleibt und erst normal weiter läuft wenn der Fokus wieder auf dem Programm liegt.

Wie kann ich so etwas umgehen?

Ich muss hier die MP3d Lib und die FX Lib benutzen (Code ist also nicht ausführbar mit Copy & Paste aber vielleicht kann man in meinem Code sehen was den Fehler verursacht? Liegt es am Event = WaitWindowEvent(3) ?

Code: Alles auswählen

EP_InitFXLib()          ; MUST BE CALLED FIRST !!
UsePNGImageDecoder()
InitSprite()
Enumeration
  #Window_0             ; MAIN WINDOW
  #exit_button
EndEnumeration

DataSection
;LOGO
     MyData1: 
     IncludeBinary "gfx\uret_new.png"
     EndOfMyData1:
;Font
     font:
     IncludeBinary "gfx\pix16.png" ; A 16x16 PNG FONT
     fontnd:        
;Song     
     Song:
     IncludeBinary "sound\phaser.v2m"  ; CALL A NICE V2M SOUND
;EXIT BUTTON
     ExitButton1: 
     IncludeBinary "gfx\exx.png"
     EndOfExitButton1:
;FRAME SHADOW
     FrameShadow:
     IncludeBinary "gfx\frame_shadow.png"
     EndFrameShadow:
EndDataSection          

  OpenWindow(#Window_0, 732, 301, 540, 540, "", #PB_Window_ScreenCentered | #PB_Window_BorderLess)
  SetWindowPos_(WindowID(0),#HWND_TOPMOST,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE) ; SET WINDOW ALWAYS ON TOP
  MP_ScreenToHandle(WindowID(0)) ; HANDLE 3D SCREEN
  UseGadgetList(#Window_0)     

;-DEFINITION EXIT BUTTON
 Define ExitButton1 = CatchImage(#PB_Any,?ExitButton1, ?EndOfExitButton1 - ?ExitButton1)
 br = ImageWidth(ExitButton1)
 hh = ImageHeight(ExitButton1)
 CanvasGadget(#exit_button, 500, 2, br, hh)
 SetGadgetAttribute(#exit_button, #PB_Canvas_Image, ImageID(ExitButton1))
;-LOAD AND PLAY V2M Sound
  MP_CatchV2M(?Song)  ; LOAD SONG
  MP_PlayV2M(0)       ; 0 START SOUND FROM THE BEGINNING
  IsPlaying=1         ; CHECK IF SONG IS PLAYING
;-STARFIELD
   EP_Init2DStars(50,7,0.3,0,18,540,250) 
   EP_2DStarsColor(2, RGB( 23, 50, 100)) ; STARS COLOR 
;-Logo,Frame & EXIT BUTTON
   Sprite_1 = MP_CatchSprite(?MyData1, ?EndOfMyData1 - ?MyData1) ; GRAB LOGO FROM MEM
   Sprite_2 = MP_CatchSprite(?ExitButton1, ?EndOfExitButton1 - ?ExitButton1) ; GRAB EXITBUTTON FROM MEM
   Sprite_3 = MP_CatchSprite(?FrameShadow, ?EndFrameShadow - ?FrameShadow) ; LOAD FRAME & SHADOW GFX FROM MEM
;-3D QUBE
  camera=MP_CreateCamera()        ; CREATE CAM
  light=MP_CreateLight(1)         ; MAKE LIGHT
  Mesh1=MP_CreateCube()           ; CREATE QUBE
  MP_PositionEntity (Mesh1,0,1.2,6)  ; POSITION QUBE, last number makes the size and Z Index of a qube
  MP_Wireframe(1)                 ; QUBE AS WIREFRAME. IF THIS LINE IS DISABLED: QUBE HAVE AN TEXTURE
;-SHOW a NORMAL SYSTEM Font Text
  font2 = MP_LoadFont ("Microsoft Sans Serif",12,0,0);"Fontname",SIZE,bold,italic
;DEFINE SINUS FONT
  EP_CatchFont16(Sprite_4,?font, ?fontnd)
  EP_SetScrollText(Sprite_4, "            i am a nice scrolltext and represent sinus moving up and down       hit  [ESC]  To exit            ")
  EP_Create16Scroll(0, 0, 0,130, 0,560)
  EP_SetSinScroll16(0, 5, 0 , 30, 10) ;DEFINE BEHAVIOR BY SINUS

Repeat
;- LOOP FUNCTION V2M SOUND  
    If MP_IsPlayingV2M()
      IsPlaying=1 ;CHECK IF SONG IS PLAYING
      Else 
       EndOfTrackReached=1 ;IF SONG REACHED ITS END
       ;RESTART PLAYBACK
        MP_PlayV2M(0) ;0 STARTs SONG At THE BEGINNING
   EndIf
   
  MP_AmbientSetLight ($FF090006); SET BACKGROUND COLOR OF THE WINDOW
  MP_DrawSprite(Sprite_1, 19, 30)   ; SHOW LOGO ON SCREEN
  MP_SpriteSetZ(Sprite_1, 9)        ; 9 IS Z-INDEX FOR LOGO
  MP_DrawSprite(Sprite_2, 500, 2)   ; SHOW EXIT BUTTON
  MP_SpriteSetZ(Sprite_2, 0)        ; 0 = Z INDEX
  MP_DrawSprite(Sprite_3, 0, 0)   ; SHOW FRAME
  MP_SpriteSetZ(Sprite_3, 0)        ; 0 = Z INDEX 
  
;DRAW NORMAL TEXT ON SCREEN
  MP_DrawText (340,220,"Today we have the current Date in 2015",font2,$77777777,0,0) ; 0,0 ---> 2nd VALUE CAN SPIN TEXT
  MP_TextSetZ (0)                   ; SET TEXT ON Z INDEX FRONT
;3d QUBE
  MP_TurnEntity (Mesh1,1.3,1.3,1.3)  ; SPIN QUBE
;SCROLL TEXT NOW
EP_Move16Scroll(0); SCROLL TEXT NOW
; DRAW ROTATING STARFIELD    
   EP_2DStarsDraw() ; DRAW STARFIELD
   EP_2DStarsDegree(b.f)
   b.f - 0.5; DEGREE OF STARS and ROTATE ALL

   MP_RenderWorld() ; CREATE WORLD
   MP_Flip ()       ; DO IT 

Event = WaitWindowEvent(3)
eventtype = EventType()

;////////////////////////////////////////
;-EXIT BUTTON FUNCTION
    Select event
      Case #PB_Event_Gadget           
      Select EventGadget()
        Case #exit_button                 
          Select EventType()
            Case #PB_EventType_LeftButtonDown
            MP_StopV2M(0) ;STOP MUSIC
            MP_FreeV2M()  ;FREE PLAYER
            EP_2DStarsClear()
            End
          EndSelect 
    EndSelect
EndSelect
;////////////////////////////////////////
;-ESCAPE BUTTON FUNCTION
If MP_KeyDown(#PB_Key_Escape)
   MP_Close()
   EP_2DStarsClear()
   MP_StopV2M(0) ;STOP MUSIC
   MP_FreeV2M()  ;GIVE PLAYER FREE
   End
 EndIf
;////////////////////////////////////////
;-MOVE WINDOW WITH MOUSE WHEN LEFT CLICK ON DEMO
SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
;////////////////////////////////////////
ForEver
Danke
Gruß
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
N00B
Beiträge: 122
Registriert: 11.07.2007 22:28

Re: bei Verlassen des Fensters bleibt der Inhalt stehen

Beitrag von N00B »

Haste den Link zu der FXLib ?

So kann mann den Code ja auch mal ausprobieren.

So aus der Ferne würde ich jetzt mal drauf schätzen, daß das Zeugs in einem Thread laufen muss.

http://www.purebasic.com/german/documen ... index.html
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: bei Verlassen des Fensters bleibt der Inhalt stehen

Beitrag von udg »

Hier kannst du die MP3D Lib als Installer runterladen: http://www74.zippyshare.com/v/nAsJs89z/file.html
So aus der Ferne würde ich jetzt mal drauf schätzen, daß das Zeugs in einem Thread laufen muss.
Stimmt genau. 2 Events in 2 Fenster funzt nicht.
Letztendlich muss alles in eine Eventschleife.

Grüße
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten