Pb avec ShowInTaskbar

cs_olive73
Messages postés
61
Date d'inscription
vendredi 1 octobre 2004
Statut
Membre
Dernière intervention
1 octobre 2009
- 1 mars 2006 à 15:04
Dalida
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
- 1 mars 2006 à 18:38
Bonjour,

voila mon petit probleme.
Je souhaite reduire mon appli dans le systray, sans l'afficher dans la barre des taches.
Quand l'appli n'est plus reduite, je ne veux plus qu'elle soit dans le systray, mais dans la barre des taches.
Jusque la rien de complique. Le probleme est que lorsque je reduis ma fenetre, l'icone apparait bien dans le systray, mais le fait de faire ShowInTaskbar = False arrete l'execution du prog.
Si je mets ShowInTaskbar = False en commentaire tout se passe bien, sauf que l'icone est egalement dans la barre des taches... :-((

Si quelqu'un a une idee je suis preneur

Voila le code que j'ai :

Lorsque la fenetre se reduit


notifyIcon1.Visible =
True
Trappel.Enabled = True 'Active le Timer
windowstate = 1 'Reduit la fenetre
ShowInTaskbar = False

Au bout d'un certain temps la fenetre n'est plus reduite


notifyIcon1.Visible =
False
windowstate = 0

Trappel.Enabled = False
ShowInTaskbar = True

3 réponses

crenaud76
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
28
1 mars 2006 à 15:58
As-tu essayer de mettre le ShowInTaskBar = False en 1er, càd avant les 3 lignes qui précèdent ...

Christophe R
0
cs_olive73
Messages postés
61
Date d'inscription
vendredi 1 octobre 2004
Statut
Membre
Dernière intervention
1 octobre 2009

1 mars 2006 à 17:04
Oui, meme combat. J'ai essaye de le positionner a differents endroits, j'ai toujours le meme pb
0
Dalida
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016

1 mars 2006 à 18:38
salut,



peut-être une piste :

je viens de tester en enlevant de la
barre des taches à la désactivation du formulaire et en l'y remettant à
l'activation du formulaire.

ça plantouille gaiement mais cela m'a
appris quelquechose : le Handle est détruit lorsque que le formulaire
n'est plus actif. donc au moment où tu attibues False à la propriété
ShowInTaskBar, cette dernière n'est plus accessible. en fait le Handle
attérit dans le Garbage Collector et est rappellé par un CallBack, il faudrait attribuer la valeur avant ce moment...



donc intervenir sur un évènement intercalé (si il existe avec Handles WndProc) ou appellé un CallBack sur le GC puis détruire à nouveau le Handle...

oulala, c'est bien compliqué tout ça !

si quelqu'un a une idée... !



le test :

Private Sub frmMain_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated

ShowInTaskbar = True

End Sub



Private Sub frmMain_Deactivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Deactivate

ShowInTaskbar = False

End Sub



le texte de l'erreur :

CallbackOnCollectedDelegate a été détecté

Message: Un rappel a été effectué sur un
délégué récupéré par le garbage collector de type
'System.Windows.Forms!System.Windows.Forms.NativeMethods+WndProc::Invoke'.
Cela peut entraîner un arrêt brutal de l'application, des
dysfonctionnements et des pertes de données. Lors du passage de
délégués à du code non managé, ils doivent être maintenus actifs par
l'application managée jusqu'à ce qu'il soit garanti qu'ils ne seront
jamais appelés.



si j'attribue au moment de la création du Handle j'obtiens :

L'exception System.ComponentModel.Win32Exception n'a pas été gérée

Message="Erreur lors de la création d'un handle de fenêtre."

Source="System.Windows.Forms"

ErrorCode=-2147467259

NativeErrorCode=1400

StackTrace:

à System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)

à System.Windows.Forms.Control.CreateHandle()

à System.Windows.Forms.Form.CreateHandle()

à System.Windows.Forms.Control.RecreateHandleCore()

à System.Windows.Forms.Form.RecreateHandleCore()

à System.Windows.Forms.Form.set_ShowInTaskbar(Boolean value)

à Dalida.AddressBook.Application.frmMain.frmMain_Deactivate(Object sender, EventArgs e)

à System.Windows.Forms.Form.OnDeactivate(EventArgs e)

à System.Windows.Forms.Form.set_Active(Boolean value)

à System.Windows.Forms.Form.WmActivate(Message& m)

à System.Windows.Forms.Form.WndProc(Message& m)

etc...







[ Dalida ]<hr>
pensez à indiquer le langage utilisé et sa version !
0