Page 1 sur 2
Mettre une fentre invisible en plein ecran ?
Publié : lun. 06/mars/2006 9:00
par olivier
Salut à tous
Voila lorsque mon programme démarre, il lance une petit fenetre d'intro, se qui me permet de bien calculer ma fenetre suivante avant l'affichage.
Ce code marche bien avec les dimension de la fenetre prévu, mais quand je veux que la fenetre démarre en plein ecran elle devient visible trop tôt..
Merci d'avance
Stef
Code : Tout sélectionner
plein_ecran=0 ; avec 0 cela marche bien, la fenetre invisible le reste le temps prévu
; avec 1 : pour mettre la fenetre en plein ecran, la fenetre apparet trop tôt !
OpenWindow(0,0,0,400,300,#PB_Window_BorderLess|#PB_Window_ScreenCentered,"Intro")
OpenWindow(1, 284, 247, 800, 600, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_Invisible | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Programme")
If plein_ecran=1
SendMessage_(WindowID(1),#WM_SYSCOMMAND,#SC_MAXIMIZE,0)
EndIf
Delay(1000)
CloseWindow(0)
HideWindow(1,0)
Repeat
event=WaitWindowEvent()
If EventWindow()=1
If event=#WM_CLOSE
Quit=1
EndIf
EndIf
Until Quit=1
Publié : lun. 06/mars/2006 11:49
par Backup
t'on delay(1000) est mal placé !!!
Code : Tout sélectionner
plein_ecran=0 ; avec 0 cela marche bien, la fenetre invisible le reste le temps prévu
; avec 1 : pour mettre la fenetre en plein ecran, la fenetre apparet trop tôt !
OpenWindow(0,0,0,400,300,#PB_Window_BorderLess|#PB_Window_ScreenCentered,"Intro")
OpenWindow(1, 284, 247, 800, 600, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_Invisible | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Programme")
Delay(1000)
If plein_ecran=1
SendMessage_(WindowID(1),#WM_SYSCOMMAND,#SC_MAXIMIZE,0)
EndIf
CloseWindow(0)
HideWindow(1,0)
Repeat
event=WaitWindowEvent()
If EventWindow()=1
If event=#WM_CLOSE
Quit=1
EndIf
EndIf
Until Quit=1
Publié : lun. 06/mars/2006 13:09
par olivier
Et oui mais le problème est le recalcul de la fenetre ! J'aimerais que l'on ne pas avoir de temps de latence d'affichage, pour ce faire j'aimerais que cela se fasse en mode invisible !
Mais merci quand même Dobro
Publié : mar. 07/mars/2006 1:33
par Backup
olivier a écrit :Et oui mais le problème est le recalcul de la fenetre ! J'aimerais que l'on ne pas avoir de temps de latence d'affichage,
heu j'ai rien compris en fait !

..
je vois pas de probleme d'affichage
la petite fenetre s'affiche en premier, puis 1 seconde apres la grande s'affiche nickel dans les deux cas de figure (0 ou 1)....

Publié : mar. 07/mars/2006 7:54
par olivier
Pour le problème de recalcul de la fênetre, il faut imaginer une fenetre avec plein de gadget, d'image à redimenssionner....
Sinon, moi quand je met plein_ecran=1, je ne voie pas la petite fenetre pendant 1 s !
Confirmes tu le fait de la voir ? (Avec Delay(1000) apres le maximize)
Merci Dobro pour le temps passé.
Publié : mar. 07/mars/2006 8:33
par Good07
Je confirme après test, dans les deux cas la petite fenêtre s'affiche puis une seconde après l'autre.
Dans les deux cas le résultat est identique.
Peut-être un problème de carte graphique chez toi ?
Publié : mar. 07/mars/2006 9:36
par olivier
Vous êtes entrain de me dire que lorsque vous lancez le code ci dessous, la fenetre reste invisible...... ou l'on s'est mal compris ?
Code : Tout sélectionner
OpenWindow(1, 284, 247, 800, 600, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_Invisible | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Programme")
SendMessage_(WindowID(1),#WM_SYSCOMMAND,#SC_MAXIMIZE,0)
;HideWindow(1,0)
Repeat
event=WaitWindowEvent()
If EventWindow()=1
If event=#WM_CLOSE
Quit=1
EndIf
EndIf
Until Quit=1
Publié : mar. 07/mars/2006 10:31
par Dr. Dri
Windows 98 se, la fenetre s'affiche.
essaye ca:
Code : Tout sélectionner
OpenWindow(1, 284, 247, 800, 600, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_Invisible | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Programme")
ExamineDesktops()
ResizeWindow(1, 0, 0, DesktopWidth(0), DesktopHeight(0))
;SendMessage_(WindowID(1),#WM_SYSCOMMAND, #SC_MAXIMIZE,0)
HideWindow(1,0)
Repeat
event=WaitWindowEvent()
If EventWindow()=1
If event=#WM_CLOSE
Quit=1
EndIf
EndIf
Until Quit=1
Dri
Publié : mar. 07/mars/2006 11:16
par Good07
Pas très clair ton histoire.
Bon pour récapituler:
Dans ton premier programme on voit une petite fenêtre qui s'affiche pendant une seconde. Ensuite elle est cachée par une autre fenêtre qui s'ouvre en plein écran.
Dans ton deuxième programme il affiche une fenêtre en plein écran. Le fait de décommenter la ligne ;HideWindow(1,0) ne change rien.
Idem pour le programme de Dri j'ai une fenêtre qui s'affiche en plein écran.
C'est tout...
Publié : mar. 07/mars/2006 13:22
par Dr. Dri
Dans mon code j'affiche la fenetre, enleve le hidewindow et elle n'apparait plus.
Dri

Publié : mar. 07/mars/2006 14:40
par olivier
Merci Dr.Dri......Mais...
J'avais bien pensé à cela, mais la fenetre ne réaggit pas correctement au évènement de la barre windows !
Je sais je suis chian, mais ....sans difficulté pas de gloire

Publié : mar. 07/mars/2006 15:25
par Dr. Dri
et ca ?
Code : Tout sélectionner
OpenWindow(1, 284, 247, 800, 600, #WS_MAXIMIZE | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_Invisible | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Programme")
;ExamineDesktops()
;ResizeWindow(1, 0, 0, DesktopWidth(0), DesktopHeight(0))
;SendMessage_(WindowID(1),#WM_SYSCOMMAND, #SC_MAXIMIZE,0)
HideWindow(1,0)
Repeat
event=WaitWindowEvent()
If EventWindow()=1
If event=#WM_CLOSE
Quit=1
EndIf
EndIf
Until Quit=1
Dri

Publié : mar. 07/mars/2006 15:36
par olivier
He bien non !
C'est sur cela marche, mais voilà, pour redimenssioner mes gadget j'utilise une petit procedure automatique :
Elle liste tous les gadget avec leur taille, dans la taille de fenetre défini. Et elle réadapte les gadget suivant la nouvelle valeur de la taille de la fenetre.
Bien sur je pourrais tout changer mais elle me simplifie énormément la vie, et j'aimerais la garder. Je l'avais posté dans truc et astuce, je la remet là :
Code : Tout sélectionner
.Enumeration
#gadget
EndEnumeration
Procedure sauve_taille_gadget(id_window)
Structure gadget
id.l
x.l
y.l
l.l
h.l
EndStructure
Global Rectangle_affichage.RECT
Global Dim gadget.gadget(1)
nb_gadget=0
For num_gadget=0 To #PB_Compiler_EnumerationValue
If IsGadget(num_gadget)
nb_gadget=nb_gadget+1
Redim gadget.gadget(nb_gadget)
gadget(nb_gadget)\id=num_gadget
gadget(nb_gadget)\x=GadgetX(num_gadget)
gadget(nb_gadget)\y=GadgetY(num_gadget)
gadget(nb_gadget)\h=GadgetHeight(num_gadget)
gadget(nb_gadget)\l=GadgetWidth(num_gadget)
EndIf
Next
gadget(0)\id=nb_gadget
gadget(0)\h=WindowHeight(id_window)
gadget(0)\l=WindowWidth(id_window)
Rectangle_affichage\left = 0
Rectangle_affichage\top = 0
Rectangle_affichage\right = WindowHeight(id_window)
Rectangle_affichage\bottom =WindowWidth(id_window)
EndProcedure
Procedure resize_gadget(id_window)
; rajouter dans le programme
;Case #PB_Event_SizeWindow
; resize_gadget(#Fenetre_base)
hw=gadget(0)\h
lw=gadget(0)\l
nhw=WindowHeight(id_window)
nlw=WindowWidth(id_window)
For num_gadget=1 To gadget(0)\id
If IsGadget(gadget(num_gadget)\id)
nx=gadget(num_gadget)\x*nlw/lw
ny=gadget(num_gadget)\y*nhw/hw
nh=gadget(num_gadget)\h*nhw/hw
nl=gadget(num_gadget)\l*nlw/lw
ResizeGadget(gadget(num_gadget)\id,nx,ny,nl,nh)
EndIf
Next
Rectangle_affichage\left = 0
Rectangle_affichage\top = 0
Rectangle_affichage\right = nhw
Rectangle_affichage\bottom = nlw
InvalidateRect_(WindowID(id_window), @Rectangle_affichage, #True)
EndProcedure
OpenWindow(1, 284, 247, 800, 600, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Programme")
CreateGadgetList(WindowID(1))
StringGadget(#gadget,10,10,200,20,"")
sauve_taille_gadget(1)
;ExamineDesktops()
;ResizeWindow(1, 0, 0, DesktopWidth(0), DesktopHeight(0))
;SendMessage_(WindowID(1),#WM_SYSCOMMAND, #SC_MAXIMIZE,0)
;HideWindow(1,0)
Repeat
event=WaitWindowEvent()
If EventWindow()=1
If event=#WM_CLOSE
Quit=1
EndIf
If event=#PB_Event_SizeWindow
Debug "resize"
resize_gadget(1)
EndIf
EndIf
Until Quit=1
Publié : mar. 07/mars/2006 17:17
par Dr. Dri
je comprend pas vraiment. peut-être que si tu détailles exactement ce que tu veux faire on pourra t'aider. Le problème que j'avais constaté c'est que la fenêtre perdait son invisiblité avec un évennement maximize (avec mon windows 98 )
Maintenant ce que j'ai cherché à résoudre c'est ca et rien d'autre ^^
Dri
Publié : mer. 08/mars/2006 7:28
par olivier
Et je t'en remercie car c'est exactement le problème. Mais il faut que dans un premier temps la fenetre s'ouvre en 800 par 600, pour que je puisse récupérer la taille des gadgets.
Donc le problème est bien de mettre la fenetre en plein ecran en mode invisible mais sans mettre #WS_MAXIMIZE dans openwindow.

Ah fait ch... le gamin
Merci à toi pour le temps passé.
