Page 1 sur 2

Multitache plien ecran

Publié : sam. 14/févr./2004 19:05
par Marcus
En attendant mieux de la part de Fred :wink:

Bon avec l'aide de Keph et Cederavic j'ai enfin reussi à créer un mode 100% multitache plien ecran sous windows !
et ce sans ce prendre la tete avec des tests !
Cela fonctionne nikel , on peut tout comme en Openscreen() choisir la resolusion , la syncro , le framerate et m^m mieu redimensionner l'ecran.
on peut quant m^m remarquer quelques saccades de temps a autre relative a ce mode comparé a un plien ecran traditionnel mais vraiment pas méchant à condition de ne pas laisser trop de taches tourner en fond pour rien .
Je vous prépare un bout de code pour expliquer ce principe ---
Merci encore à Cederavic et Keph

Publié : dim. 15/févr./2004 14:13
par Marcus

Code : Tout sélectionner

InitSprite() 
InitKeyboard() 
iiiii.b=1 
pause.b=-1 

OpenScreen(1024,768,32,"") 

Repeat 
  StartDrawing(ScreenOutput()) 
  DrawingMode(1) 
  FrontColor(255,255,255) 
  Locate(10,50) 
  DrawText("1 Plein ecran Exclusif ") 
  Locate(10,70) 
  DrawText("2 Plein ecran Windows ") 
  StopDrawing() 
  FlipBuffers() 
  ExamineKeyboard() 
Until KeyboardPushed(#PB_Key_1) Or KeyboardPushed(#PB_Key_2) Or KeyboardPushed(#PB_Key_Escape) Or KeyboardPushed(#PB_Key_Pad2) Or KeyboardPushed(#PB_Key_Pad1) 
If KeyboardPushed(#PB_Key_1) Or KeyboardPushed(#PB_Key_Pad1):choix_screen =1 :EndIf 
If KeyboardPushed(#PB_Key_2) Or KeyboardPushed(#PB_Key_Pad2):choix_screen =2 :EndIf 
If KeyboardPushed(#PB_Key_Escape) :End :EndIf 
CloseScreen() 

If choix_screen=2 
  Global xxx.w,yyy.w,bits.b,sync.b  
  xxx=1024 
  yyy=768 
  bits=32 
  sync=75 
  ChangeResolution(xxx,yyy,bits,sync)  
  OpenWindow(0, 0 ,0,xxx,yyy , #PB_Window_ScreenCentered |#PB_Window_WindowCentered| #PB_Window_BorderLess , "") ; pour une cran dana sun fenetre 
  OpenWindowedScreen(WindowID(0), 0, 0,1024,768, 1, 0, 0) 
  SetFrameRate(sync) 
  ShowCursor_(#False) 
  ActivateWindow() 
  WindowEvent() 
  
EndIf 
If choix_screen=1 
  SetRefreshRate(75) 
  OpenScreen(1024,768,32,"") 
  SetFrameRate(75) 
EndIf 

Repeat 
  If choix_screen=2 :ActivateWindow(): EndIf 
  
  ExamineKeyboard() 
  If KeyboardReleased(#PB_Key_P)  
    iiiii=1 
  EndIf 
  If iiiii=1 
    If   KeyboardPushed(#PB_Key_P) 
      pause = -pause 
      Delay(200) 
      iiiii=0 
    EndIf  
  EndIf 
  
  If pause =-1 
    ClearScreen(0,0,0) 
    ;code boucle principale 
    StartDrawing(ScreenOutput()) 
    DrawingMode(1) 
    Box(Random(900),Random(600),Random(100),Random(100),RGB(Random(255),Random(255),Random(255))) 
    
    FrontColor(255,255,255) 
    Locate(10,50) 
    DrawText("P pause ") 
    Locate(10,30) 
    DrawText("Tab + ALT pour tester le Multitache  ") 
    Locate(10,10) 
    If choix_screen=2 
      DrawText("Plein ecran Multitache ") 
    EndIf 
    If choix_screen=1 
      DrawText("Plein ecran Exclusif ") 
    EndIf 
    StopDrawing() 
    ; ------------------ 
    
    If choix_screen=2: WaitForVSync():EndIf 
    FlipBuffers() 
    
  Else 
    If choix_screen=2 :ActivateWindow(): EndIf 
    FlipBuffers() 
    Delay(10) 
  EndIf 
Until  KeyboardPushed(#PB_Key_Escape) 

Publié : dim. 15/févr./2004 15:40
par cederavic
Salut tout le monde, on a besoin de vous pour un test, savoir si vous pouvez utiliser le clavier qd le prog est lancer, marcus peut (xp home) et moi non (win 2k pro sp4)
vala, merci au testeur :)

Publié : dim. 15/févr./2004 15:56
par filperj
Je peut l'utiliser, sous xp home aussi.

Sinon, j'ai du mettre en commentaire la ligne "ChangeResolution(xxx,yyy,bits,sync)" pour l'executer. C'est quoi ?

Publié : dim. 15/févr./2004 16:16
par filperj
Et il doit manquer un windowevent() ds la boucle principale.
Il faut au moins faire semblant de récupérer les message (même si tu ne les traite pas), ça fait tellement plaisir au système :lol:

Publié : dim. 15/févr./2004 17:08
par Invité
Sinon, j'ai du mettre en commentaire la ligne "ChangeResolution(xxx,yyy,bits,sync)" pour l'executer. C'est quoi ?
C'est l'excellent choix pour la resolusion sous windobe creer par Keph
http://103683.free.fr/purebasic/Resolution.zip (4 Ko).

Publié : dim. 15/févr./2004 17:36
par M arcus

Code : Tout sélectionner

InitSprite()
InitKeyboard()
iiiii.b=1
pause.b=-1

OpenScreen(1024,768,32,"")

Repeat
  StartDrawing(ScreenOutput()) 
  DrawingMode(1) 
  FrontColor(255,255,255) 
  Locate(10,50)
  DrawText("1 Plein ecran Exclusif ")
  Locate(10,70)
  DrawText("2 Plein ecran Windows ") 
  StopDrawing()
  FlipBuffers()
  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_1) Or KeyboardPushed(#PB_Key_2) Or KeyboardPushed(#PB_Key_Escape) Or KeyboardPushed(#PB_Key_Pad2) Or KeyboardPushed(#PB_Key_Pad1)
If KeyboardPushed(#PB_Key_1) Or KeyboardPushed(#PB_Key_Pad1):choix_screen =1 :EndIf
If KeyboardPushed(#PB_Key_2) Or KeyboardPushed(#PB_Key_Pad2):choix_screen =2 :EndIf
If KeyboardPushed(#PB_Key_Escape) :End :EndIf
CloseScreen()

If choix_screen=2
  Global xxx.w,yyy.w,bits.b,sync.b  
 ; xxx=1024
 ; yyy=768
  xxx=GetSystemMetrics_(0)
  yyy=GetSystemMetrics_(1)
  bits=32
  sync=75 
  ChangeResolution(xxx,yyy,bits,sync)  
  OpenWindow(0, 0 ,0,xxx,yyy , #PB_Window_ScreenCentered |#PB_Window_WindowCentered| #PB_Window_BorderLess , "") ; pour une cran dana sun fenetre
  OpenWindowedScreen(WindowID(0), 0, 0,1024,768, 1, 0, 0)
  SetFrameRate(sync) 
  ShowCursor_(#False) 
  ActivateWindow() 
  WindowEvent()
  
EndIf
If choix_screen=1
  SetRefreshRate(75)
  OpenScreen(1024,768,32,"")
  SetFrameRate(75)
EndIf

Repeat 
 
  
  ExamineKeyboard()
  If KeyboardReleased(#PB_Key_P)  
    iiiii=1 
  EndIf 
  If iiiii=1 
    If   KeyboardPushed(#PB_Key_P)
      pause = -pause 
      Delay(200)
      iiiii=0
    EndIf  
  EndIf
  
  If pause =-1 
   
    ClearScreen(0,0,0)
    ;code boucle principale 
    StartDrawing(ScreenOutput())
    DrawingMode(1) 
    Box(Random(900),Random(600),Random(100),Random(100),RGB(Random(255),Random(255),Random(255))) 
    
    FrontColor(255,255,255) 
    Locate(10,50)
    DrawText("P pause ") 
    Locate(10,30)
    DrawText("Tab + ALT pour tester le Multitache  ") 
    Locate(10,10)
    If choix_screen=2 
      DrawText("Plein ecran Multitache ") 
    EndIf
    If choix_screen=1 
      DrawText("Plein ecran Exclusif ") 
    EndIf
    StopDrawing()
    ; ------------------
    
    If choix_screen=2:ActivateWindow():WindowEvent(): WaitForVSync():EndIf
    FlipBuffers()
    
  Else 
    If choix_screen=2 :WindowEvent() :EndIf
    FlipBuffers()
    Delay(10)
  EndIf
Until  KeyboardPushed(#PB_Key_Escape)

Publié : dim. 15/févr./2004 17:48
par M arcus
htt://perso.wanadoo.fr/marcus.zone/fichiers/invaders11.exe

Merci de tester le Mode 2
Verifiez si le multitache fonctionne normalement et libere le clavier Alt+tab

Publié : dim. 15/févr./2004 17:51
par Marcus

Publié : dim. 15/févr./2004 20:15
par Oliv
Pas de problèmes pour invaders11 sous Win98SE :D

Publié : dim. 15/févr./2004 20:49
par M arcus
Merci Oliv
c'est justement sous 98se que j'ai de doute de test

As tu bien testé si le clavier etait libéré aprés un Alt+Tab avec mon truc en pause en fond ( appuyer sur P avec alt+tab)
si tu pouvais revenir normalement a mon truc et le quitter ?

Merci

Publié : dim. 15/févr./2004 21:02
par Oliv
Oui, là je te répond avec ton prog en fond. Mais il ne se met pas en pause automatiquement : exprès ?

Publié : dim. 15/févr./2004 21:37
par M arcus
ui normal faut apuyer sur p avant de basculer
Merci

Publié : dim. 15/févr./2004 22:59
par Pierre
c'est bête mais je sais pas ce que c'est que le multitâche :oops:
le nom explique un peu ce que c'est mais ça me dit pas tout
quelqu'un peut m'expliquer?

Publié : dim. 15/févr./2004 23:25
par filperj
C'est tout simplement quand ton système execute plusieurs programmes en même temps, et que tu passe facilement de l'un à l'autre.
Un programme peut être plus ou moins favorable au multitâche: par exemple, un jeu en plein écran qui crashe dès que tu fait alt+tab n'est PAS favorable au multitâche :lol:
Ce que Marcus est en train de faire, c'est un prog plein écran qui se laisse bien réduire dans la barre des tâches, et qui reprend son cours gentiment quand on le rappelle :wink: