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

C# Discussion :

[Débutant] [C# Word] changer la couleur d'une Shape de type Line


Sujet :

C#

  1. #1
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut [Débutant] [C# Word] changer la couleur d'une Shape de type Line
    Hello,

    Toujours aussi débutant, je n'arrive toujours pas à assimiler la philosophie et la documentation Microsoft. Je crée un document word, et je veux simplement mettre une marge gauche (un trait noir vertical). J'arrive à créer la ligne mais je n'arrive pas à changer la couleur. J'ai vaguement compris le principe mais je ne fais que tomber sur des exceptions "valeur hors limites", "read/only" etc... Si quelqu'un a la solution, je suis preneur. voici le code qui reproduit le problème.

    A+

    Pfeuh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    using Word = Microsoft.Office.Interop.Word;
    using System.IO;
     
    namespace bug_word_shape_line
    {
        class Program
        {
            static void Main(string[] args)
            {
                /* let's crerate the document */
                Word.Application word_app = new Word.Application();
                object missing = System.Reflection.Missing.Value;
                Word._Document document = word_app.Documents.Add(ref missing, ref missing, ref missing, ref missing);
                Word.Shape shape;
     
                /* first page vertical line */
                shape = document.Shapes.AddLine(50, 70, 50, 790);
     
                /* Let's save the document */
                object save_changes = false;
                object filename = Path.Combine(Directory.GetCurrentDirectory(), @"test.doc");
                document.SaveAs(ref filename);
                document.Close();
                word_app.Quit();
            }
        }
    }

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Quelques chose comme ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
    /* first page vertical line */
    shape = document.Shapes.AddLine(50, 70, 50, 790);
     
    With shape.Line
    	.Weight = 0.75
    	'set black color 
    	.ForeColor.RGB = RGB(0, 0, 0)
    End With
     
    /* Let's save the document *
    ...

  3. #3
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Ça semble être du VB... J'ai essayé en C#:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                /* first page vertical line */
                shape = document.Shapes.AddLine(50, 70, 50, 790);
                shape.Line.ForeColor.RGB = RGB(0, 0, 0);
    Mais dans mon petit programme, C# ne sait pas ce qu'est RGB... Du coup ça, ça marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                /* first page vertical line */
                shape = document.Shapes.AddLine(50, 70, 50, 790);
                shape.Line.ForeColor.RGB = 0;
    Que dois-je inclure au projet pour que RGB soit reconnu?

  4. #4
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Bon, ne soyons pas plus royaliste que le roi, j'ai une solution qui marche. Je commence à comprendre que pour ce qui est des outils microsoft, j'aurais plus droit à des recettes de cuisine (qui marchent, certes), qu'à de véritables explications. En tout cas merci, mon problème est résolu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    using Word = Microsoft.Office.Interop.Word;
    using System.Drawing;
    using System.IO;
    using Core = Microsoft.Office.Core;
    
    namespace bug_word_shape_line
    {
        class Program
        {
            static int rgbCOLOR_BLACK = 0x000000;
    
            static void Main(string[] args)
            {
                /* let's create the document */
                Word.Application word_app = new Word.Application();
                object missing = System.Reflection.Missing.Value;
                Word._Document document = word_app.Documents.Add(ref missing, ref missing, ref missing, ref missing);
                Word.Shape shape;
    
                /* first page vertical line */
                shape = document.Shapes.AddLine(50, 70, 50, 790);
                shape.Line.ForeColor.RGB = rgbCOLOR_BLACK;
    
                /* Let's save the document */
                object save_changes = false;
                object filename = Path.Combine(Directory.GetCurrentDirectory(), @"test.doc");
                document.SaveAs(ref filename);
                document.Close();
                word_app.Quit();
            }
        }
    }

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Désoler pour le code VBA. Sinon pour le RGB ceci devrai fonctionner (l'un ou l'autre), ça te permettra de changer la couleur si besoin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    shape.Line.ForeColor.RGB = System.Drawing.Color.FromArgb(0,0,0).ToArgb();
    shape.Line.ForeColor.RGB = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);

  6. #6
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    J'avais déjà essayé, ça ne marchait pas, Color n'était pas reconnu... Il fallait ajouter System.Drawing aux références, et là ça fonctionne... Mais le message d'erreur était trompeur.

    Je ne sais pas si c'est normal, mais je dois passer rouge vert bleu dans un ordre inverse pour que ça marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Drawing.Color.FromArgb(bleu, vert, rouge).ToArgb();
    En tout cas, c'est résolu, merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Changer la couleur d'une shape
    Par Nyckel95 dans le forum Général VBA
    Réponses: 1
    Dernier message: 01/01/2016, 13h47
  2. Changer la couleur d une ligne de tableau au survol
    Par logica dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/07/2005, 11h57
  3. Réponses: 7
    Dernier message: 28/06/2005, 11h53
  4. Réponses: 8
    Dernier message: 14/05/2004, 11h18
  5. [VB6]Changer la couleur d'une ligne d'un ListView
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/03/2003, 17h02

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