Page 1 sur 2

Window_Borderless+icone et popupmenu dans la barre[RéOUVERT]

Publié : mer. 23/janv./2008 7:05
par Stefou
Salut à tous les rois du clavier !

Je travail surtout avec des fenetres sans bord (#PB_Window_BorderLess ), mais des que l'on met cette option, l'icone et le menu dans la barre de tache de windows n'apparaissent plus.
L'icone : c'est jolie
Le menu : cela m'embête car ma fenêtre est des fois hors écran et je ne peut pas la déplacer sans la voir.

Alors si vous aviez une idée pour corriger cela se serait le bienvenu.
Dans tous les cas merci d'avoir lu mon post et bonne journée.

Stef

Code : Tout sélectionner

OpenWindow(0,1,1,200,200,"ess1",  #PB_Window_SystemMenu     )
;fenetre avec icone et popupmenu avec clic droit dans la barre de tache windows

OpenWindow(1,300,300,200,200,"ess2", #PB_Window_BorderLess    )
;fenetre sans icone et sans popupmenu dans la barre de tache windows



Repeat
  event=WaitWindowEvent()

Until event=#WM_CLOSE

Publié : ven. 25/janv./2008 19:38
par Anonyme2
Le menu qui apparaît sur le bouton de la barre de tache est le menu système

Voici comment faire pour l'ajouter dans ton cas, j'ai uniquement ajouté le style #WS_SYSMENU à la fenêtre, PB le gère bien.
Pour l'icône ça marchera peut-être (sous Vista l'icône est présente mais pas le menu)

Code : Tout sélectionner

OpenWindow(1,300,300,200,200,"ess2", #PB_Window_BorderLess | #WS_SYSMENU)
;fenetre sans icone et sans popupmenu dans la barre de tache windows


Repeat
  event=WaitWindowEvent()

Until event=#WM_CLOSE 
A+
Denis

Publié : sam. 26/janv./2008 11:50
par Stefou
Yahou !
Merci denis c'est ce que j'avais besoins

Bon week end

Stef

Publié : ven. 01/févr./2008 9:11
par Stefou
Bonjour vous tous !

J'ai encore un problème avec cette fenetre sans barre de titre. Lorsque la fenetre est en pleine écran elle passe par dessus la barre de tache de window. Ce comportement n'est pas habituel et déstabilisant.

Y a t-il un moyen d'ouvrir une fenetre sans titre qui prenne en compte la barre de tache ?

Merci d'avance

Code : Tout sélectionner

OpenWindow(1,1300,300,200,200,"ess2", #PB_Window_BorderLess | #WS_SYSMENU 	| #PB_Window_Maximize )



Repeat
  event=WaitWindowEvent()
  
Until event=#WM_CLOSE

Publié : ven. 01/févr./2008 9:52
par Ar-S
Un truc marrant,

en resolution 1280 x 1024 (avec la barre des taches toujours visible)

Code : Tout sélectionner

OpenWindow(1,0,0,1280,1023,"ess2", #PB_Window_BorderLess)
laisse apparaître à 100% la barre des taches

mais

Code : Tout sélectionner

OpenWindow(1,0,0,1280,1024,"ess2", #PB_Window_BorderLess)
en mettant 1024, la barre des taches disparait complètement.. 8O

Bizarroide non ?

Vu ton soucis, il faut que tu chopes les dimensions de l'écran
get (ex tu obtiens : L=1280 H=1024)

Tu ouvres ta fenêtre avec -1 pour H

Code : Tout sélectionner

OpenWindow(1,0,0,L,H-1,"ess3", #PB_Window_BorderLess)
ça devrait le faire

Publié : ven. 01/févr./2008 10:43
par RV
Pour quelque chose de plus précis, il vaut mieux connaitre la taille de la barre des tâches mais aussi ou elle est positionnée à l'écran (pas tjrs en bas).

Jette un oeil sur ce code qui te donne tout ce qu'il faut savoir sur la barre des tâches.

Code : Tout sélectionner

; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=1317&highlight=
; Author; Franco
; Date: 12. June 2003
; OS: Windows
; Demo: No

; (c) 2003 Franco's template - absolutely freeware 
; What is the status of the Windows-AppBar? 

Structure AppBar 
  NotUsed1.l 
  NotUsed2.l 
  NotUsed3.l 
  Position.l 
  LeftX.l 
  LeftY.l 
  RightX.l 
  RightY.l 
EndStructure 

Info.AppBar 

; Is AutoHide of AppBar active ? 
; Result: 0 = no , 1 = yes 
AppBarHide=SHAppBarMessage_(4,Info)-2 ; don't know axactly why I have to substract 2 
If AppBarHide = 0 : AppBarHide$ = "no" : EndIf 
If AppBarHide = 1 : AppBarHide$ = "yes" : EndIf 

; Position of the Windows-AppBar 
; Value of position information:  0 = left, 1 = top, 2 = right, 3 = bottom 
SHAppBarMessage_(5,Info) 
If Info\Position = 0 : Position$ = "left" : EndIf 
If Info\Position = 1 : Position$ = "top" : EndIf 
If Info\Position = 2 : Position$ = "right" : EndIf 
If Info\Position = 3 : Position$ = "bottom" : EndIf 

; Visible Height and Width of the Windows-AppBar 
; Real AppBar is always 2 pixel outside the Desktop 
; Only Micro$oft know's why! 
; Value of Height and Width: pixel 
LeftX$=Str(Info\LeftX) 
LeftY$=Str(Info\LeftY) 
RightX$=Str(Info\RightX) 
RightY$=Str(Info\RightY) 

; Now it's time to view the information 
Text$="AutoHide of AppBar active: "+AppBarHide$ 
Text$=Text$+Chr(13)+"Position of AppBar: "+Position$+Chr(13) 
Text$=Text$+Chr(13)+"Remember:" 
Text$=Text$+Chr(13)+"AppBar is always 2 pixel outside the Desktop!" 
Text$=Text$+Chr(13)+"Only Micro$oft know's why!"+Chr(13) 

RealHeight$=Str(Info\RightY-Info\LeftY) 
Text$=Text$+Chr(13)+"Real Height of AppBar: "+RealHeight$ 

RealWidth$=Str(Info\RightX-Info\LeftX) 
Text$=Text$+Chr(13)+"Real Width of AppBar: "+RealWidth$+Chr(13) 

Text$=Text$+Chr(13)+"Real left X position of AppBar: "+LeftX$ 
Text$=Text$+Chr(13)+"Real left Y position of AppBar: "+LeftY$ 
Text$=Text$+Chr(13)+"Real right X position of AppBar: "+RightX$ 
Text$=Text$+Chr(13)+"Real right Y position of AppBar: "+RightY$+Chr(13) 

PosVertical = Info\Position 
PosHorizontal = Info\Position 

If PosVertical = 0 Or PosHorizontal = 2 : VisibleHeight$=Str(Info\RightY-Info\LeftY-4) : Else : VisibleHeight$=Str(Info\RightY-Info\LeftY-2) : EndIf 
Text$=Text$+Chr(13)+"Visible Height of AppBar: "+VisibleHeight$ 

If PosVertical = 1 Or PosHorizontal = 3 : VisibleWidth$=Str(Info\RightX-Info\LeftX-4) : Else : VisibleWidth$=Str(Info\RightX-Info\LeftX-2) : EndIf 
Text$=Text$+Chr(13)+"Visible Width of AppBar: "+VisibleWidth$+Chr(13) 

If Info\Position = 0 : RightX$=Str(Info\RightX) : Else : RightX$=Str(Info\RightX-2) : EndIf 
If Info\Position = 1 : RightY$=Str(Info\RightY) : Else : RightY$=Str(Info\RightY-2) : EndIf 
If Info\Position = 2 : LeftX$=Str(Info\LeftX) : Else : LeftX$=Str(Info\LeftX+2) : EndIf 
If Info\Position = 3 : LeftY$=Str(Info\LeftY) : Else : LeftY$=Str(Info\LeftY+2) : EndIf 

Text$=Text$+Chr(13)+"Visible left X position of AppBar: "+LeftX$ 
Text$=Text$+Chr(13)+"Visible left Y position of AppBar: "+LeftY$ 
Text$=Text$+Chr(13)+"Visible right X position of AppBar: "+RightX$ 
Text$=Text$+Chr(13)+"Visible right Y position of AppBar: "+RightY$ 

MessageRequester("(c) Franco's AppBarInfo",Text$,0) 

End 
:wink:

Publié : ven. 01/févr./2008 13:09
par RV
Ce qui donne un truc comme ça!

Code : Tout sélectionner

ExamineDesktops()
DW=DesktopWidth(0)
DH=DesktopHeight(0)

Structure AppBar 
  NotUsed1.l 
  NotUsed2.l 
  NotUsed3.l 
  Position.l 
  LeftX.l 
  LeftY.l 
  RightX.l 
  RightY.l 
EndStructure 
Info.AppBar 

SHAppBarMessage_(5,Info) 
BLX=Info\LeftX : BLY=Info\LeftY : BRX=Info\RightX : BRY=Info\RightY 
BW=BRX-BLX : BH=BRY-BLY 

If BW=DW
  FX=0 : FW=DW : FH=DH-BH
  If BLY>0
    FY=0
  Else
    FY=BH
  EndIf
EndIf
If BH=DH
  FY=0 : FH=DH : FW=DW-BW
  If BLX>0
    FX=0
  Else
    FX=BW
  EndIf
EndIf

CreateImage(0,FW,FH)
StartDrawing(ImageOutput(0))
  Box(0,0,FW,FH,RGB(255,255,255))
  Box(1,1,FW-2,FH-2,RGB(0,0,0))
  LineXY(0,0,FW,FH,RGB(255,255,255))
  LineXY(FW,0,0,FH,RGB(255,255,255))
  txt$="Echap pour quitter"
  DrawText((FW-TextWidth(txt$))/2,(FH-TextHeight(txt$))/2,txt$,RGB(0,0,0),RGB(255,255,255))
StopDrawing()

OpenWindow(1,FX,FY,FW,FH,"gfdhkj",#PB_Window_BorderLess)
  CreateGadgetList(WindowID(1))
    ImageGadget(1,0,0,FW,FH,ImageID(0))

    
Repeat

  event=WaitWindowEvent()
  
Until GetAsyncKeyState_(#VK_ESCAPE)
End
:wink:

Publié : ven. 01/févr./2008 13:58
par Stefou
Merci bien pour ces codes qui on l'air fort intéressant.

Tout se complique un peu avec 2 écrans mais cela pourrait me sortire d'affaire.

J'attends tout de même encore un peu, car j'avais tout bidouiller pour pouvoir redimenssionner ma fenetre, et je découvre ce matin une option qui permet de rajouter le redimenssionement même a des femetres sans barre. J'ai commencer a creer un bout de code pour le menu popup de la barre de tache et il suffit de mettre #WS_SYSMENU.

Alors j'en ai ras le bol de coder pour m'appercevoir qu'en rajoutant une option, windows se charge de tout ! 8O

... si quelqu'un connait l'astuce ..... 8)

Publié : ven. 01/févr./2008 14:54
par Anonyme2
La méthode la plus simple pour récupérer la zone utile de l'écran initial (écran primaire) est l'API SystemParametersInfo_() avec le premier paramètre valant #SPI_GETWORKAREA

Cette API retourne dans la structure RECT (3ème paramètre, les dimensions de l'écran non recouvert par la barre de tache quelque soit sa position mais aussi des barre d'outils d'applications qui seraient ancrées.


Voilà un bout de code

Code : Tout sélectionner

    SystemParametersInfo_(#SPI_GETWORKAREA,0,@Ecran.RECT, 0)
    Largeur_Ecran = Ecran\right - Ecran\Left
    Hauteur_Ecran = Ecran\bottom - Ecran\top
    
    
    
Debug "X = "+Str(Ecran\left)
Debug "Y = "+Str(Ecran\top)
Debug "Largeur_Ecran = "+Str(Largeur_Ecran)
Debug "Hauteur_Ecran = "+Str(Hauteur_Ecran)

    
    
If OpenWindow(0, Ecran\left, Ecran\top, Largeur_Ecran, Hauteur_Ecran, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)

  

  Repeat
    EventID = WaitWindowEvent()

    If EventID = #PB_Event_CloseWindow  
      Quit = 1
    EndIf

  Until Quit = 1
  
EndIf

End  
  
Maintenant, je ne connais pas le résultat pour les fenêters sans bordures; il y a aussi le message

Code : Tout sélectionner

ShowWindow_(hMainWindow, #SW_SHOWMAXIMIZED)  
qui va mettre automatiquement la fenêtre pour quelle occupe toute la place dispo à l'écran(non recouverte par la barre de tache et compagnie).

Pour le second écran, il faut utiliser l'API

Code : Tout sélectionner

GetMonitorInfo
que je ne connais pas mais tu vas chercher et trouver, la doc MS sur l'API est ici

http://msdn2.microsoft.com/en-us/librar ... S.85).aspx

A+
Denis

Publié : ven. 01/févr./2008 20:48
par Stefou
Salut et merci pour vos réponses.... :? mais ce n'est toujours pas ce que je cherche.

Si c'est moi qui retaille la fenetre à la bonne taille, la fenetre n'est plus maximiser ! Elle n'a plus de taille moyenne de sauvegarder.
De plus si la barre de tache est cacher, avec une fenetre #PB_Window_BorderLess, elle ne réaparait pas !

Je cherche vraiment de retrouver les mêmes fonctionnalités que lorsque l'on ne met pas #PB_Window_BorderLess.

Merci de votre aide et j'éspère qu'un d'entre vous aura la solution....

Publié : ven. 01/févr./2008 21:03
par Le Soldat Inconnu
Moi, j'ai jamais réussi autrement que gérer la taille de la fenêtre moi même

Publié : ven. 01/févr./2008 21:07
par Kwai chang caine
ExamineDesktops()
DW=DesktopWidth(0)
DH=DesktopHeight(0)

Structure AppBar
NotUsed1.l
NotUsed2.l
NotUsed3.l
Position.l
LeftX.l
LeftY.l
RightX.l
RightY.l
EndStructure
Info.AppBar

SHAppBarMessage_(5,Info)
BLX=Info\LeftX : BLY=Info\LeftY : BRX=Info\RightX : BRY=Info\RightY
BW=BRX-BLX : BH=BRY-BLY

If BW=DW
FX=0 : FW=DW : FH=DH-BH
If BLY>0
FY=0
Else
FY=BH
EndIf
EndIf
If BH=DH
FY=0 : FH=DH : FW=DW-BW
If BLX>0
FX=0
Else
FX=BW
EndIf
EndIf

CreateImage(0,FW,FH)
StartDrawing(ImageOutput(0))
Box(0,0,FW,FH,RGB(255,255,255))
Box(1,1,FW-2,FH-2,RGB(0,0,0))
LineXY(0,0,FW,FH,RGB(255,255,255))
LineXY(FW,0,0,FH,RGB(255,255,255))
txt$="Echap pour quitter"
DrawText((FW-TextWidth(txt$))/2,(FH-TextHeight(txt$))/2,txt$,RGB(0,0,0),RGB(255,255,255))
StopDrawing()

OpenWindow(1,FX,FY,FW,FH,"gfdhkj",#PB_Window_BorderLess)
CreateGadgetList(WindowID(1))
ImageGadget(1,0,0,FW,FH,ImageID(0))


Repeat

event=WaitWindowEvent()

Until GetAsyncKeyState_(#VK_ESCAPE)
End
@RV
Pour info, ce code y marche pas chez moi (Normal :cry:)

Publié : ven. 01/févr./2008 23:13
par RV
Salut Kwai,
@RV
Pour info, ce code y marche pas chez moi (Normal )
Premièrement...t'as un écran? :lol:

Balancer un code qui ne marche pas alors ouais je te réponds qu'effectivement ce n'est pas normal! :(
Je l'ai pourtant testé dans tous les sens avant de le poster et chez moi il marche nickel! :D

Mais avant de se lancer dans un recherche du 'Pourquoi il marche chez moi et pas chez toi?',
y a plus simple...prenons la soluce de Denis! :D
Si si...crois-moi il a fait ses preuves! 8)

Pour ma part je dirais un grand merci à Denis pour son code!
Je ferai autrement maintenant! :wink:

Voila ce que je voulais faire.

Code : Tout sélectionner

SystemParametersInfo_(#SPI_GETWORKAREA,0,@Ecran.RECT, 0) 
Largeur_Ecran = Ecran\right - Ecran\Left 
Hauteur_Ecran = Ecran\bottom - Ecran\top 
    

CreateImage(0,Largeur_Ecran,Hauteur_Ecran)
StartDrawing(ImageOutput(0))
  Box(0,0,Largeur_Ecran,Hauteur_Ecran,RGB(255,255,255))
  Box(1,1,Largeur_Ecran-2,Hauteur_Ecran-2,RGB(0,0,0))
  LineXY(0,0,Largeur_Ecran,Hauteur_Ecran,RGB(255,255,255))
  LineXY(Largeur_Ecran,0,0,Hauteur_Ecran,RGB(255,255,255))
  txt$="Echap pour quitter"
  DrawText((Largeur_Ecran-TextWidth(txt$))/2,(Hauteur_Ecran-TextHeight(txt$))/2,txt$,RGB(0,0,0),RGB(255,255,255))
StopDrawing()
    
    
If OpenWindow(0, Ecran\left, Ecran\top, Largeur_Ecran, Hauteur_Ecran, "PureBasic Window", #PB_Window_BorderLess) ;#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) 

  StartDrawing(WindowOutput(0))
    DrawImage(ImageID(0),0,0)
  StopDrawing()  

  Repeat 
    EventID = WaitWindowEvent() 

  Until GetAsyncKeyState_(#VK_ESCAPE) 
  
EndIf 

End  

J'ai pris le fameux bon bout de code de Denis (SystemParametersInfo_()) en espérant qu'il ne me tapera sur les doigts! 8)

Et pas dans les cou... non plus! (dit ma copine) :D

Publié : sam. 02/févr./2008 0:43
par Kwai chang caine
Premièrement...t'as un écran?
Elle m'a encore fait bien rire celle la :lol:
Si tu parle du carré plat vertical, qui fait de la lumiere dans mes yeux quand je le regarde, oui ça je l'ai.
Dailleurs quand je le regarde, heureusement qu'il est allumé, ça en fait au moins un des deux qui "ai une lumiere". :lol:
Et pas dans les cou... non plus! (dit ma copine)
Elle a drolement raison ta copine.....dans les coudes ça fait drolement mal :lol:
Remarque quand je me cogne les coudes, c'est le seul moment ou je suis au courant :lol:

Je te remercie beaucoup cette fois ça marche.

Publié : sam. 02/févr./2008 11:40
par nico
@Stefou,

Tu souhaites qu'une fenêtre sans bordure se comporte comme une fenêtre avec une barre de titre, c'est pour faire des Skin?