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++/CLI Discussion :

Comment créer une boite à outils


Sujet :

C++/CLI

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut Comment créer une boite à outils
    Bonjour,

    Je voudrais construire en C++/CLI un éditeur permettant de créer des tableaux de contrôle du genre de ce qu’on peut trouver dans une centrale nucléaire ; donc avec des petits dessins de tuyaux, de vannes, de pompes, ….

    Il faudrait donc que je puisse faire une petite boite à outils contenant des symboles (vannes, tuyaux, raccords, pompes, …)

    Puis que l’utilisateur puisse choisir un symbole et le placer sur une grille là où il le veut …

    Et au final qu’on puisse sauver le dessin pour pouvoir le lire par la suite avec une autre application.

    Il y a énormément de choses que je ne sais pas faire et pour lesquelles je risque de m'embarquer dans des solutions compliquées alors que des solutions simples existent peut-être.

    Par exemple, je ne vois pas du tout comment créer la boite à outils ...

    Est ce que quelqu'un saurait où trouver un exemple de choses ressemblantes?

    Merci d'avance pour votre aide.

    Bonne soirée

    Jean-Louis

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    L'éditeur est-il à destination de développeurs, donc une boîte à outil à intégrer dans VS ou est-il à destination de l'utilisateur finale de l'application ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par bacelar Voir le message
    L'éditeur est-il à destination de développeurs, donc une boîte à outil à intégrer dans VS ou est-il à destination de l'utilisateur finale de l'application ?
    Bonjour Bacelar,

    Merci de t'intéresser à mon cas.

    L'éditeur est à destination de l'utilisateur final qui n'est pas informaticien.

    Le but est de pouvoir configurer l'installation sans recompiler l'application.

    L'idée serait donc de fournir un éditeur qui permettrait de configurer le réseau de tuyauterie avec les vannes, les filtres, les pompes, les échangeurs, ..... puis d'enregistrer cette configuration dans un fichier.

    Ensuite il n'y aurait plus qu'à lancer l'application qui lirait la configuration au démarrage.

    J'ai dans la tête de faire une zone de dessin avec des petits pavés (comme un jeu d'échecs) et dans chaque pavé l'utilisateur pourrait venir coller des éléments qu'il choisirait dans la boite à outils.

    Merci encore et bonne journée.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    C'est un énorme travail si vous voulez tous faire vous même.
    La plupart des bibliothèques de contrôles pour framework graphique sous Windows du commerce fournissent des composants de type Designer.
    Si vous en utilisez déjà une, vérifiez qu'elle ne dispose pas de ce type de contrôle.
    Vous pouvez toujours chercher sur le net des versions gratuites mais vous risquer souvent de vous trouvez dans une impasse.

    Vous pouvez aussi tenter d'utiliser le contrôle Designer fourni avec .NET.
    http://msdn.microsoft.com/en-us/magazine/cc163871.aspx

    Chaque Designer à des manières de faire différentes pour ce qui touche à leur boite à outil.

    Vérifiez que les problématiques de vos utilisateurs sont de type WorkFlow. Si c'est le cas, je pense que vous devriez regarder du coté de WF pour avoir des Designer plus spécifiques.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Merci Bacelar,

    Je me doutais que ce n'était pas un petit travail

    Bon donc, je commence par finir le reste et je m'y attèlerais plus tard.

    Merci encore et bonne journée ...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Bonjour tout le monde, bonjour Bacelar,


    Je suis revenu à ce "petit" sujet consistant à faire un tableau de contrôle optique sur écran.

    Je commence donc a faire un quadrillage de mon écran en pavés et pour pouvoir facilement attacher des évènements à mes pavés, j'ai choisi une solution consistant à faire un quadrillage avec des pictureBox ...

    Ce n'est probablement pas très intelligent

    Cela marche, mais c'est d'une lenteur épouvantable

    Donc voilà mon bout de code qui affiche des pavés de 13 x 13 pixels côte à côte pour faire un tableau de 100 x 50 pavés :

    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
     
    PictureBox^ curBox;
     
    private: System::Void Afficher()
    {
    	int i, j;
    	for (int i = 0; i < i_max; i++)
    	{	
    		for ( int j = 0; j < j_max ; j++)
    		{
    			this->groupBox1->SuspendLayout();						 
    			curBox = gcnew PictureBox();
    			curBox->Top = 12 * j;
    			curBox->Left = 12 * i;
    			curBox->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
    			curBox->Size = System::Drawing::Size(13, 13);
    			this->groupBox1->Controls->Add(curBox);
    			this->groupBox1->PerformLayout();
    			this->groupBox1->ResumeLayout(true);
    		}
    	}			 
    }
    Est ce que quelqu'un connaitrait un moyen moins lourdingue?


    Bonne soirée

    Jean-Louis

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Houla, c'est super pas optimal tous ça.

    Primo : SuspendLayout et ResumeLayout sont des fonctions pour demander au contrôle contenant de ne pas recalculer le "layout" des contrôles enfants.
    Il ne faut donc pas mettre l'appel à ces fonctions "dans" les boucles for, mais autour des boucles :
    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
    private: System::Void Afficher()
    {
    	this->groupBox1->SuspendLayout();	int i, j;
    	for (int i = 0; i < i_max; i++)
    	{	
    		for ( int j = 0; j < j_max ; j++)
    		{				 
    			curBox = gcnew PictureBox();
    			curBox->Top = 12 * j;
    			curBox->Left = 12 * i;
    			curBox->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
    			curBox->Size = System::Drawing::Size(13, 13);
    			this->groupBox1->Controls->Add(curBox);
    			this->groupBox1->PerformLayout();
    		}
    	}
    	this->groupBox1->ResumeLayout(true);
    }
    On passe de "i_max*j_max calcul" de "layout" à 1.


    Secondo : Vous n'avez pas besoin d'ajouter des nouveaux pictureBox à chaque affichage mais vous ne les créez que dans le constructeur de votre Form, après l'appel à la méthode "InitializeComponent". Cela réduira drastiquement le nombre de contrôle créé, de "i_max*j_max" par affichage à "i_max*j_max" pour la durée du programme.

    Tercio : pour afficher un quadrillage, il y a beaucoup, beaucoup plus simple que de créer une armada de contrôle. Il suffit de donner une image de quadrillage comme fond (background) à votre formulaire ou votre contrôle pour qu'il l'affiche et l'objet de classe MouseEventArgs fourni lors des évènements de souris dispose d'un ensemble de propriétés qui permettrons de facilement déterminer la "case" qui a été cliquée, avec 2 simples modulo.

    Si vous ne voulez pas d'une architecture aussi poussée que celle fourni dans le lien de mon précédent post, je pense que le développement de contrôles utilisateurs et de quelques boutons pour les instancier et les déplacer serait un bon début.

    J'ai posté dans l'une de vos précédente question (http://www.developpez.net/forums/d99...r/#post5593562) une solution VS2010 avec des contrôles utilisateurs et leur utilisation dans une Form.

    Il ne devrait plus rester que la gestion du drag-and-drop, du déplacement à la souris des contrôles et l'affichage visuel d'éventuels liens entre les entités du modèle représentées par ces contrôles graphiques.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Bonjour Bacelar,

    Et merci une fois de plus ...

    J'avais déjà sorti le SuspendLayout et le ResumeLayout ...
    Et cela a beaucoup amélioré les choses; c'est très tolérable comme cela ...

    Le quadrillage n'est construit qu'une fois heureusement !!

    J'avais envisagé la solution du quadrillage en jpg mono bloc et je ne sais plus trop pourquoi je n'ai pas poursuivi dans ce sens ... Je ne note pas tout, c'est une erreur

    Bonne journée

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

Discussions similaires

  1. [AC-2010] Comment créer une boite de dialogue OUI/NON
    Par Aurélia33 dans le forum VBA Access
    Réponses: 1
    Dernier message: 21/03/2012, 11h51
  2. Comment créer une boite à outil en c#
    Par developppez dans le forum Windows Forms
    Réponses: 16
    Dernier message: 26/12/2008, 12h36
  3. Comment créer une boite de dialogue d'options comme Delphi?
    Par Patrick25300 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/01/2008, 17h56
  4. Réponses: 4
    Dernier message: 26/01/2006, 16h13
  5. Comment créer une palette d'outil comme photoshop
    Par Bourak dans le forum Composants VCL
    Réponses: 1
    Dernier message: 21/10/2005, 14h22

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