OpenWindowedScreen, RightOffset funktioniert nicht

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
E-P-S
Beiträge: 134
Registriert: 30.03.2007 09:39
Kontaktdaten:

OpenWindowedScreen, RightOffset funktioniert nicht

Beitrag von E-P-S »

Hallöchen, ich stell die Frage mal hier weil sie doch recht banal ist (höchstwahrscheinlich)

Zunächst mal folgender kleiner Codeauszug...

Code: Alles auswählen

If OpenWindow( 0, 0, 0, 800, 600, "Fenster", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_Maximize | #PB_Window_SizeGadget )
.
.
.
If OpenWindowedScreen( WindowID(0), 10, 10, WindowWidth(0), WindowHeight(0), 0, 50, 50 )
Die Werte für RightOffset und BottomOffset sind jetzt mal willkürlich, die Frage ist nur warum der Offset nicht funktioniert? Sollten diese Werte nicht dafür sorgen das nach rechts und unten ein Rand zwischen "Bildschirm" und Fenster bleibt - oder verstehe ich da was falsch?

Danke schonmal
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Offsets fuktionieren nur wenn "Autostretch" aktiviert ist.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
E-P-S
Beiträge: 134
Registriert: 30.03.2007 09:39
Kontaktdaten:

Beitrag von E-P-S »

Ahh, verstehe. Danke für die Information.

Das möchte ich allerdings nicht, gibt es eine Möglichkeit die Größe des Bildschirms nach einem "SizeWindow" Event von Hand zu verändern?
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Screen closen und wieder öffnen :?
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Ich werd' dich auch gleich mal "closen" ...
Windows 10 Pro, 64-Bit / Outtakes | Derek
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Fluid Byte hat geschrieben:Ich werd' dich auch gleich mal "closen" ...
/:->

Code: Alles auswählen

  If InitSprite() = 0
    MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
    End
  EndIf
  
  If OpenWindow(0, 0, 0, 320, 140, "A screen in a window...", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
    If CreateStatusBar(0, WindowID(0))
      AddStatusBarField(320)
      StatusBarText(0, 0, "Automatically zoomed screen area when changing window size...")
    EndIf
    If OpenWindowedScreen(WindowID(0), 10, 10, 1, 1, 1, 10, 10)  ; wir benötigen nicht die exakte Bildschirmbreite/-höhe, da diese automatisch angepasst werden...
    Else
      MessageRequester("Error", "Can't open windowed screen!", 0)
      End
    EndIf
  EndIf
  
  Repeat
    ; Es ist sehr wichtig, alle im Queue befindlichen Ereignisse während jedes Frames abzuarbeiten
    ;
    Repeat
      Event = WindowEvent()
      
      If Event = #PB_Event_CloseWindow
        End 
      EndIf
    Until Event = 0
    
    FlipBuffers() 
    ClearScreen(RGB(0, 0, 200))
    Delay(1)
  ForEver
Das reicht doch oder?
Benutzeravatar
E-P-S
Beiträge: 134
Registriert: 30.03.2007 09:39
Kontaktdaten:

Beitrag von E-P-S »

Also ScreenClose wäre doof, dabei gehen ja alle Sprites verloren - das ist also keine Lösung (leider).

Nein, die Methode geht leider nicht, da ja das AutoStretch an ist und dies mir meine Sprites verzerrt - was ich nicht möchte.
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Oh...

In OpenGL ist es möglich, weis aber jetzt nicht wie man beides verwenden kann.
Ich hab da aber mal ein bsp gesehn...


EDIT:

Ok hab mich geirrt, sorry...
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Weiss zwar nicht ob das dies der richtige weg ist, funktioniert aber recht gut.

Code: Alles auswählen

  
  Procedure LS()
    
    CreateSprite(0,20,20)
    StartDrawing(SpriteOutput(0))
      Box(0,0,20,20,$874178)
    StopDrawing()
    
  EndProcedure
  
  Procedure OS()
    
    result = OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0), 0, 0, 0)
    
    If result
      LS()
    EndIf
    
    ProcedureReturn result
  EndProcedure
  
  If InitSprite() = 0
    MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
    End
  EndIf
  
  If OpenWindow(0, 0, 0, 320, 140, "A screen in a window...", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
    If CreateStatusBar(0, WindowID(0))
      AddStatusBarField(320)
      StatusBarText(0, 0, "Automatically zoomed screen area when changing window size...")
    EndIf
    
    OS()
    
  EndIf
  
  Repeat
    ; Es ist sehr wichtig, alle im Queue befindlichen Ereignisse während jedes Frames abzuarbeiten
    ;
    Repeat
      Event = WaitWindowEvent(0)
      
      If Event = #PB_Event_SizeWindow
        CloseScreen()
        OS()
      EndIf
      
      If Event = #PB_Event_CloseWindow
        End
      EndIf
    Until Event = 0
    
    DisplaySprite(0,10,10)
    
    FlipBuffers()
    ClearScreen(RGB(0, 0, 200))
    Delay(1)
  ForEver
Benutzeravatar
E-P-S
Beiträge: 134
Registriert: 30.03.2007 09:39
Kontaktdaten:

Beitrag von E-P-S »

Dieser weg wäre eine Möglichkeit, allerdings erstellst auch du bei dieser Variante die Sprites neu.

Ich lade ca. 300 Sprites á 20x20 Pixel und das müsste ich dann auch machen was ziemlich, sagen wir mal unhandlich, ist.
Antworten