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 :

[WPF] Probleme canvas + couleur + timer


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 41
    Par défaut [WPF] Probleme canvas + couleur + timer
    Bonjour,

    je dessine un carre (qui en fait mon canvas) en fonction des different processus lancé sur mon ordinateur.

    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
     
     public Canvas dessineRectangle(int width, int heigth, int top, int left)
            {
                Canvas windowsCanvas = new Canvas();
     
                windowsCanvas.Background = new SolidColorBrush(colors[i]); // tableau de differentes couleurs
                windowsCanvas.Width = width;
                windowsCanvas.Height = heigth;
                Canvas.SetTop(windowsCanvas, top);
                Canvas.SetLeft(windowsCanvas, left);
                i++;
                if (i == colors.Length)
                    i = 0;
                return windowsCanvas;
            }
    cette fonction est appelé

    dans une autre fonction

    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
     
     public void Info(Canvas can)
            {
                Process[] processList = Process.GetProcesses();
     
                foreach (Process process in processList)
                {
                    {
                        IntPtr ptr = process.MainWindowHandle;
     
                        RECT ProcRect = new RECT();
                        GetWindowRect(ptr, ref ProcRect).Equals(true);
                        int height = (ProcRect.Bottom - ProcRect.Top) / coeff;
                        int width = (ProcRect.Right - ProcRect.Left) / coeff;
                        int left = ProcRect.Left / coeff;
                        int top = ProcRect.Top / coeff;
                        can.Children.Add(dessineRectangle(width, height, top, left));    
                    }
                }
    J'ai donc une representation sous forme de carre de mes fenetre windows ouverte.

    la fonction Info est elle appele a l'aide d'un timer pour rafraichir l'ecran.

    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
     
     
     public MainWindow()
            {
                InitializeComponent();
     
     
                DispatcherTimer timer = new DispatcherTimer();
                timer.Tick += new EventHandler(timer_tick);
                timer.Interval = new TimeSpan(0, 0, 0);
                timer.Start();
     
                myParentCanvas = new Canvas();
                positionMainWindows();
     
     
                this.AddChild(myParentCanvas);
     
            }
     
            private void timer_tick(object sender, EventArgs e)
            {
                myParentCanvas.Children.RemoveRange(0, myParentCanvas.Children.Count);
                Info(myParentCanvas);
     
            }
    J'aimerais pouvoir associer une couleur differente a mes canvas sans que celle ci change. En effet comme dans mon timer j'appelle Info() qui appeller Draw Rectangle. J'ai un changement de couleur continu... normal. Mais je ne vois pas comment faire autrement. J'espere avoir ete clair.

    Si quelqu'un peu m'aider.

    merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu pourrais créer un Dictionary<int, Color> pour associer chaque ID de processus (ou de fenêtre) à une couleur. Par contre ça veut dire qu'il faut maintenir le contenu du dictionnaire : ajouter les nouvelles fenêtres, enlever celles qui ont été fermées, et mettre à jour celles qui ont bougé.

    Et au point où tu en es, ce serait mieux d'associer plutôt chaque processus à un Canvas, pour ne pas les recréer tous à chaque fois.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 41
    Par défaut
    Merci

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

Discussions similaires

  1. problem avec un timer
    Par ridouani dans le forum C++
    Réponses: 5
    Dernier message: 20/09/2005, 16h43
  2. [Thread] Probleme avec mon Timer
    Par Nico66 dans le forum EDT/SwingWorker
    Réponses: 10
    Dernier message: 02/06/2005, 17h10
  3. probleme de couleur de fond sous mozilla et pas sous IE
    Par soccernet dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 27/12/2004, 10h45
  4. probleme de couleur
    Par ellipse dans le forum OpenGL
    Réponses: 5
    Dernier message: 29/10/2004, 12h59
  5. [newbie] Probleme de couleurs
    Par Racailloux dans le forum OpenGL
    Réponses: 3
    Dernier message: 29/04/2004, 14h32

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