cs_olive73
Messages postés61Date d'inscriptionvendredi 1 octobre 2004StatutMembreDernière intervention 1 octobre 2009
-
1 mars 2006 à 15:04
Dalida
Messages postés6728Date d'inscriptionmardi 14 mai 2002StatutContributeurDernière intervention11 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
Dalida
Messages postés6728Date d'inscriptionmardi 14 mai 2002StatutContributeurDernière intervention11 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 !