Application caché au démarrage [Résolu]

steph064 90 Messages postés mardi 30 décembre 2008Date d'inscription 10 juin 2009 Dernière intervention - 28 mai 2009 à 11:40 - Dernière réponse : PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 29 mai 2009 à 12:52
3
Merci
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 

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de PCPT
steph064 90 Messages postés mardi 30 décembre 2008Date d'inscription 10 juin 2009 Dernière intervention - 28 mai 2009 à 14:22
0
Merci
Personne peut m'aider ? Même me mettre sur la voix de l'illumination ?
Commenter la réponse de steph064
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 28 mai 2009 à 23:07
0
Merci
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 
Commenter la réponse de PCPT
steph064 90 Messages postés mardi 30 décembre 2008Date d'inscription 10 juin 2009 Dernière intervention - 29 mai 2009 à 09:32
0
Merci
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é
Commenter la réponse de steph064
steph064 90 Messages postés mardi 30 décembre 2008Date d'inscription 10 juin 2009 Dernière intervention - 29 mai 2009 à 09:55
0
Merci
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.
Commenter la réponse de steph064
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 29 mai 2009 à 10:07
0
Merci
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?
Commenter la réponse de PCPT
steph064 90 Messages postés mardi 30 décembre 2008Date d'inscription 10 juin 2009 Dernière intervention - 29 mai 2009 à 10:07
0
Merci
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...
Commenter la réponse de steph064
steph064 90 Messages postés mardi 30 décembre 2008Date d'inscription 10 juin 2009 Dernière intervention - 29 mai 2009 à 10:14
0
Merci
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.
Commenter la réponse de steph064
steph064 90 Messages postés mardi 30 décembre 2008Date d'inscription 10 juin 2009 Dernière intervention - 29 mai 2009 à 11:05
0
Merci
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 ^^
Commenter la réponse de steph064
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 29 mai 2009 à 12:54
0
Merci
(encore que, à cause du _shown, pas forcément besoin de la sub Main )
Commenter la réponse de PCPT
steph064 90 Messages postés mardi 30 décembre 2008Date d'inscription 10 juin 2009 Dernière intervention - 29 mai 2009 à 15:20
0
Merci
Tu es mon héros

je vais étudier ce code soigneusement.

Merci beaucoup !
Commenter la réponse de steph064
steph064 90 Messages postés mardi 30 décembre 2008Date d'inscription 10 juin 2009 Dernière intervention - 29 mai 2009 à 15:29
0
Merci
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
Commenter la réponse de steph064
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 29 mai 2009 à 15:50
0
Merci
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 
Commenter la réponse de PCPT
steph064 90 Messages postés mardi 30 décembre 2008Date d'inscription 10 juin 2009 Dernière intervention - 29 mai 2009 à 15:55
0
Merci
D'accord, merci beaucoup de m'avoir accordé de ton précieux temps ^^
Commenter la réponse de steph064
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 29 mai 2009 à 16:02
0
Merci
pas de problème, bonne continuation ;)
Commenter la réponse de PCPT

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.