Application caché au démarrage

Résolu
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009 - 28 mai 2009 à 11:40
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 29 mai 2009 à 16:02
Bonjour à tous, voilà mon problème. Je voudrais démarrer mon application Windows composé de 3 forms, j'ai essayé dans un mainForm_load un "me.hide()" et un "me.visible = false" mais rien à faire.
J'ai vu que la solution serait de transformer l'application Windows en service Windows mais même en cherchant, je n'arrive pas à comprendre comment faire surtout que quand je change le type d'application en service, dans ma form principale, je ne peux plus faire par exemple form2.close() et form3.close(). Le rapport d'erreur me note ceci:
"Une référence à un membre non partagé requiert une référence d'objet".

Quelqu'un pourrait-il m'aider, je patauge depuis plus d'1h (voir même 2 ^^)
Merci beaucoup !

PS: si ça peut aider, le but de l'application c'est:
l'application se lance, on ne voit que l'icone dans le systray (ce que j'aimerais bien arriver à faire), régulièrement, un programme lit un fichier texte organisé comme ceci chaine1,chaine2,chaine3,ECHEC (ou REUSSIE),chaine4 lorsque durant la lecture du fichier le programme voir ECHEC, une infobulle s'affiche sur l'icone du systray, quand on clic sur cette infobulle la form principale (mainForm) s'affiche.
Tout ça c'est fait, il ne me reste plus que le démarrage avec Windows (ça j'ai trouvé des choses) et à ne pas afficher de form au démarrage de l'application (ça je patauge), et pour finir il faut que je publie l'application car elle n'est pas pour moi ^^

Je travail sous visual studio pro 2005 sous Windows XP

15 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
29 mai 2009 à 12:52
allez on va faire çà un peu plus propre quand même!

nouveau projet vb.net (2008) winform, nommé testsystray

on ajoute un module1 = >



Module Module1
    Public Sub Main()
        Dim fMain = New Form1
        Application.Run(fMain)
    End Sub
End Module





propriété du projet, application, formulaire de démarrage => Sub Main

NB : attention de bien décocher l'infrastructure

on pose un notifyicon1 sur la form1
on va :
*masquer la form dès le premier SHOW
*intercepter le click réduire, l'empêcher, et déclencher un HIDE

form1 =>



Public Class Form1
    Private Enum MessageConstants
        CANCEL = 0
        WM_SYSCOMMAND = &H112
        SC_MINIMIZE = &HF020
    End Enum

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        NotifyIcon1.Icon = Me.Icon
        NotifyIcon1.ShowBalloonTip(3000, Application.ProductName, "Double-cliquez pour afficher l'application", ToolTipIcon.Info)
    End Sub
    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
        Me.Hide()
    End Sub
    Protected Overrides Sub WndProc(ByRef m As Message)
        If (m.Msg = MessageConstants.WM_SYSCOMMAND) AndAlso (m.WParam.ToInt32 = MessageConstants.SC_MINIMIZE) Then
            m.Msg = MessageConstants.CANCEL
            Me.Hide()
        End If
        MyBase.WndProc(m)
    End Sub

    Private Sub NotifyIcon1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles NotifyIcon1.DoubleClick
        Me.Show()
    End Sub
End Class
<!-- Coloration syntaxique vb/vba/vb.net : http://charles.racaud.free.fr/code-syntaxing/ -->
Coloration syntaxique vb/vba/vb.net







qu'est-ce que çà donne?
++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
3
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009
28 mai 2009 à 14:22
Personne peut m'aider ? Même me mettre sur la voix de l'illumination ?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 mai 2009 à 23:07
salut,

passe par une sub Main et fait un load mainForm au lieu d'un mainForm.show

++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009
29 mai 2009 à 09:32
Si tu pouvais me donner des précisions sur le load mainForm stp, j'ai fais un module avec un sub main() mais après si je fais mainForm.showdialog() elle s'affiche sans prendre en compte le .hide dans le load de mainForm ou avec la propriété visible = false l forme n'apparait pas mais l'application se ferme.
D'ailleurs elle se ferme à chaque fois que je réduit la form et quand je la réduit je la cache (avec .hide, ça fait la même chose avec visible = false).
Je continu de chercher de mon côté
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009
29 mai 2009 à 09:55
En rusant je démarre ma form en minimisée et je met la propriété opacity à 0, pour la faire réapparaitre je la remet à 100. Pour l'instant je vais faire avec mais si vous avez mieux je suis preneur.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
29 mai 2009 à 10:07
salut,

tu peux aussi juste faire un hide dans l'évènement _show par exemple

nb : ce ne serait pas le systray (notifyicon) qui gène justement?
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009
29 mai 2009 à 10:07
Le problème avec mon astuce c'est que la form réapparait à moitiée dans la bordure de l'écran -_-' c'est pas très beau...
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009
29 mai 2009 à 10:14
Bin quand je fais .hide dans _load dans mainform ou ailleurs dans un évènement de mainForm (quand je la réduit) ça me ferme l'application. et je veux qu'elle reste en permanance moi ^^ (sauf si l'utilisateur la ferme de lui même).

Si tu peux mettre _load de main form dans le main() du module que j'ai fait (où se trouve le sub main() ), je sais pas comment faire et je trouve pas grand chose pour le moment.

"ce ne serait pas le systray (notifyicon) qui gène justement?"
ça je sais pas, quand je réduis la form je veux qu'elle se cache dans le systray, le notifyIcone est toujours activé, il change d'icone quand un programme trouve ECHEC dans un texte qui est découpé puis affiché dans les colonnes d'1 ListView.
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009
29 mai 2009 à 11:05
Bon, la ruse avec la propriété opacity à 0 et à 100 marche impec, c'est juste la première fois que l'on réouvre la form elle est à moitié dans le bord droit de l'écran mais après quand on la déplace et qu'on la recache, ça réapparait à sa position précédente.
Voilà je pense que ça ira mais je reste ouvert à toute autre proposition plus simple et plus intéressante ^^
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
29 mai 2009 à 12:54
(encore que, à cause du _shown, pas forcément besoin de la sub Main )
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009
29 mai 2009 à 15:20
Tu es mon héros

je vais étudier ce code soigneusement.

Merci beaucoup !
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009
29 mai 2009 à 15:29
Alors ton code marche mais si tu pouvais m'expliquer dans les grandes lignes ce que fait

Private Enum MessageConstants
        CANCEL = 0
        WM_SYSCOMMAND = &H112
        SC_MINIMIZE = &HF020
    End Enum

et

 Protected Overrides Sub WndProc(ByRef m As Message)        If (m.Msg MessageConstants.WM_SYSCOMMAND) AndAlso (m.WParam.ToInt32 MessageConstants.SC_MINIMIZE) Then
            m.Msg = MessageConstants.CANCEL
            Me.Hide()
        End If
        MyBase.WndProc(m)
    End Sub
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
29 mai 2009 à 15:50
je l'ai fait dans mon précédent message :



*intercepter le click réduire, l'empêcher, et déclencher un HIDE







la procédure WndProc reçoit tous les messages windows, on joue avec celui qui nous intéresse

google : subclassing

ne pas oublier cependant que ce "petit plus" n'est pas lié avec ton problème de départ !!

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009
29 mai 2009 à 15:55
D'accord, merci beaucoup de m'avoir accordé de ton précieux temps ^^
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
29 mai 2009 à 16:02
pas de problème, bonne continuation ;)
0
Rejoignez-nous