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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

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

Message 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
Dernière modification par Stefou le ven. 01/févr./2008 9:08, modifié 4 fois.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message par Stefou »

Yahou !
Merci denis c'est ce que j'avais besoins

Bon week end

Stef
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message 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
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message 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
RV
Messages : 209
Inscription : sam. 18/nov./2006 15:16

Message 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:
RV
Messages : 209
Inscription : sam. 18/nov./2006 15:16

Message 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:
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message 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)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message 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....
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Moi, j'ai jamais réussi autrement que gérer la taille de la fenêtre moi même
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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:)
RV
Messages : 209
Inscription : sam. 18/nov./2006 15:16

Message 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
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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?
Répondre