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

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

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

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

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

Message 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)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

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

Message 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 ;).
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

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

Message 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:
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

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

Message 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
Dernière modification par GallyHC le mer. 08/juil./2015 15:38, modifié 1 fois.
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

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

Message 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:
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

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

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

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

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

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

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