IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Curseur perso absent lors de la publication d'un projet


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Astronome amateur
    Inscrit en
    Juillet 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Astronome amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 63
    Par défaut Curseur perso absent lors de la publication d'un projet
    Bonjour à tous

    J'ai créé un projet à l'aide de Visual Basic 2010 Express. Dans ce projet, j'ai créé un curseur avec extension ".cur". En mode débogage, le curseur apparait bien lorsque le pointeur est sur une picturebox présente sur le form, conformément à ce que j'ai programmé.
    L'image du curseur est stockée dans le dossier "Ressources" du projet et est bien visible dans l'onglet "Ressources" lorsque je visualise les propriétés du projet.

    J'ai lancé la publication du projet, qui ne pose aucun problème. Lorsque j'installe le projet compilé sur un autre ordinateur, au lancement de l'application, j'ai un message d'erreur qui fait référence à une exception non gérée dont le texte est le suivant :
    ************** Texte de l'exception **************
    System.ArgumentException: Format d'image non valide. Le fichier image peut être endommagé.
    Nom du paramètre*: stream ---> System.Runtime.InteropServices.COMException: Exception de HRESULT : 0x800A01E1 (CTL_E_INVALIDPICTURE)
    à System.Windows.Forms.UnsafeNativeMethods.IPersistStream.Load(IStream pstm)
    à System.Windows.Forms.Cursor.LoadPicture(IStream stream)
    --- Fin de la trace de la pile d'exception interne ---

    Pour moi, c'est du chinois. Par contre, le message relate bien un problème de curseur, et mon curseur n'est effectivement pas visible lorsque le pointeur est sur la picturebox.

    J'ai balayé tous les onglets relatifs à la publication du projet et je ne trouve rien que je puisse faire vis-à-vis de mon curseur.

    Quelqu'un aurait-il une idée de ce que je devrais faire ?

    Merci à vous.

    JP

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Par défaut
    Bonjour,

    Lorsque tu sélectionnes ton fichier, dans Resources, normalement dans la fenêtre des propriétés on peut préciser des options sur les fichiers, dont Action de génération. De mémoire je pense qu'il faudrait le mettre sur Ressource incorporée, et ainsi le fichier sera invisible, puisque incorporé dans l'exe et donc 'accessible' à celui-ci.

    Bon code,
    J@ck.

  3. #3
    Membre averti
    Homme Profil pro
    Astronome amateur
    Inscrit en
    Juillet 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Astronome amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 63
    Par défaut
    Bonjour J@ck et merci pour ta proposition, mais cela ne fonctionne pas.

    J'ai modifié le paramètre "Action de génération, mais rien n'y fait. J'ai testé plusieurs des valeurs dans la liste qui pouvait me paraitre probantes, mais j'ai toujours le message d'erreur.

    Lorsque je supprime la ligne faisant appel à mon curseur perso, je n'ai plus le message d'erreur. C'est bien un problème lié au curseur. J'ai également essayé d'autres modifications que j'ai glâné ça et là sur le net, mais pas de solution qui fonctionne.

    Le pire, c'est que j'ai remis le code comme d'origine sur mon projet (j'ai recopié le code et l'image sur une sauvegarde) et maintenant j'ai un message d'erreur sur la première ligne pour la valeur entre parenthèses "My.Resources.Curseur_cible"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Using Curseur As New MemoryStream(My.Resources.Curseur_cible)
                PictureBox2.Cursor = New System.Windows.Forms.Cursor(Curseur)
    End Using
    Message d'erreur ==> 'Curseur_cible' est un type dans 'Resources' et ne peut pas être utilisé en tant qu'expression. Encore une explication claire comme du jus de chique !

    Me voila bien avancé !

    Et puis, j'ai encore un autre problème qui se pose lors de la publication, mais que j'expose dans une autre discussion. ne mélangeons pas tout.

    J'ai l'impression que dès qu'on publie un projet de plus de 10 lignes (le mien en fait 3000) avec des actions qui ne sont pas basiques, ça ne se passe pas bien !

    Affaire à suivre.

  4. #4
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    1- Tu ajoutes le fichier portant l'extension .cur dans les ressources de ton projet en tant que fichier (pas image, pas icone,...etc... !!!). Pas besoin de changer le mode de génération !
    2- Dans ta classe Form1, tu déclares une variable globale de type Cursor qui stockera le curseur customisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Class Form1
     
        Private m_ArrowCur As Cursor
     
    End Class
    3- Au lancement de ton programme, exemple à l'event Load de ton Form1 :
    - tu extraies le fichier sur le disque dur
    - tu instancies un nouveau cursor en passant le chemin du fichier préalablement extrait
    - tu affectes l'objet à la variable globale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            If Not File.Exists("C:\ArrowCur.cur") Then
                File.WriteAllBytes("C:\ArrowCur.cur", My.Resources.Arrow)
            End If
            m_ArrowCur = New Cursor("C:\ArrowCur.cur")
        End Sub
    4- Tu génères l'event MouseHover de PictureBox1 et tu affectes la variable du curseur customisé à Me.Cursor :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Private Sub PictureBox1_MouseHover(sender As Object, e As EventArgs) Handles PictureBox1.MouseHover
            Me.Cursor = m_ArrowCur
        End Sub
    5- Tu génères l'event MouseLeave de PictureBox1 et tu affectes la variable du curseur par défaut de Windows à Me.Cursor :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
        Private Sub PictureBox1_MouseLeave(sender As Object, e As EventArgs) Handles PictureBox1.MouseLeave
            Me.Cursor = Me.DefaultCursor
        End Sub
    That's ALL.

    ++

  5. #5
    Membre averti
    Homme Profil pro
    Astronome amateur
    Inscrit en
    Juillet 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Astronome amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 63
    Par défaut
    Bonjour Wallace1 et merci pour tes explications.

    Je pense avoir compris la démarche que tu proposes. Par contre, j'ai un message d'erreur qui apparait, dont j'imagine l'origine, mais je ne trouve pas le remède !

    Voici ce que j'ai fait :
    Pour ne pas risquer d'ajouter des erreurs à tes lignes de code, j'ai dupliqué mon curseur (qui s'appelle Curseur_cible.cur et qui est dans le dossier ressources de mon projet) et je l'ai renommé Arrow.cur. Dans les propriétés du projet, à l'onglet Ressources, j'ai ajouté le fichier Arrow.cur en ne modifiant aucun autre paramètre.

    J'ai recopié tes lignes de code dans mon projet.

    A la ligne m_ArrowCur = New Cursor("C:\ArrowCur.cur"), j'ai un message d'erreur en référence à ce qui est entre parenthèses : Arguments trop nombreux pour 'Public Sub New()'.

    Cela me rappelle le problème que j'ai eu avec le code initial de mon curseur et qui présentait la même erreur.

    Vu que dans mon projet, j'utilise DataVisualization.Charting pour tracer des courbes (voir discussion et solution ici : https://www.developpez.net/forums/d1...tion-charting/ ), la solution proposée qui consistait à remplacer ma ligne "PictureBox2.Cursor = New Cursor(Curseur)" par "PictureBox2.Cursor = New System.Windows.Forms.Cursor(Curseur)" a fonctionné.

    Par rapport à ton code, j'ai essayé quelques modifications au niveau de la ligne m_ArrowCur = New Cursor("C:\ArrowCur.cur"), par exemple en mettant m_ArrowCur = New System.Windows.Forms.Cursor("C:\ArrowCur.cur"), mais j'ai un autre message d'erreur : Impossible de convertir une valeur de type 'System.Windows.Forms.Cursor' en 'System.Windows.Forms.DataVisualization.Charting.Cursor'. Bonjour l'explication

    J'ai vérifié, le curseur est bien copié sur le disque C en tant que ArrowCur.cur.

  6. #6
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    As-tu modifiés le type de la variable globale également ????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Private m_ArrowCur As System.Windows.Forms.Cursor

Discussions similaires

  1. Erreur lors de la publication d'un projet web
    Par soso78 dans le forum Débuter
    Réponses: 1
    Dernier message: 31/07/2009, 13h56
  2. champ absents lors de la creation d'un etat
    Par laurent.w dans le forum IHM
    Réponses: 2
    Dernier message: 27/12/2006, 13h01
  3. problème lors de la publication chez 1and1
    Par aude_1603 dans le forum 1&1
    Réponses: 3
    Dernier message: 27/02/2006, 14h58
  4. Composant perso disparaît lors du redimensionnement du composant parent
    Par GENERYS dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 05/10/2005, 22h07
  5. Position de travail d'un curseur perso
    Par bjl dans le forum Outils
    Réponses: 2
    Dernier message: 19/05/2003, 13h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo