Page 1 sur 1

Fenêtre sans icône dans la barre de tâche (sans API)

Publié : mer. 08/juil./2015 10:28
par Marc56
Pour les allergiques aux API comme moi et pour la compatibilité tous OS, voici une astuce pour créer une fenêtre sans icône dans la barre de tâche.
L'idée vient d'un contributeur du forum us (Rashad) excellent contributeur, à suivre pour ses démonstrations souvent élégantes de simplicité.
(L'idée de la fausse fenêtre vient peut-être de quelqu'un d'autre, plus ancien, je ne sais pas. Merci de corriger au besoin)
J'ai juste extrait la partie génération de fenêtre.

Ce système peut être utile pour les applications de type outils (postit, pendule etc)

Code : Tout sélectionner

; Créer une fenêtre sans icone dans la barre de tâche
; (Sans utilisation d'API)
; Purebasic 5.31 (sans doute compatible toutes versions)
; Marc56 - 08/07/15
; Basé sur une code de Rashad (contributeur forum PB us, mais ça date peut-être d'avant ?)
; Le principe consiste à dériver la fenêtre principale d'une fausse fenêtre (de type tool) hors écran

Enumeration 
    #Fake_Window
    #Main_Window
EndEnumeration

; --- La fausse fenêtre est placée hors écran et comme elle est de type Tool, elle n'a pas d'icone dans la barre de tâche
OpenWindow(#Fake_Window, -1, -1, 0, 0, "", #PB_Window_Tool)

; --- La fenêtre principale est une fenêtre fille donc elle n'est pas présente dans la barre de tâche
OpenWindow(#Main_Window, 0, 0, 300, 150, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered, WindowID(#Fake_Window))

Txt_Message = TextGadget(#PB_Any, 050, 050, 150, 050, "Vous avez vu ? je n'existe pas dans la barre de tâche :o)")

Repeat : Until WaitWindowEvent(50) = #PB_Event_CloseWindow

End
:wink:

Re: Fenêtre sans icône dans la barre de tâche (sans API)

Publié : mer. 08/juil./2015 14:07
par Kwai chang caine
Ouai, RASHAD c'est un malin, si la porte est fermée ...il passe par la fenetre :mrgreen:
Quasi rien ne l'arrete dans tout ce qui est du maniement des fenetres et gadgets 8O

Merci pour cette combine Marc56 8)

Re: Fenêtre sans icône dans la barre de tâche (sans API)

Publié : mer. 08/juil./2015 14:25
par GallyHC
Bonjour,

@Marc56 > Cela n'empêche pas d'avoir une fenêtre en haut a gauche, du à c'est propre bordure. Par contre dans ton exemple en poussant un peu plus loin un simple "HideWindow()", permet de ne plus avoir cette problématique comme suit:

Code : Tout sélectionner

; Créer une fenêtre sans icone dans la barre de tâche
; (Sans utilisation d'API)
; Purebasic 5.31 (sans doute compatible toutes versions)
; Marc56 - 08/07/15
; Basé sur une code de Rashad (contributeur forum PB us, mais ça date peut-être d'avant ?)
; Le principe consiste à dériver la fenêtre principale d'une fausse fenêtre (de type tool) hors écran

Enumeration 
    #Fake_Window
    #Main_Window
EndEnumeration

; --- La fausse fenêtre est placée hors écran et comme elle est de type Tool, elle n'a pas d'icone dans la barre de tâche
OpenWindow(#Fake_Window, -1, -1, 0, 0, "", #PB_Window_Tool)

; --- Rendre la fenêtre mère non visible.
HideWindow(#Fake_Window, #True)

; --- La fenêtre principale est une fenêtre fille donc elle n'est pas présente dans la barre de tâche
OpenWindow(#Main_Window, 0, 0, 300, 150, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered, WindowID(#Fake_Window))

Txt_Message = TextGadget(#PB_Any, 050, 050, 150, 050, "Vous avez vu ? je n'existe pas dans la barre de tâche :o)")

Repeat : Until WaitWindowEvent(50) = #PB_Event_CloseWindow

End
Enfin ce n'est qu'une idée de base, qui peu être utile. Mais dans le cas de ton exemple, il faut complètement caché la fenêtre mère (enfin c'est mon avis).

Cordialement,
GallyHC

PS: comme dirais surement "Kwai chang caine", c'est la porte ouverte au fenêtre ;).

Re: Fenêtre sans icône dans la barre de tâche (sans API)

Publié : mer. 08/juil./2015 14:51
par Marc56
Dans mon Windows 8.1 elle n'apparait pas du tout.

Effectivement un HideWindow() permet de la masquer complètement.

Sinon, il suffit de la mettre à -100, -100

:wink:

Re: Fenêtre sans icône dans la barre de tâche (sans API)

Publié : mer. 08/juil./2015 15:02
par GallyHC
perso avec Windows 7, j'ai en retirant les icones et mettant au plus simple cela :

Image

Comme je disais, c'est de poussé l'idée et donc on ce fout complément ou est la fenêtre mère (surtout que si multi-écrans tu peux être toujours visiblement).

Donc cela donne :

Code : Tout sélectionner

; Créer une fenêtre sans icone dans la barre de tâche
; (Sans utilisation d'API)
; Purebasic 5.31 (sans doute compatible toutes versions)
; Marc56 - 08/07/15
; Basé sur une code de Rashad (contributeur forum PB us, mais ça date peut-être d'avant ?)
; Le principe consiste à dériver la fenêtre principale d'une fausse fenêtre (de type tool) hors écran

Enumeration 
    #Fake_Window
    #Main_Window
EndEnumeration

; --- La fausse fenêtre est placée hors écran et comme elle est de type Tool, elle n'a pas d'icone dans la barre de tâche
; --- Même avec une fenêtre de 800x600 avec une base de 0:0:.
OpenWindow(#Fake_Window, 0, 0, 800, 600, "", #PB_Window_Tool)

; --- Rendre la fenêtre mère non visible.
HideWindow(#Fake_Window, #True)

; --- La fenêtre principale est une fenêtre fille donc elle n'est pas présente dans la barre de tâche
OpenWindow(#Main_Window, 0, 0, 300, 150, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered, WindowID(#Fake_Window))

Txt_Message = TextGadget(#PB_Any, 050, 050, 150, 050, "Vous avez vu ? je n'existe pas dans la barre de tâche :o)")

Repeat : Until WaitWindowEvent(50) = #PB_Event_CloseWindow

End
Tu as juste une fenêtre a peine visible (car j'ai mis 800x600), mais qui ne peu pas provoquer de problème si tu as plusieurs écran et respectant la même logique.

Cordialement,
GallyHC

Re: Fenêtre sans icône dans la barre de tâche (sans API)

Publié : mer. 08/juil./2015 15:10
par Marc56
Exact.

Je n'y avait pas pensé, mais on peut même le faire en une seule instruction avec #PB_Window_Invisible

Code : Tout sélectionner

; Créer une fenêtre sans icône dans la barre de tâche
; (Sans utilisation d'API)
; Purebasic 5.31 (sans doute compatible toutes versions)
; Marc56 - 08/07/15
; Le principe consiste à dériver la fenêtre principale d'une fausse fenêtre invisible
; Basé sur une code de Rashad (contributeur forum PB us, mais ça date peut-être d'avant ?)
; Amélioré sur une suggestion de GallyHC: masquer la fenêtre plutôt que la mettre hors écran (HideWindow)
; Rechapé par mes soins: créer la fenêtre directement en invisible #PB_Window_Invisible)

Enumeration 
    #Fake_Window
    #Main_Window
EndEnumeration

; --- La fausse fenêtre invisible
OpenWindow(#Fake_Window, 0, 0, 0, 0, "", #PB_Window_Invisible)

; --- La fenêtre principale est une fenêtre fille donc elle n'est pas présente dans la barre de tâche
OpenWindow(#Main_Window, 0, 0, 300, 150, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered, WindowID(#Fake_Window))

Txt_Message = TextGadget(#PB_Any, 050, 050, 150, 050, "Vous avez vu ? je n'existe pas dans la barre de tâche :o)")

Repeat : Until WaitWindowEvent(50) = #PB_Event_CloseWindow

End
(Je devrais relire la doc plus souvent)
:wink:

Re: Fenêtre sans icône dans la barre de tâche (sans API)

Publié : mer. 08/juil./2015 15:36
par GallyHC
Comme quoi plusieurs idées peuvent être bonne, j'avais même pas pensé à "#PB_Window_Invisible".
Marc56 a écrit :(Je devrais relire la doc plus souvent)
:wink:
Moi aussi.

Cordialement,
GallyHC

Re: Fenêtre sans icône dans la barre de tâche (sans API)

Publié : jeu. 16/juil./2015 11:35
par GallyHC
Bonjour,

A relire le topic, je ne comprend pas le fait "sans icone", car la fenetre qui apparait a une icone. Pour faire plus simple tu peux, juste utiliser la constante "#PB_Window_Tool", comme suit :

Code : Tout sélectionner

Enumeration 
    #Main_Window
EndEnumeration

OpenWindow(#Main_Window, 0, 0, 300, 150, "", #PB_Window_Tool | #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

Txt_Message = TextGadget(#PB_Any, 050, 050, 150, 050, "Vous avez vu ? je n'existe pas dans la barre de tâche :o)")

Repeat : Until WaitWindowEvent(50) = #PB_Event_CloseWindow

End
La fenêtre est juste un peu plus petite question bordure et vraiment sans icone, mais pas de combine, juste du PB simple.

Cordialement,
GallyHC

Re: Fenêtre sans icône dans la barre de tâche (sans API)

Publié : jeu. 16/juil./2015 12:43
par Marc56
Mon exemple initial n'était pas complet.
  • Il suffit de mettre la fenêtre Fake complètement hors zone (ex: -100, -100) (ou plus loin si on a par exemple deux écrans dont 1 à gauche de la fenêtre principale)
  • Une fenêtre de type tool n' a effectivement pas d’icône, mais elle à une barre titre et éventuellement une case de fermeture et je voulais une fenêtre sans bord ni barre titre #PB_Window_BorderLess
Je viens de tester sous Windows 8.1 et Windows XP ceci fonctionne (pas d'icône)

Code : Tout sélectionner

; Créer une fenêtre sans icone dans la barre de tâche
; (Sans utilisation d'API)
; Purebasic 5.31 (sans doute compatible toutes versions)
; Marc56 - 08/07/15
; Basé sur une code de Rashad (contributeur forum PB us, mais ça date peut-être d'avant ?)
; Le principe consiste à dériver la fenêtre principale d'une fausse fenêtre (de type tool) hors écran

Enumeration 
		#Fake_Window
		#Main_Window
EndEnumeration

; --- La fausse fenêtre est placée hors écran et comme elle est de type Tool, elle n'a pas d'icone dans la barre de tâche
OpenWindow(#Fake_Window, -100, -100, 0, 0, "", #PB_Window_Tool)

; --- La fenêtre principale est une fenêtre fille donc elle n'est pas présente dans la barre de tâche
OpenWindow(#Main_Window, 0, 0, 300, 150, "",  #PB_Window_ScreenCentered | #PB_Window_BorderLess, WindowID(#Fake_Window))

Txt_Message = TextGadget(#PB_Any, 050, 050, 150, 050, "Vous avez vu ? je n'existe pas dans la barre de tâche :o)")

Repeat : Until WaitWindowEvent(50) = #PB_Event_CloseWindow